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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SPI通信總線概述和Verilog實現

FPGA設計論壇 ? 來源:FPGA設計論壇 ? 2025-02-07 14:28 ? 次閱讀

概述

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

優點
支持全雙工
支持高速
協議支持字長不限于8bit,可以根據應用靈活選擇消息字長。
硬件連接簡單

缺點
相比I2C多兩條線
沒有尋址機制,只能靠片選選擇不同的設備
沒有回應ACK機制,主設備不知道消息發送是否成功
典型應用僅支持單主控

硬件結構

信號定義

SCK

:Serial Clock,時鐘信號,由主設備產生。

MOSI

:Master Output,Slave Input 主發從收信號。在片選信號有效時,數據由高位到低位,在時鐘的上升沿依次發送給從設備。

MISO

:Master Input,Slave Output 主收從發信號,在片選信號有效時,數據由高位到低位,在時鐘的上升沿依次發送給主設備。

SS/CS

:Slave Select 片選信號,低有效,由主設備控制。即只有片選信號為預先規定的使能信號時,對應的芯片操作才有效,這使得在同一總線上連接多個SPI設備成為可能。

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

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

標準SPI讀
36757d0a-e50a-11ef-9310-92fbcf53809c.png
片選→讀指令→地址→數據讀出

標準SPI寫
368f3f6a-e50a-11ef-9310-92fbcf53809c.png
片選→寫指令→地址→數據寫入

Verilog代碼解析

本文以SPI Master控制器為例來對Verilog源碼進行分析,參考資料為《VERILOG HDL應用程序設計實例精講》。
1、時鐘分頻模塊,將原始時鐘進行四分頻,過程較為簡單,不再詳述。

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發送數據部分,在spiclk的上升沿完成數據的傳輸。spics為片選信號,低有效;spido為輸出的數據;dstate為FSM變量。dsend為待傳送數據,其中部分數據過程重復,代碼中僅保留首尾數據的傳輸過程。

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
可以看到當片選信號spics為低有效時,數據在spiclk的上升沿按順序被發送至SPI總線上,數據信號spido與輸入數據相對應,SPI Master發送時序得到驗證。
3、SPI接收數據部分,參數定義與2一樣,其中部分數據過程重復,代碼中僅保留首尾數據的傳輸過程。在時鐘的下降沿進行數據的接收。

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
由上圖分析看出,收到的數據與SPI傳輸的數據相對應,SPI接收數據部分得到正確驗證。

實驗項目框圖:
36caea9c-e50a-11ef-9310-92fbcf53809c.png

實驗心得:
1、在給復位信號低電平時時間過短,分頻后時鐘上升沿還未到復位信號就拉高了,導致未進行有效復位。
2、進行發送/接收狀態檢測時設置的計數子過大,如下圖,每過40個時鐘周期進行一次檢測,當仿真時間過短時,容易看不到結果。

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、若結果出現問題,將相關控制信號添加至窗口,觀察其狀態,分析程序存在的問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1364

    瀏覽量

    111409
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1748

    瀏覽量

    93994
  • 通信總線
    +關注

    關注

    0

    文章

    46

    瀏覽量

    9967

原文標題:SPI詳解及Verilog源碼分析

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    SPI總線的原理與Verilog設計實現

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

    SPI總線概述

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

    怎么使用FPGA實現SPI總線通信接口?

    隨著現代技術的發展,SPI接口總線已經成為了一種標準的接口,由于協議實現簡單,并且I/O資源占用少,為此SPI總線的應用十分廣泛。目前,
    發表于 08-09 08:14

    STM32通信接口之硬件SPI概述

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

    介紹一下SPI通信總線構成與通信特點

    一、SPI通信概述SPI,Serial Peripheral Interface,串行外設接口。1、總線構成:時鐘線SCK(主機用于控制
    發表于 02-14 06:58

    SPI總線實現DSP和MCU之間的高速通信

    簡述了SPI總線協議工作時序和配置要求,通過一個成功的實例詳細介紹了使用SPI總線實現DSP與MCU之間的高速
    發表于 11-27 15:10 ?58次下載

    FPGA實現CAN總線通信節點設計

    基于對CAN 總線控制器的功能分析, 并應用Verilog語言進行軟件設計, 從而實現CAN節點之間的通信功能。
    發表于 04-28 09:56 ?1.5w次閱讀
    FPGA<b class='flag-5'>實現</b>CAN<b class='flag-5'>總線</b><b class='flag-5'>通信</b>節點設計

    帶有N的SPI總線詳細資料概述

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

    使用Verilog實現SPI串行總線接口的資料和源代碼免費下載

    器件以串行方式進行通信、交換信息。本文簡述了SPI總線的特點,介紹了其4條信號線,SPI串行總線接口的典型應用。重點描述了
    發表于 08-19 08:00 ?9次下載
    使用<b class='flag-5'>Verilog</b><b class='flag-5'>實現</b><b class='flag-5'>SPI</b>串行<b class='flag-5'>總線</b>接口的資料和源代碼免費下載

    SPI總線驅動的C語言源代碼詳細概述

    本文檔的主要內容詳細介紹的是SPI總線驅動的C語言源代碼詳細概述
    的頭像 發表于 09-26 11:36 ?9009次閱讀

    基于SPI串行總線接口的Verilog實現

    與各種外圍接口器件以串行方式進行通信、交換信息。本文簡述了SPI總線的特點,介紹了其4條信號線,SPI串行總線接口的典型應用。 重點描述了
    的頭像 發表于 05-29 10:16 ?5329次閱讀
    基于<b class='flag-5'>SPI</b>串行<b class='flag-5'>總線</b>接口的<b class='flag-5'>Verilog</b><b class='flag-5'>實現</b>

    SPI通信

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

    通信協議:SPI

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

    常用串行總線(二)——SPI協議(Verilog實現)

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

    淺談SPI總線通信接口及其協議

    上篇內容我們介紹了IIC總線通信接口及其協議,這一篇文章我們介紹另一種項目開發中非常常見的通信接口——SPI總線
    的頭像 發表于 03-22 16:11 ?2053次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協議
    主站蜘蛛池模板: 日本欧美午夜 | 国产美女视频免费 | 天天躁日日2018躁狠狠躁 | 色综合久久综合欧美综合图片 | 7777在线 | 免费看又爽又黄禁片视频1000 | 色cccwww| 特黄特黄一级高清免费大片 | 四虎最新网址入口 | 亚洲国产欧美在线人成aaa | 国产精品欧美激情在线播放 | 国模私拍大尺度视频在线播放 | 日本不卡视频一区二区三区 | 黄色网址在线免费观看 | 国产真实偷乱视频在线观看 | 激情亚洲 | 五月婷在线观看 | 97在线精品 | 欧美黑人性受xxxx精品 | 天天看天天干 | 激情综合五月亚洲婷婷 | 午夜爱爱网站 | 午夜在线免费观看 | 国产精品美女在线 | 在线干 | 天天狠狠色噜噜 | 天堂中文字幕在线 | 午夜精品免费 | 国产卡一卡2卡三卡免费视频 | 国产免费人成在线视频视频 | 日本三级全黄三级a | 午夜在线播放视频在线观看视频 | a一级 | 插菊综合网 | 老外一级黄色片 | 亚洲韩国在线一卡二卡 | 免费观看片 | 无遮挡很爽很污很黄的网站w | 精品三级在线观看 | 欧美一级视频免费观看 | 亚洲国产成人va在线观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品