Loto實踐干貨(6)用示波器+邏輯分析儀進行SPI解碼
SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳。SPI以主從方式工作模式被廣泛應用于電路系統(tǒng)中,我結合自己的項目情況對SPI協(xié)議進行解析,并通過LOTO虛擬示波器采集到的數(shù)據(jù)波形并進行對比分析,方便大家的理解。
SPI通信協(xié)議一般只需要四根線將主控芯片與從芯片連接起來,其中四根線分別為:
(1)SDO???? – 主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入
(2)SDI????? – 主設備數(shù)據(jù)輸入,從設備數(shù)據(jù)輸出
(3)SCLK?? – 時鐘信號,由主設備產生
(4)CS??????? – 從設備使能信號,由主設備控制
其中CS是控制芯片是否被選中的,也就是說只有片選信號為預先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設備成為可能。?

?實際應用中只需要三根線來進行通信。在SPI是串行通訊協(xié)議下,數(shù)據(jù)是一位一位的傳輸?shù)?。這就是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采集到的對應波形如下圖所示。

? ? ? ?地線過長導致這個信號的噪聲比較大,但其實失敗的根本原因是,我的示波器只有兩個輸入通道,所以只能看主要的?時鐘和一路數(shù)據(jù)的對應關系,遠遠做不到解碼,大家可以直觀的感受下實際的SPI信號的樣子,后面有彩蛋。
? ? ? ? 在一個基于SPI的設備中,至少有一個主控設備。這樣傳輸?shù)奶攸c:與普通的串行通訊不同,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,甚至允許暫停。當沒有時鐘跳變時,從設備不采集或傳送數(shù)據(jù)。主設備通過對SCLK時鐘線的控制可以完成對通訊的控制。因為SPI的數(shù)據(jù)輸入和輸出線獨立,所以允許同時完成數(shù)據(jù)的輸入和輸出。不同的SPI設備的實現(xiàn)方式有所不同,主要是數(shù)據(jù)改變和采集的時間不同,在時鐘信號上沿或下沿采集有不同定義。
SPI接口不需要進行尋址操作,且為全雙工通信,簡單高效。硬件上比I2C系統(tǒng)要稍微復雜一些。由于SPI沒有指定的流控制,沒有應答機制確認是否接收到數(shù)據(jù)。
????????????在自己的項目中只用到數(shù)據(jù)輸出模式,因此SPI可串行3線方式進行通信:一條時鐘線SCLK,一條輸出控制線CS,一條數(shù)據(jù)輸出線SDO;
SPI?模塊為了和外設進行數(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主模塊和與之通信的外設備時鐘相位和極性應該一致。
??

主設備配置SPI接口時鐘的時要弄清楚從設備的時鐘要求,因為主設備的時鐘極性和相位都是以從設備為基準的。因此在時鐘極性的配置上一定要搞清楚從設備是在時鐘的上升沿還是下降沿接收數(shù)據(jù),是在時鐘的下降沿還是上升沿輸出數(shù)據(jù)。
? ? 現(xiàn)在,我的示波器升級成了OSCA02L,是示波器加邏輯分析儀一體的了,所以這次完全有機會做到測4線SPI和解碼,


有了上面的基礎,我把這次使用USB虛擬示波器+邏輯分析儀做SPI測試和解碼的過程,拍了視頻,比圖文更直觀,如下所示:
https://www.bilibili.com/video/BV1na4y1e72c