在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SPI通信總線概述和Verilog實(shí)現(xiàn)

FPGA設(shè)計(jì)論壇 ? 來(lái)源:FPGA設(shè)計(jì)論壇 ? 2025-02-07 14:28 ? 次閱讀

概述

SPI = Serial Peripheral Interface,是串行外圍設(shè)備接口,是一種高速,全雙工,同步的通信總線。

優(yōu)點(diǎn)
支持全雙工
支持高速
協(xié)議支持字長(zhǎng)不限于8bit,可以根據(jù)應(yīng)用靈活選擇消息字長(zhǎng)。
硬件連接簡(jiǎn)單

缺點(diǎn)
相比I2C多兩條線
沒有尋址機(jī)制,只能靠片選選擇不同的設(shè)備
沒有回應(yīng)ACK機(jī)制,主設(shè)備不知道消息發(fā)送是否成功
典型應(yīng)用僅支持單主控

硬件結(jié)構(gòu)

信號(hào)定義

SCK

:Serial Clock,時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。

MOSI

:Master Output,Slave Input 主發(fā)從收信號(hào)。在片選信號(hào)有效時(shí),數(shù)據(jù)由高位到低位,在時(shí)鐘的上升沿依次發(fā)送給從設(shè)備。

MISO

:Master Input,Slave Output 主收從發(fā)信號(hào),在片選信號(hào)有效時(shí),數(shù)據(jù)由高位到低位,在時(shí)鐘的上升沿依次發(fā)送給主設(shè)備。

SS/CS

:Slave Select 片選信號(hào),低有效,由主設(shè)備控制。即只有片選信號(hào)為預(yù)先規(guī)定的使能信號(hào)時(shí),對(duì)應(yīng)的芯片操作才有效,這使得在同一總線上連接多個(gè)SPI設(shè)備成為可能。

電路連接
單個(gè)主設(shè)備和單個(gè)從設(shè)備:
3643ce5e-e50a-11ef-9310-92fbcf53809c.png
單個(gè)主設(shè)備和多個(gè)從設(shè)備,通過用多個(gè)片選信號(hào)或者菊花鏈的形式完成。
3654bd72-e50a-11ef-9310-92fbcf53809c.png

傳輸模式
通過設(shè)置相關(guān)控制寄存器,SPI可以有四種傳輸模式。
1、時(shí)鐘空閑時(shí)的電平為高或低。
2、數(shù)據(jù)采樣發(fā)生在時(shí)鐘(SCK)的上/下邊沿。
將以上兩種情況兩兩組合,即可得四種傳輸模式。
數(shù)據(jù)在時(shí)鐘上升沿或下降沿時(shí)改變,在緊接著的下降沿或上升沿被讀取,完成一位數(shù)據(jù)傳輸,輸入與輸出原理相近。這樣通過至少8次時(shí)鐘信號(hào)的改變(上升沿和下降沿為一次),就可以完成8位數(shù)據(jù)的傳輸。如下圖所示。
36670d1a-e50a-11ef-9310-92fbcf53809c.png

標(biāo)準(zhǔn)SPI讀
36757d0a-e50a-11ef-9310-92fbcf53809c.png
片選→讀指令→地址→數(shù)據(jù)讀出

標(biāo)準(zhǔn)SPI寫
368f3f6a-e50a-11ef-9310-92fbcf53809c.png
片選→寫指令→地址→數(shù)據(jù)寫入

Verilog代碼解析

本文以SPI Master控制器為例來(lái)對(duì)Verilog源碼進(jìn)行分析,參考資料為《VERILOG HDL應(yīng)用程序設(shè)計(jì)實(shí)例精講》。
1、時(shí)鐘分頻模塊,將原始時(shí)鐘進(jìn)行四分頻,過程較為簡(jiǎn)單,不再詳述。

module clkdiv(clk,clkout);
input clk;
output clkout;

reg [1:0]cnt=2'd0;
reg clkout=1'b0;

