
?SPI(Serial peripheral interface)即串行外圍設備接口,是由Motorola首先在其MC68HCxx系列單片機上定義的,基于高速全雙工總線的通訊協議 。(又是高速,而且全雙工,確實強大)被廣泛應用于ADC、LCD等設備與MCU之間 。
??跟前面學習I2C、USART一樣,學習一種協議,還是從兩個層面分析:物理層和協議層 。
1. SPI物理層
SPI通訊需要使用4條線:3條總線和1條片選
圖1
??SPI還是遵循主從模式,3條總線分別是SCK、MOSI和MISO,片選線為nSS(低電平有效),SPI協議適用于一主多從的工作場景:
圖2
(1) nSS(Slave Select):片選信號線,用于選中SPI從設備 。每個從設備獨立擁有這條nSS信號線,占據主機的一個引腳 。設備的其他總線是并聯到SPI主機的,即無論多少個從設備,都共同使用這3條總線 。當從設備上的nSS引腳被置拉低時表明該從設備被主機選中 。
(2) SCK(Serial Clock):時鐘信號線,通訊數據同步用 。時鐘信號由通訊主機產生,它決定了SPI的通訊速率 。
(3) MOSI(Master Ouput Slave Input):主機(數據)輸出/從設備(數據)輸入引腳,即這條信號線上傳輸從主機到從機的數據 。
(4) MISO(Master Input Slave Ouput):主機(數據)輸入/從設備(數據)輸出引腳,即這條信號線上傳輸從機從到主機的數據主從機通過兩條信號線來傳輸數據,那么自然是全雙工通訊的了 。之前的I2C通訊,數據只在一條SDA線上傳輸,主從機數據交互只能采用半雙工 。
2. SPI協議層
圖3
??如上為SPI通訊時序圖,nSS、SCK、MOSI信號均由主機產生,MISO信號由從機產生 。在nSS為低電平的前提下,MOSI和MISO信號才有效,在每個時鐘周期MOSI和MISO傳輸一位數據 。
跟I2C通訊類似,SPI通訊也需要通訊的起始/結束信號,有效數據和同步時鐘 。
2.1 通訊的起始/結束信號
??圖中的nSS信號由高電平變為低電平即為SPI通訊的起始信號,反過來,nSS信號由低電平變為高電平即為SPI通訊的結束信號 。這個可比I2C簡單得多吧 。當從機檢測到自身的nSS引腳被拉低時就知道自己被主機選中,準備和主機進行通訊 。
2.2 有效數據的采集
??SPI通訊的數據采集是個相對復雜的環節,先不說其他,以上圖為例:
圖中紅色框框即為有效數據被采集的時間點,”CPOL = 0″所在的脈沖信號表示的是用于進行數據同步的SCK,MOSI和MISO線上的數據在每個SCK時鐘周期傳輸一位數據,注意,數據的輸入/輸出是可以同時進行的 。
??由圖可見,在SCK為奇數(更正:這里應該是偶數)邊沿(在這里該邊沿為下降沿)時,數據得到有效采樣,也就是說,在這個時刻,MISO和MOSI的數據有效,高電平表示數據1,低電平表示數據0,在其它時刻數據并無效,可以理解為為下一次MISO和MOSI的數據傳輸做準備 。
??數據在傳輸中,高位在先還是低位在先,SPI協議并無明確規定,但是數據要在主從機中正確傳輸,自然雙方要先約定好,一般會采用高位在先(MSB)方式傳輸 。
??這里需要再提及的概念是時鐘極性(CPOL)和時鐘相位(CPHA) 。
??時鐘極性(CPOL)指通訊設備處于空閑狀態(SPI開始通訊前、nSS線無效)時,SCK的狀態 。
【spi四種工作模式時序圖 spi通信時序圖詳解】CPOL = 0:SCK在空閑時為低電平
CPOL = 1:SCK在空閑時為高電平
1 | CPOL = 0:SCK在空閑時為低電平2 | CPOL = 1:SCK在空閑時為高電平??時鐘相位(CPHA)指數據的采樣時刻位于SCK的偶數邊沿采樣還是奇數邊沿采樣 。CPHA = 0:在SCK的奇數邊沿采樣
推薦閱讀
- 分享千牛工作臺中關閉叮咚提示音的操作教程
- 坐高鐵有沒有充值卡,用鐵路工作證和乘車卡坐火車有沒有位置坐
- 淘寶美工的主要工作內容是什么 美工是做什么的
- win7看不到工作組其他電腦怎么解決?
- Win10看不到工作組計算機怎么解決?
- 小編教你PS誤刪了工作區進行恢復的操作教程
- 泰國紙簽費是多少錢,如果想在泰國直接用旅游簽轉工作簽要多少費用
- 社區書記如何做好社區工作 如何做好社區工作
- 齒輪油泵工作原理
- 麗水高鐵導航,在杭州最好找的工作是什么中型企業一般都在些什么地方
