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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    1352

    瀏覽量

    110404
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1724

    瀏覽量

    92144
  • 通信總線
    +關注

    關注

    0

    文章

    45

    瀏覽量

    9889

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

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

收藏 人收藏

    評論

    相關推薦

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

     SPI(Serial Peripheral Interface,串行外圍設備接口),是Motorola公司提出的一種同步串行接口技術
    發表于 08-14 09:00 ?1252次閱讀
    <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 ?7818次閱讀

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

    與各種外圍接口器件以串行方式進行通信、交換信息。本文簡述了SPI總線的特點,介紹了其4條信號線,SPI串行總線接口的典型應用。 重點描述了
    的頭像 發表于 05-29 10:16 ?5184次閱讀
    基于<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 ?8766次閱讀

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

    上篇內容我們介紹了IIC總線通信接口及其協議,這一篇文章我們介紹另一種項目開發中非常常見的通信接口——SPI總線
    的頭像 發表于 03-22 16:11 ?1883次閱讀
    淺談<b class='flag-5'>SPI</b><b class='flag-5'>總線</b><b class='flag-5'>通信</b>接口及其協議
    主站蜘蛛池模板: 痴女在线播放免费视频 | 97涩涩涩| 完整日本特级毛片 | 狠狠综合欧美综合欧美色 | 四虎影视大全免费入口 | 女同毛片免费网站 | 日本理论片www视频 日本理论午夜中文字幕第一页 | 日本黄色小视频在线观看 | 福利社藏经阁 | 免费观看欧美一级高清 | 欧美午夜视频一区二区 | 色偷偷88欧美精品久久久 | 99 久久99久久精品免观看 | 日本在线观看永久免费网站 | 日韩一卡2卡三卡4卡无卡网站 | 特级黄毛片| 国产成人a一区二区 | 老师喂我吃她的奶水脱她胸罩 | 最好免费高清视频观看韩国 | 成人午夜小视频手机在线看 | 一级一片免费视频播放 | 久久精品国产精品亚洲红杏 | 国模私拍一区二区三区 | 亚洲成人黄色网址 | 狠狠色视频 | a网站免费| 成人综合网址 | 欧美成人a| 国模精品视频一区二区三区 | 一级特色黄大片 | 日本口工禁漫画无遮挡全彩 | 亚洲产国偷v产偷v自拍色戒 | 午夜视频免费观看 | 一区二区三区视频在线观看 | 国产黄色在线免费观看 | 成人理论片 | 日日操免费视频 | 综合免费一区二区三区 | 四虎永久免费网站免费观看 | 日美一级毛片 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片鸭王 |