always @(posedge clk)begin
    if(cnt==2'd1)begin
        clkout<=1'b1;
        cnt<=cnt+2'd1;
    end
    else if(cnt == 2'd3)begin
        clkout<=1'b0;
        cnt<=2'd0;
    end
    else begin
        cnt<=cnt+2'd1;
    end
end
endmodule

2、SPI發(fā)送數(shù)據(jù)部分,在spiclk的上升沿完成數(shù)據(jù)的傳輸。spics為片選信號(hào),低有效;spido為輸出的數(shù)據(jù);dstate為FSM變量。dsend為待傳送數(shù)據(jù),其中部分?jǐn)?shù)據(jù)過程重復(fù),代碼中僅保留首尾數(shù)據(jù)的傳輸過程。

begin
case (dstate)
8'd0:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd2;
end
8'd2:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= 1'b1;
dstate <= 8'd3;
end
8'd3:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[7];
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[7];
dstate <= 8'd5;
end
……
8'd17:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= dsend[0];
dstate <= 8'd18;
end
8'd18:
begin
spics <= 1'b0;
spiclk <= 1'b0;
spido <= dsend[0];
dstate <= 8'd19;
end
8'd19:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd20;
end
8'd20:
begin
spics <= 1'b0;
spiclk <= 1'b1;
spido <= 1'b1;
dstate <= 8'd0;
spistate <= idle;
end
endcase
end
default:
begin
spics <= 1'b1;
spiclk <= 1'b1;
spido <= 1'b1;
spistate <= 2'b00;
end
endcase
end

36a3815a-e50a-11ef-9310-92fbcf53809c.png
可以看到當(dāng)片選信號(hào)spics為低有效時(shí),數(shù)據(jù)在spiclk的上升沿按順序被發(fā)送至SPI總線上,數(shù)據(jù)信號(hào)spido與輸入數(shù)據(jù)相對(duì)應(yīng),SPI Master發(fā)送時(shí)序得到驗(yàn)證。
3、SPI接收數(shù)據(jù)部分,參數(shù)定義與2一樣,其中部分?jǐn)?shù)據(jù)過程重復(fù),代碼中僅保留首尾數(shù)據(jù)的傳輸過程。在時(shí)鐘的下降沿進(jìn)行數(shù)據(jù)的接收。

begin
case (dstate)
8'd0:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd1;
end
8'd1:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd2;
end
8'd2:
begin
spics <= 1'b0;
spiclk <= 1'b0;
dstate <= 8'd3;
end
8'd3:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd4;
end
8'd4:
begin
spics <= 1'b0;
spiclk <= 1'b0;
dreceive[7] <= spidi;
dstate <= 8'd5;
end
8'd5:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd6;
end
……
8'd18:
begin
spics <= 1'b0;
spiclk <= 1'b0;
dreceive[0] <= spidi;
dstate <= 8'd19;
end
8'd19:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd20;
dataout <= dreceive;
end
8'd20:
begin
spics <= 1'b0;
spiclk <= 1'b1;
dstate <= 8'd0;
spistate <= 2'b00;
end
endcase
end

36b4341e-e50a-11ef-9310-92fbcf53809c.png
由上圖分析看出,收到的數(shù)據(jù)與SPI傳輸?shù)臄?shù)據(jù)相對(duì)應(yīng),SPI接收數(shù)據(jù)部分得到正確驗(yàn)證。

實(shí)驗(yàn)項(xiàng)目框圖:
36caea9c-e50a-11ef-9310-92fbcf53809c.png

實(shí)驗(yàn)心得:
1、在給復(fù)位信號(hào)低電平時(shí)時(shí)間過短,分頻后時(shí)鐘上升沿還未到復(fù)位信號(hào)就拉高了,導(dǎo)致未進(jìn)行有效復(fù)位。
2、進(jìn)行發(fā)送/接收狀態(tài)檢測(cè)時(shí)設(shè)置的計(jì)數(shù)子過大,如下圖,每過40個(gè)時(shí)鐘周期進(jìn)行一次檢測(cè),當(dāng)仿真時(shí)間過短時(shí),容易看不到結(jié)果。

