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