|
SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳。SPI以主從方式工作模式被廣泛應(yīng)用于電路系統(tǒng)中,我結(jié)合自己的項目情況對SPI協(xié)議進行解析,并通過LOTO虛擬示波器采集到的數(shù)據(jù)波形并進行對比分析,方便大家的理解。
SPI通信協(xié)議一般只需要四根線將主控芯片與從芯片連接起來,其中四根線分別為:
(1)SDO – 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入
(2)SDI – 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出
(3)SCLK – 時鐘信號,由主設(shè)備產(chǎn)生
(4)CS – 從設(shè)備使能信號,由主設(shè)備控制
其中CS是控制芯片是否被選中的,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設(shè)備成為可能。
實踐6圖1.jpg (30.93 KB, 下載次數(shù): 163)
下載附件
2020-6-9 10:58 上傳
實際應(yīng)用中只需要三根線來進行通信。在SPI是串行通訊協(xié)議下,數(shù)據(jù)是一位一位的傳輸的。這就是SCLK時鐘線存在的原因,由SCLK提供時鐘脈沖,SDO則基于此脈沖完成數(shù)據(jù)傳輸。數(shù)據(jù)輸出通過 SDO線在時鐘上升沿或下降沿時改變,完成一位數(shù)據(jù)傳輸。輸入也使用同樣原理。在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)(一個字節(jié)數(shù)據(jù))的傳輸。下面是項目中所涉及的SPI通信協(xié)議的時序圖為16位數(shù)據(jù)。
這是我初次嘗試失敗了的例子,使用LOTO的USB示波器OSCA02采集到的對應(yīng)波形如下圖所示。
實踐6圖2.jpg (116.95 KB, 下載次數(shù): 181)
下載附件
2020-6-9 10:58 上傳
地線過長導(dǎo)致這個信號的噪聲比較大,但其實失敗的根本原因是,我的示波器只有兩個輸入通道,所以只能看主要的 時鐘和一路數(shù)據(jù)的對應(yīng)關(guān)系,遠遠做不到解碼,大家可以直觀的感受下實際的SPI信號的樣子,后面有彩蛋。
在一個基于SPI的設(shè)備中,至少有一個主控設(shè)備。這樣傳輸?shù)奶攸c:與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停。當(dāng)沒有時鐘跳變時,從設(shè)備不采集或傳送數(shù)據(jù)。主設(shè)備通過對SCLK時鐘線的控制可以完成對通訊的控制。因為SPI的數(shù)據(jù)輸入和輸出線獨立,所以允許同時完成數(shù)據(jù)的輸入和輸出。不同的SPI設(shè)備的實現(xiàn)方式有所不同,主要是數(shù)據(jù)改變和采集的時間不同,在時鐘信號上沿或下沿采集有不同定義。
SPI接口不需要進行尋址操作,且為全雙工通信,簡單高效。硬件上比I2C系統(tǒng)要稍微復(fù)雜一些。由于SPI沒有指定的流控制,沒有應(yīng)答機制確認(rèn)是否接收到數(shù)據(jù)。
在自己的項目中只用到數(shù)據(jù)輸出模式,因此SPI可串行3線方式進行通信:一條時鐘線SCLK,一條輸出控制線CS,一條數(shù)據(jù)輸出線SDO;
SPI 模塊為了和外設(shè)進行數(shù)據(jù)交換,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果 CPOL=0,串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時鐘相位和極性應(yīng)該一致。
實踐6圖3.jpg (16.98 KB, 下載次數(shù): 173)
下載附件
2020-6-9 10:58 上傳
主設(shè)備配置SPI接口時鐘的時要弄清楚從設(shè)備的時鐘要求,因為主設(shè)備的時鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時鐘極性的配置上一定要搞清楚從設(shè)備是在時鐘的上升沿還是下降沿接收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸出數(shù)據(jù)。
現(xiàn)在,我的示波器升級成了OSCA02L,是示波器加邏輯分析儀一體的了,所以這次完全有機會做到測4線SPI和解碼,
實踐6圖4.jpg (153.86 KB, 下載次數(shù): 195)
下載附件
2020-6-9 10:58 上傳
實踐6圖5.jpg (159.45 KB, 下載次數(shù): 166)
下載附件
2020-6-9 10:58 上傳
有了上面的基礎(chǔ),我把這次使用USB虛擬示波器+邏輯分析儀做SPI測試和解碼的過程,拍了視頻,比圖文更直觀,如下所示:
https://www.bilibili.com/video/BV1na4y1e72c
|
|