if(cnt == 8'd40)
begin
cnt <= 8'd0;
if((wr == 1'b0) && (rd == 1'b1))
begin
spistate <= send_data;
dstate <= 8'd0;
dsend <= datain;
end
else if((wr == 1'b1) && (rd == 1'b0))
begin
spistate <= receive_data;
dstate <= 8'd0;
end
end
else
begin
cnt <= cnt + 8'd1;
end

3、若結(jié)果出現(xiàn)問題,將相關(guān)控制信號(hào)添加至窗口,觀察其狀態(tài),分析程序存在的問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1366

    瀏覽量

    111909
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1785

    瀏覽量

    94879
  • 通信總線
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    9989

原文標(biāo)題:SPI詳解及Verilog源碼分析

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    SPI總線的原理與Verilog設(shè)計(jì)實(shí)現(xiàn)

     SPI(Serial Peripheral Interface,串行外圍設(shè)備接口),是Motorola公司提出的一種同步串行接口技術(shù)
    發(fā)表于 08-14 09:00 ?1433次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>總線</b>的原理與<b class='flag-5'>Verilog</b>設(shè)計(jì)<b class='flag-5'>實(shí)現(xiàn)</b>

    SPI總線概述

    文章轉(zhuǎn)自 http://www.51hei.com/mcu/4011.htmlSPI總線概述 SPI全稱是串行外設(shè)接口(Serial Peripheral Interface),是由
    發(fā)表于 10-19 09:42

    怎么使用FPGA實(shí)現(xiàn)SPI總線通信接口?

    隨著現(xiàn)代技術(shù)的發(fā)展,SPI接口總線已經(jīng)成為了一種標(biāo)準(zhǔn)的接口,由于協(xié)議實(shí)現(xiàn)簡(jiǎn)單,并且I/O資源占用少,為此SPI總線的應(yīng)用十分廣泛。目前,
    發(fā)表于 08-09 08:14

    STM32通信接口之硬件SPI概述

    一、概述 SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫。SPI,是一種高速的,全雙工,同步的通信總線
    發(fā)表于 08-11 08:38

    介紹一下SPI通信總線構(gòu)成與通信特點(diǎn)

    一、SPI通信概述SPI,Serial Peripheral Interface,串行外設(shè)接口。1、總線構(gòu)成:時(shí)鐘線SCK(主機(jī)用于控制
    發(fā)表于 02-14 06:58

    SPI總線實(shí)現(xiàn)DSP和MCU之間的高速通信

    簡(jiǎn)述了SPI總線協(xié)議工作時(shí)序和配置要求,通過一個(gè)成功的實(shí)例詳細(xì)介紹了使用SPI總線實(shí)現(xiàn)DSP與MCU之間的高速
    發(fā)表于 11-27 15:10 ?58次下載

    FPGA實(shí)現(xiàn)CAN總線通信節(jié)點(diǎn)設(shè)計(jì)

    基于對(duì)CAN 總線控制器的功能分析, 并應(yīng)用Verilog語(yǔ)言進(jìn)行軟件設(shè)計(jì), 從而實(shí)現(xiàn)CAN節(jié)點(diǎn)之間的通信功能。
    發(fā)表于 04-28 09:56 ?1.5w次閱讀
    FPGA<b class='flag-5'>實(shí)現(xiàn)</b>CAN<b class='flag-5'>總線</b><b class='flag-5'>通信</b>節(jié)點(diǎn)設(shè)計(jì)

    帶有N的SPI總線詳細(xì)資料概述

    本文檔概述SPI(串行外圍接口)總線,該總線通常用于集成電路或傳感器之間的通信。本教程討論了總線
    發(fā)表于 03-10 08:00 ?0次下載
    帶有N的<b class='flag-5'>SPI</b><b class='flag-5'>總線</b>詳細(xì)資料<b class='flag-5'>概述</b>

    使用Verilog實(shí)現(xiàn)SPI串行總線接口的資料和源代碼免費(fèi)下載

    器件以串行方式進(jìn)行通信、交換信息。本文簡(jiǎn)述了SPI總線的特點(diǎn),介紹了其4條信號(hào)線,SPI串行總線接口的典型應(yīng)用。重點(diǎn)描述了
    發(fā)表于 08-19 08:00 ?9次下載
    使用<b class='flag-5'>Verilog</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>SPI</b>串行<b class='flag-5'>總線</b>接口的資料和源代碼免費(fèi)下載

    SPI總線驅(qū)動(dòng)的C語(yǔ)言源代碼詳細(xì)概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是SPI總線驅(qū)動(dòng)的C語(yǔ)言源代碼詳細(xì)概述
    的頭像 發(fā)表于 09-26 11:36 ?9881次閱讀

    基于SPI串行總線接口的Verilog實(shí)現(xiàn)

    與各種外圍接口器件以串行方式進(jìn)行通信、交換信息。本文簡(jiǎn)述了SPI總線的特點(diǎn),介紹了其4條信號(hào)線,SPI串行總線接口的典型應(yīng)用。 重點(diǎn)描述了
    的頭像 發(fā)表于 05-29 10:16 ?5410次閱讀
    基于<b class='flag-5'>SPI</b>串行<b class='flag-5'>總線</b>接口的<b class='flag-5'>Verilog</b><b class='flag-5'>實(shí)現(xiàn)</b>

    SPI通信

    SPI簡(jiǎn)介SPI是一種串行外圍設(shè)備通信接口,高速全雙工通信總線,主要用于通信速率較高的場(chǎng)合。
    發(fā)表于 12-22 19:13 ?3次下載
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>

    通信協(xié)議:SPI

    STM32模擬SPI通信協(xié)議SPI的簡(jiǎn)介:SPI是串行外設(shè)接口的縮寫,是一種高速的,全雙工、同步的串行通信
    發(fā)表于 12-22 19:20 ?22次下載
    <b class='flag-5'>通信</b>協(xié)議:<b class='flag-5'>SPI</b>

    常用串行總線(二)——SPI協(xié)議(Verilog實(shí)現(xiàn))

    SPI(Serial Perripheral Interface, 串行外圍設(shè)備接口)是 Motorola 公司推出的一種同步串行接口技術(shù)。SPI 總線在物理上是通過接在外圍設(shè)備微控制器
    的頭像 發(fā)表于 01-06 14:35 ?9610次閱讀

    淺談SPI總線通信接口及其協(xié)議

    上篇內(nèi)容我們介紹了IIC總線通信接口及其協(xié)議,這一篇文章我們介紹另一種項(xiàng)目開發(fā)中非常常見的通信接口——SPI總線
    的頭像 發(fā)表于 03-22 16:11 ?2151次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協(xié)議
    主站蜘蛛池模板: 亚州第一视频 | 91pao强力打造免费高清 | 特黄特色的大片观看免费视频 | 天天躁夜夜 | 天天色综合1 | 婷婷激情五月综合 | 一区二区免费播放 | 欧美yw193.c㎝在线观看 | 午夜毛片福利 | 22eee在线播放成人免费视频 | 国产午夜久久精品 | 久久久久久久综合色一本 | 黄色片网站日本 | 亚洲欧美国产高清va在线播放 | 狠狠色丁香婷婷久久综合不卡 | 天天夜夜狠狠 | 久久综合九色欧美综合狠狠 | 欧美a网站| 男人的天堂97 | 天堂-bt种子 | 色噜噜久久 | a天堂中文在线官网 | 欧美一级艳片视频免费观看 | 免费看啪啪网站 | 国产精品成人观看视频国产奇米 | 亚洲综合资源 | 精品精品国产自在久久高清 | 久久香蕉国产精品一区二区三 | 狠狠狠色丁香婷婷综合激情 | 伊人久久大香线蕉综合电影 | 五月综合激情视频在线观看 | 天堂网中文在线 | 手机福利在线观看 | 欧美一区二区三区四区在线观看 | 免费黄色大片网站 | 色偷偷91久久综合噜噜噜噜 | 午夜视频黄 | 爱爱帝国亚洲一区二区三区 | 亚洲国产精品久久婷婷 | 国产一区二区三区在线观看影院 | 免费啪啪网 |