SPI通信協(xié)議 一 SPI協(xié)議概述 SPI,是一種高速的,全雙工,同步的通信 總線(xiàn),并且在芯片的管腳上只占用四根線(xiàn),節約了芯片的管腳。SPI以主從方式工作模式被廣泛應用于 電路系統中,本文作者結合自己的項目情況對SPI協(xié)議進(jìn)行解析,并通過(guò)LOTO虛擬 示波器采集到的數據波形并進(jìn)行對比分析,方便大家的理解。 SPI通信協(xié)議一般只需要四根線(xiàn)將主控芯片與從芯片連接起來(lái),其中四根線(xiàn)分別為: (1)SDO – 主設備數據輸出,從設備數據輸入 (2)SDI – 主設備數據輸入,從設備數據輸出 (3)SCLK – 時(shí)鐘信號,由主設備產(chǎn)生 (4)CS – 從設備使能信號,由主設備控制 其中CS是控制芯片是否被選中的,也就是說(shuō)只有片選信號為預先規定的使能信號時(shí)(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線(xiàn)上連接多個(gè)SPI設備成為可能。 實(shí)際應用中只需要三根線(xiàn)來(lái)進(jìn)行通信。在SPI是串行通訊協(xié)議下,數據是一位一位的傳輸的。這就是SCLK時(shí)鐘線(xiàn)存在的原因,由SCLK提供時(shí)鐘脈沖,SDO則基于此脈沖完成數據傳輸。數據輸出通過(guò) SDO線(xiàn)在時(shí)鐘上升沿或下降沿時(shí)改變,完成一位數據傳輸。輸入也使用同樣原理。在至少8次時(shí)鐘信號的改變(上沿和下沿為一次),就可以完成8位數據(一個(gè)字節數據)的傳輸。下面是項目中所涉及的SPI通信協(xié)議的時(shí)序圖為16位數據。采用LOTO的OSC802采集到的對應波形如下圖所示。 要注意的是,SCLK信號線(xiàn)只由主設備控制,從設備不能控制信號線(xiàn)。同樣,在一個(gè)基于SPI的設備中,至少有一個(gè)主控設備。這樣傳輸的特點(diǎn):與普通的串行通訊不同,普通的串行通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停。當沒(méi)有時(shí)鐘跳變時(shí),從設備不采集或傳送數據。主設備通過(guò)對SCLK時(shí)鐘線(xiàn)的控制可以完成對通訊的控制。因為SPI的數據輸入和輸出線(xiàn)獨立,所以允許同時(shí)完成數據的輸入和輸出。不同的SPI設備的實(shí)現方式有所不同,主要是數據改變和采集的時(shí)間不同,在時(shí)鐘信號上沿或下沿采集有不同定義。 SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,簡(jiǎn)單高效。硬件上比I2C系統要稍微復雜一些。由于SPI沒(méi)有指定的流控制,沒(méi)有應答機制確認是否接收到數據。 二 SPI協(xié)議舉例
在自己的項目中只用到數據輸出模式,因此SPI可串行3線(xiàn)方式進(jìn)行通信:一條時(shí)鐘線(xiàn)SCLK,一條輸出控制線(xiàn)CS,一條數據輸出線(xiàn)SDO; SPI 模塊為了和外設進(jìn)行數據交換,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對傳輸協(xié)議沒(méi)有重大的影響。如果 CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數據傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數據被采樣。SPI主模塊和與之通信的外設備時(shí)鐘相位和極性應該一致。 三 SPI協(xié)議心得 主設備配置SPI接口時(shí)鐘的時(shí)要弄清楚從設備的時(shí)鐘要求,因為主設備的時(shí)鐘極性和相位都是以從設備為基準的。因此在時(shí)鐘極性的配置上一定要搞清楚從設備是在時(shí)鐘的上升沿還是下降沿接收數據,是在時(shí)鐘的下降沿還是上升沿輸出數據。
|