套用
![SPI接口](/img/c/097/wZwpmL3MzM0IjN5MDN2EzM1UTM1QDN5MjM5ADMwAjMwUzLzQzL0EzLt92YucmbvRWdo5Cd0FmLwE2LvoDc0RHa.jpg)
SPI接口的全稱是"Serial Peripheral Interface",意為串列外圍接口,是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要套用在EEPROM、FLASH、實時時鐘、AD轉換器,還有數位訊號處理器和數位訊號解碼器之間。
SPI接口是在CPU和外圍低速器件之間進行同步串列數據傳輸,在主器件的移位脈衝下,數據按位傳輸,高位在前,低位在後,為全雙工通信,數據傳輸速度總體來說比I2C匯流排要快,速度可達到幾Mbps。
特點
信號線少,協定簡單,相對數據速率高。
接口信號
![多個從器件硬體連線示意圖](/img/b/c16/wZwpmLzIjMxcjN4MjM2EzM1UTM1QDN5MjM5ADMwAjMwUzLzIzLzMzLt92YucmbvRWdo5Cd0FmLyE2LvoDc0RHa.jpg)
(1)MOSI – 主器件數據輸出,從器件數據輸入
(2)MISO – 主器件數據輸入,從器件數據輸出
(3)SCLK –時鐘信號,由主器件產生,最大為fPCLK/2,從模式頻率最大為fCPU/2
(4)NSS – 從器件使能信號,由主器件控制,有的IC會標註為CS(Chip select)
在點對點的通信中,SPI接口不需要進行定址操作,且為全雙工通信,顯得簡單高效。在多個從器件的系統中,每個從器件需要獨立的使能信號,硬體上比I2C系統要稍微複雜一些。
SPI接口在內部硬體實際上是兩個簡單的移位暫存器,傳輸的數據為8位,在主器件產生的從器件使能信號和移位脈衝下,按位傳輸,高位在前,低位在後。如下圖所示,在SCLK的上升沿上數據改變,同時一位數據被存入移位暫存器。
原理圖
最後,SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。
![接口內部硬體連線圖](/img/d/235/wZwpmL0EjN3gzMzAjM2EzM1UTM1QDN5MjM5ADMwAjMwUzLwIzL1gzLt92YucmbvRWdo5Cd0FmLzE2LvoDc0RHa.jpg)
工作模式
![通訊時序圖](/img/d/50b/wZwpmLyIzM3ITO4MDN2EzM1UTM1QDN5MjM5ADMwAjMwUzLzQzL2YzLt92YucmbvRWdo5Cd0FmL0E2LvoDc0RHa.jpg)
SPI有四種工作模式,各個工作模式的不同在於SCLK不同, 具體工作由CPOL,CPHA決定
CPOL: (Clock Polarity),時鐘極性
當CPOL為0時,時鐘空閒時電平為低;
當CPOL為1時,時鐘空閒時電平為高;
CPHA:(Clock Phase),時鐘相位
當CPHA為0時,時鐘周期的上升沿採集數據,時鐘周期的下降沿輸出數據;
當CPHA為1時,時鐘周期的下降沿採集數據,時鐘周期的上升沿輸出數據;
CPOL和CPHA,分別都可以是0或時1,對應的四種組合就是:
四種工作模式現如下:
![四種工作模式](/img/d/40f/wZwpmL2MzN2YTO3QzM2EzM1UTM1QDN5MjM5ADMwAjMwUzL0MzLxczLt92YucmbvRWdo5Cd0FmL0E2LvoDc0RHa.jpg)