一、什么是SPI協議
SPI,全稱(Serial Peripheral interface)是由摩托羅拉公司首先定義的協議,中文名為串型外圍設備接口。SPI是一種高速全雙工的總線協議
Serial(串型):與并型相對應,單向數據通路只需要一根線,而同樣常見的AMBA則為并型總線
Peripheral(外圍):指此總線多用來連接如“AD轉換、EEPROM、PWM”等外圍設備,即對應于AMBA的APB部分
Interface(總線接口):很好理解,不再贅述。
二、什么是全雙工通信協議
通信協議可以按照通信方式分為單工,半雙工,全雙工三種。
單工:發射端和接收端固定,有一條數據通路,通路上數據單向流動。
半雙工:發射端和接收端可變,有一條數據通路,通路上數據雙向流動。
全雙工:發射端和接收端,有兩條數據通路,一條從TX到RX,另一條從RX到TX。
一張形象的圖片表示如下

比如說我們在從零開始的Verilog UART設計中所實現的就是一個單工UART
因為SPI是全雙工總線協議,因此SPI的數據通路上存在從主設備到從設備的數據通道和從從設備到主設備的數據通道
三、SPI的信號線
SPI需要四條線才能完成數據的發送,分為3條總線和1條片選線

SCK:Serial Clock, 串行時鐘信號,SPI需要依靠著這個信號的邊沿進行數據的傳遞
MOSI:Master output Slave input,對于主設備來說,是發送數據的端口,對于從設備來說,是接收數據的端口。
MISO:Master input Slave output,對于從設備來說,是接收數據的端口,對于主設備來說,是發送數據的端口。
NSS: N Slave connect,一般情況下是由主機發送,從機接收,表示哪一個從設備有效的信號
因為MOSI和MISO的存在,因此SPI才是一個全雙工的協議(即分別對于主設備和從設備來說,既可以發送數據,又可以接收數據)
四、SPI的連接方式
根據從設備之間是否存在聯系,我們可以將SPI的連接方式分為“多NSS形式”和”菊花鏈形式”。
4.1 多NSS形式
SPI的第一種連接方式是“多NSS形式”的連接,比如說從設備1是一個AD轉換模塊,從設備2是一個比較器,設備3是一塊液晶,他們之間沒有聯系,主設備需要操控哪個從設備,就拉低對應NSS上面的信號,使能從設備進行數據轉換

4.2 菊花鏈形式
SPI協議的第二種形式是菊花鏈的形式,比如說從設備1是一塊EEPROM,從設備2是一個DSP,從設備3是一個比較器,三個從設備之間存在聯系,當來自主設備的地址信號到來時,先從EEPROM中讀出數據,數據放到DSP中進行處理,處理后的數據,最終在從設備3中進行比較

五、SPI可配置變量
5.1 時鐘極性(CPOL)
時鐘極性(CPOL)指通訊設備處于空閑狀態(SPI開始通訊前、nSS線無效)時,SCK的狀態。

這里的CPOL實際上對應于狀態機IDLE狀態時的SCK的值是0是1,即三段式狀態機IDLE時的輸出
5.2 時鐘相位(CPHA)
時鐘相位(CPHA)指數據的采樣時刻位于SCK的偶數邊沿采樣還是奇數邊沿采樣。

舉例:假如CPOL = 0時,CPHA=0,對應1,3,5處采樣,即為上升沿采樣,CPHA=1,對應2,4,6處采樣,即為下降沿采樣。

這里的CPHA也同樣能在狀態機的跳變中得到體現,即對應某些狀態的采樣行為
5.3 CPOL和CPHA組合出四種情況

根據這個圖,我們可以發現
Case1:CPOL=0, CPHA=0
Case2:CPOL=1, CPHA=1,Case1和Case2都對應上升沿觸發
Case3:CPOL=0, CPHA=1
Case4:CPOL=1, CPHA=0,Case3和Case4都對應下降沿觸發
為了保證采樣的時候數據穩定,我們還需要做些什么?
我們需要保證采樣的時候數據是穩定的,才不會發生建立時間和保持時間的違例,因此,當我們在上升沿的時候進行采樣,我們可以在前一個相差半個時鐘周期的下降沿,切換數據。
同樣,當我們在下降沿的時候進行采樣,我們也可以在前一個相差半個時鐘周期的上升沿,切換數據,以此來保證采樣時的數據穩定性。
5.4數據大小
有一張非常形象的圖片來形容SPI的數據發送與接收,即每當Master發送一位數據的時候,他還會接收到一位數據,因此對于SPI來說,數據傳輸的本質其實是兩個寄存器的移位操作,寄存器的位寬,就是我們所說的數據大小,一般情況下,SPI的數據大小是一個字節或者兩個字節(8位或16位)

5.5 波特率分頻系數
對于全局時鐘來講,頻率可能會很高,比如常見的CPU是GHz級別,常見的MCU也有近百MHz級別,但是對于所連接的外設,受限于建立時間和保持時間的限制,可能沒有辦法跑到MCU主頻的級別,因此我們可能需要波特率分頻系數來對高速全局時鐘進行處理,以此來確保不發生data的violation。
5.6 其他參數
以上參數可以保證SPI的基本功能,但一個更為完善的SPI當然不僅限于以上參數,以下參數僅作基本梳理,感興趣的同學可自行了解相關內容。
SPI_FirstBit,決定SPI是MSB還是LSB的傳輸形式
SPI_CRCPolynomial,決定SPI是否采用CRC校驗的形式進行數據傳輸
SPI_Direction; 傳輸方向,兩向全雙工或單向接收
原文鏈接
https://blog.csdn.net/weixin_43698385/article/details/124928101
-
通信協議
+關注
關注
28文章
1093瀏覽量
42237 -
接口
+關注
關注
33文章
9546瀏覽量
157204 -
總線
+關注
關注
10文章
3045瀏覽量
91713 -
SPI協議
+關注
關注
0文章
24瀏覽量
8841
原文標題:理解SPI協議
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
STM32 單片機C語言課程4-C語言預處理深入剖析1
STM32 單片機C語言課程5-C語言預處理深入剖析2
STM32 SPI通信協議的相關資料分享
基于FPGA的SPI協議及設計實現
SPI協議詳解
STM32 SPI通信協議詳細講解—小白入門
STM32 SPI配置及深入解析
spi協議介紹
深入剖析SPI協議
評論