成都自動化開發:SPI接口通信協議淺談

沙鷗-成都

成都自動化開發:SPI接口通信協議淺談

1 什麼是SPI

SPI是串口外設接口的縮寫,是一種高速的、全雙工、同步的通信協議,是微處理器與外圍IC之間常用的一種通訊方式。

SPI是主從式的通信協議,可以一主機一從機通信,也可以一主機多從機通信。

2 SPI的優缺點

SPI接口簡單,一般只需要4個引腳就可以通信,分別是SCLK、MOSI、MISO、CS,假如只需要單向通信,那麼最少只需要2個引腳就可以。

成都自動化開發:SPI接口通信協議淺談

SPI的一個缺點就是沒有指定的流控制,沒有應答機制確認是否接收到數據,只支持一個主機方式等。

3 SPI怎麼工作的

用一句話概括SPI怎麼工作的,SPI設備在SCLK時鐘的驅動下,在其上升沿或者下降沿時接收或者發送數據,實現數據傳輸的目的。

3.1 SPI的工作模式

在SPI中,有四種工作模式,可以根據時鐘極性CPOL和時鐘相位CPHA進行選擇。在空閒狀態期間,CPOL位設置時鐘信號的極性。空閒狀態是指傳輸開始時CS為高電平且在向低電平轉變的期間,以及傳輸結束時CS為低電平且在向高電平轉變的期間。CPHA位選擇時鐘相位,根據CPHA位的狀態,使用時鐘上升沿或下降沿來採樣和/或移位數據。主機必須根據從機的要求選擇時鐘極性和時鐘相位來確定工作模式。

成都自動化開發:SPI接口通信協議淺談


成都自動化開發:SPI接口通信協議淺談

如圖 1為一主機和一從機的連接方式。其中SCLK時鐘由主機發出,從機只能跟從主機的控制。MISO為主機的數據輸入引腳,SDO為從機的數據輸出引腳,在SCLK的控制下,數據一位一位地由從機的SDO引腳傳送到主機的MISO引腳。MOSI為主機的輸出引腳,SDI為從機的輸入引腳,在SCLK的控制下,數據一位一位地由主機傳送到從機。CS由主機控制,可以控制選中某一個從機與主機通訊,圖 1為一主機一從機方式,其實可以將從機的CS引腳直接接到低電平表示常選中,那麼就節省了CS(引腳開支。

成都自動化開發:SPI接口通信協議淺談

如圖 2為模式0時的工作時序。在此模式下,當主機拉低CS電平時(黑色虛線),與其連接的從機被選中,該從機此時與主機進行通信。

當SCLK上升沿來臨時(綠色虛線),主機讀取來自從機輸出的電平信號。

當SCLK下降沿時(藍色虛線),主機送出一位數據,從機此時應當採集主機傳輸過來的信息。

在此時應當注意各個引腳上電平的持續時間,應當符合從機的要求。

3.2 SPI的數據傳輸


成都自動化開發:SPI接口通信協議淺談

在SPI中,數據的接收和發送其實是同時進行的,只不過分別在一個脈衝的上升沿或(和)下降沿中進行。一般來說,在主機和從機中分別有一個移位寄存器,假如沒有硬件的寄存器也可以用程序來虛擬一個移位寄存器。如圖 3,當SCLK一個週期脈衝來臨的時候,主機從移位寄存器的最高位(也可以設置為最低位)開始依次送出一個位的數據到從機移位寄存器的末尾,同時,從機也向主機發送一位數據到主機的移位寄存器的末尾。圖中當SCLK發送8個脈衝之後,主機的移位寄存器和從機的移位寄存器中的數據就完全交換了一次,達到數據傳輸的目的。

在程序處理中,可以在通訊的過程中按照需求改變兩機移位寄存器中的數值,或者選擇是否讀取對方移位寄存器中的數據。

4 SPI多機通信和編程

4.1一主機與多從機數據交換


成都自動化開發:SPI接口通信協議淺談

(1) 主機與某一從機之間通信

當主機(master)與從機(slave)需要通信時,主機先將目標從機的CS引腳拉低,表示選中該從機,注意某一時刻只能與一個從機通信,也就是隻能有一個從機的CS被拉低選中,再按照圖 2類似的時序寫程序,控制SCLK、MISO、MOSI引腳,讀取從機數據或者向從機發送數據。

程序設計流程:


成都自動化開發:SPI接口通信協議淺談


圖 5為主機控制從機1在SPI 0模式下的一位數據(二進制0或者1)的收發程序流程。參照圖 2,首先拉低從機1的片選信號,主機令SCLK引腳為低電平並保持要求的時間,之後主機令SCLK引腳為高電平,SCLK上升沿來到,此時從機的數據已經輸入到主機的MISO引腳,主機將數據讀入到一個變量裡面。主機接著令MOSI引腳輸出指定的電平信號,保持一定時間,再將SCLK引腳拉低,令SCLK產生下降沿,主機輸出數據,這樣就完成一位數據的收發流程。如果主機要與其他從機通信,只需要將其片選信號拉低,並將其餘的片選信號拉高即可。

(2) 從機與從機之間的通信

從機與從機之間是不能進行直接通信的,但是可以這樣,從機可以將數據傳輸到主機,再由主機將數據發送給目標從機,反之類似。控制器、電路板、自動化、軟件開發定製,業務Q: 2531-263-726

4.2菊花鏈模式

成都自動化開發:SPI接口通信協議淺談

菊花鏈模式避免了過多的CS引腳開支,將上一個設備的輸出引腳(如SDO)與下一設備的輸入引腳(如SDI)串聯起來,數據在SCLK的控制下可以實現從上一個設備到下一個設備的流動循環傳輸。

謝謝關注,全文完。


分享到:


相關文章: