資料介紹
有哪些內容?
SPI協議簡介
板卡內不同芯片間通訊最常用的三種串行協議:UART、I2C、SPI,之前寫過及其,今天我們來介紹SPI協議,SPI是Serial Perripheral Interface的簡稱,是由Motorola公司推出的一種高速、全雙工的總線協議。
與IIC類似,SPI也是采用主從方式工作,主機通常為FPGA、MCU或DSP等可編程控制器,從機通常為EPROM、Flash,AD/DA,音視頻處理芯片等設備。一般由SCLK、CS、MOSI,MISO四根線組成,有的地方可能是:SCK、SS、SDI、SDO等名稱,都是一樣的含義,當有多個從機存在時,通過CS來選擇要控制的從機設備。和標準SPI類似的協議,還有TI的SSP協議,區別主要在片選信號的時序上。
4線還是3線?
當我們談到SPI時,默認情況下都是指標準的4線制Motorola SPI協議,即SCLK,MOSI,MISO和CS共4根數據線,標準4線制的好處是可以實現數據的全雙工傳輸。當只有一個主機和一個從機設備時,只需要一個CS,多個從機需要多個CS,各數據線的介紹:
-
SCLK,時鐘信號,時鐘頻率即SPI速率,和SPI模式有關
-
MOSI,主機輸出,從機輸入
-
MISO,主機輸入,從機輸出
-
CS,從機設備選擇,低電平有效
3線制SPI,根據不同的應用場景,主要有以下2種類型:
-
只有3根線:SCLK,CS和DI或DO,適用于單工通訊,主機只發送或接收數據。
-
只有3根線:SCLK,SDIO和CS,這里的SDIO作為雙向端口,適用于半雙工通訊,比如ADI的多款ADC芯片都支持雙向傳輸。在使用FPGA操作雙向端口時,作為輸入時要設置為高阻態z。
還有標準SPI協議的升級版,Dual SPI、Quad SPI和QPI等,這些協議不在本小節3線/4線制討論的范圍內,文章后面會提到。
4種工作模式
既然是進行數據傳輸,雙方就要明確從機在什么時刻去采樣主機發出的數據,主機在什么時刻去讀取從機發來的數據。對于STM32等MCU自帶的硬件SPI外設來說,可能沒有那么重要,只需要配置一下模式就行了,但是對于使用使用GPIO模擬或者FPGA來實現SPI的時序,這一點是非常重要的,這就涉及到SPI標準協議的工作模式了,通過CPOL(Clock Polarity)時鐘極性和CPHA(Clock Phase)時鐘相位的不同組合,可以分為4種模式。
一般從機器件的工作模式是固定的,主機需要采用一樣的工作模式,雙方才能正?!敖涣鳌?。
CPOL=0表示,SCK在空閑狀態時為0 CPOL=1表示,SCK在空閑狀態時為1 CPHA=0表示,在SCK第一個邊沿時輸入輸出數據有效 CPHA=1表示,在SCK第二個邊沿時輸入輸出數據有效
這四種模式中,應用最廣泛的是模式0和3,大多數SPI器件都同時支持這兩種工作模式,其實這些都不重要,具體采用什么模式,看你的器件手冊就知道了。
以我最近工作中使用到的一款Cypress的鐵電存儲器FM25V05為例,在其官方DataSheet上介紹同時支持SPI Mode 0和Mode 3,
根據后面的時序圖,可以得知SPI mode 0的讀寫時序,圖中可以看出SCK空閑狀態為低電平,主機數據在每個上升沿被從機采樣,數據輸出同理。
對于SPI mode0,SCK空閑狀態為高電平,主機數據在每個上升沿被從機采樣,數據輸出同理。
模式1和模式2同理,模式1即CPOL=0,CPHA=1,SCK空閑為0,在SCK第二個邊沿時數據有效,即SCK下降沿有效。
模式2即CPOL=1,CPHA=0,SCK空閑為1,在SCK第一個邊沿時數據有效,即SCK下降沿有效。
在一些自帶SPI硬件外設的MCU上,設置主機的SPI模式非常簡單,只需要配置幾個寄存器的值即可,而且是寫了SCK高電平還是低電平,和第一個還是第二個邊沿,不用去記憶等于0還是等于1。以STM32F103硬件SPI配置為例:
SPI_InitTypeDef??SPI_InitStruct; SPI_InitStruct.SPI_Mode?=SPI_Mode_Master;???????//主 ..... SPI_InitStruct.SPI_CPOL?=SPI_CPOL_High;?//SCK空閑時為高電平 SPI_InitStruct.SPI_CPHA?=SPI_CPHA_1Edge;//SCK第一個邊沿有效 ..... SPI_Init(SPI2,&SPI_InitStruct);
而在FPGA中實現,需要嚴格根據時序來控制SCK和數據的輸入輸出。
多種傳輸速率
SCK的速率就是SPI的傳輸速率,SPI協議沒有一個固定的速率,不像IIC標準模式100K,快速模式400K,高速模式3.4M,SPI的傳輸速率取決于器件本身支持多高的速率,器件手冊里都有描述,以FM25V05為例:
不同電源電壓情況下的最大SCK時鐘頻率:SPI協議的基本時序
CS為低電平時,表示對應的從機設備被使能,在每個SCLK周期可以傳輸1Bit數據,采樣時刻取決于器件支持的SPI mode,根據不同SPI器件的控制方法,在進行正式的數據讀寫操作前,一般需要先寫入控制字,然后是寄存器地址和數據。下圖是FM25V05鐵電存儲器采用SPI模式0的寫時序:
讀時序:
如果要使用FPGA來實現SPI時序,在CS下降沿和SCLK第一個邊沿,或CS上升沿和SCLK最后一個邊沿之間要留有一定的延遲時間,一般是0.5個SCLK周期。
一些SPI從機設備支持菊花鏈連接模式,即節省GPIO,又不會占據太多布線面積,但并不是所有的SPI器件都支持菊花鏈模式。
控制時序:
SPI協議的升級版
傳統標準的SPI協議,一個SCLK周期只能傳輸1Bit數據,能不能一個SCLK傳輸多個Bit數據呢?答案是可以的。Motorola公司在現有的標準4線SPI協議上,又開發出了多種SPI協議的升級版,通過增加數據線位數的方式,來提高數據傳輸的效率,目前很多Flash廠家都已經支持多種SPI協議。
以比較常用的一款SPI Flash ROM W25Q128FW為例,在其器件手冊上寫著除了標準的4線SPI模式,還支持Dual SPI,Quad SPI,QPI等,在這幾種模式下,IO0/1/2/3這些IO作為雙向端口,大大增加了數據讀寫的速率。
QSPI協議讀寫時序:
一些支持QSPI協議的Flash芯片型號:
FPGA實測SPI波形
FPGA實現、SPI、IIC等串行時序,最常用的實現方式就是狀態機大法,將各個步驟分解為各個狀態,然后根據不同的狀態去控制輸出或讀取輸入,細節方面需要考慮數據的對齊、建立和保持時間、一些異常情況時狀態的跳轉,不能進入死循環,或卡死在某一個狀態。
下圖的波形是使用Xilinx FPGA對一款鐵電存儲器FM25V05的驅動,采用標準4線SPI協議,和IIC接口的ERPOM操作方式類似:先寫控制字,再寫地址,再寫數據或者讀數據,SCK時鐘頻率40MHz,使用ChipScope抓取到的實際讀寫波形,在SCK低電平中間數據改變,在SCK上升沿左右數據要保持穩定。
SPI寫時序,需要注意的是先寫使能命令,然后重新產生CS信號,這一塊卡了好久,在官方示例的C代碼中才發現了問題所在,還是對手冊上的時序理解不到位。
FM25V05寫時序SPI讀時序,先寫控制字,再寫16位地址,然后讀8位數據。
FM25V05讀時序SPI和IIC的對比
-
SPI是全雙工,而IIC是半雙工。
-
IIC支持多主機多從機模式,而SPI只能有一個主機。
-
從GPIO占用上來看,IIC占用更少的GPIO,更節省資源。
-
SPI的數據位寬更靈活,可以根據需要選擇多位數據寬度。
-
SPI協議沒有響應機制,主機無法得知從機是否接收到所發的數據,如果不采取一些方法的話可能會導致數據丟幀。
-
正是因為沒有復雜的響應機制,SPI協議可以做到非常高的速率(上百兆),每一個SCK都可以進行數據的傳輸,通過引入CRC校驗等校驗方法,可以即高速傳輸數據,又能保持數據的準確度。
-
IIC通過器件地址來選擇從機,從機數量的增加不會導致GPIO的增加,而SPI通過CS選擇從機,每增加一個從機就要多占用一個GPIO,當然也可以通過加入譯碼器來實現多從機控制。
-
SPI協議在SCLK邊沿進行采樣,IIC在SCL高電平器件進行采樣。
-
兩者大多都應用于板內器件短距離通訊。
總結
使用FPGA來實現SPI時序,最大的好處就是靈活,時序可以根據需要精確的定制,可以實現非常高的速率,特別是同時驅動多片芯片上有很大的優勢,在一些高速AD采集的場合必須使用FPGA來實現,難點就是做起來比較麻煩,需要一點點的調試,仿真,雖然FPGA也有一些現成的IP可以使用,但還是不夠靈活。不像STM32等MCU那樣有現成的庫函數和寄存器簡單幾行代碼配置一下,就可以實現主從模式、SPI模式、數據位寬、多種速率、單線雙線、半雙工全雙工、DMA等等??傊現PGA和MCU各有優點,也各有不足,根據需求來選擇吧!無論采用什么控制器實現,只要根據數據手冊嚴格控制時序,就沒有什么協議是不能搞定的!
- 一文看懂SPI協議
- SPI接口通信協議詳解:SPI時序、2線、3線、4線SPI及4種常用工作模式
- 直角走線對信號的影響資料下載
- PCB三種特殊走線技巧:直角走線,差分走線,蛇形線資料下載
- 關于時鐘線/數據線/地址線上串聯電阻及其作用資料下載
- FR4敷銅板上走線和過孔的電流承載能力的方案和測試資料下載
- 一張表總結常規DDR3的走線設計資料下載
- SPI總線協議介紹(接口定義,傳輸時序)資料下載
- PCB LAYOUT的直角走線、差分走線、蛇形線資料下載
- 用現成IP不寫任何代碼怎么實現三線制SPI資料下載
- 電磁流量計接線圖及信號線、勵磁線、電源線等型號規格資料下載
- 數字電路4線步進電機控制的仿真資料免費下載 13次下載
- 使用nRF51822驅動天馬4線SPI的LCD彩屏的程序免費下載
- 4線SPI彩屏局部刷屏偏移應該如何解決
- 4線單極性步進馬達線 技術資料 7次下載
- GitHub Copilot+ESP開發實戰-SPI 261次閱讀
- MSPM0L1306開發板教程-SPI 2236次閱讀
- SPI接口如何幫助減少系統板設計中的數字GPIO數量 983次閱讀
- 常用的4線SPI接口介紹 3975次閱讀
- K線診斷協議驅動器的工作原理及如何實現設計 5698次閱讀
- 二線三線的溫度傳感器怎么接線? 3.7w次閱讀
- 詳解SPI總線協議與時序圖 1.3w次閱讀
- SPI總線協議的通信原理解析 4189次閱讀
- 串行外設接口SPI通信協議的應用 1777次閱讀
- 重點介紹常用的4線SPI接口 1.9w次閱讀
- 深入剖析4線SPI器件 1.2w次閱讀
- 介紹常用的4線SPI接口 6.4w次閱讀
- 兩線制、三線制、四線制它們的定義 1.2w次閱讀
- 線編程技術 STC單片機的下載線設計 3962次閱讀
- 硬線和軟線的區別在哪?家裝硬線好還是軟線好?空調軟線好還是硬線好? 1.6w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 11次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5DIY動手組裝LED電子顯示屏
- 0.98 MB | 3次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機PM2.5檢測系統程序
- 0.83 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537797次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191186次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多