參考資料:SPI協議及其工作原理淺析
SPI(Serial Perripheral Interface,串行外圍設備接口)是摩托羅拉(Motorola)公司推出的一種同步串行接口技術,是一種高速的、全雙工、同步的通信總線。常作為MCU外設芯片串行擴展接口,主要應用於EEPROM、FLASH、實時時鍾、AD轉換器、數字信號處理器和數字信號解碼器之間。
一、SPI通信原理
1、采用主從模式的控制方式
SPI規定了兩個SPI設備之間通信必須由主設備(Master)來控制次設備(Slave),Master設備可以通過對Slave設備進行片選來控制多個Slave設備,SPI協議還規定Slave設備本身不能產生或控制時鍾信號,必須由Master設備通過SCLK管腳提供給Slave設備,沒有Clock,則Slave設備不能正常工作。
2、采用同步方式傳輸數據
Master設備需要根據從機的工作模式等來配置控制寄存器並產生相應的時鍾信號,從而保證數據在兩個設備之間是同步傳輸的。
3、數據傳輸
SPI設備數據傳輸的工作原理如圖1所示,Master中的8位數據寄存器和Slave中的8位數據寄存器通過信號線(MOSI、MISO)連接而組成一個分布式的16位數據寄存器;當執行數據傳輸操作時,該16位寄存器按照Master提供的時鍾信號(SCLK)串行移動8位,所以Master和Slave中寄存器的數據就實現了數據交換;之后再被自動裝入接收緩沖器中,並將接收緩沖器滿標志位(BF)和中斷標志位(SSPIF)置為高電平;而Master或Slave檢測到標志位發生變化后,就會去讀取接收緩沖器中的數據,這樣就完成了一次通信過程。
圖1 SPI內部結構簡易示意圖
二、SPI總線結構
由SPI工作原理可知,SPI總線需要包含兩條信號線(MOSI、MISO)和一條時鍾線(SCLK),但是由於SPI是一個多從機系統,所以需要增加1條從設備選擇信號線(SS)來選擇需要通信的Slave設備(每個Slave設備都需要單獨的從設備選擇信號來控制)。這四條信號線的詳細作用介紹如下:
SS(Slave Select):從設備選擇信號線,常稱為片選(Chip Select)信號線。當有多個SPI從設備與主機相連時,設備的其它信號線SCLK、MOSI及MISO同時並聯到相同的SPI總線上,即無論有多少個從設備,都共同只使用這3條總線;而每個從設備都有獨立的這一條CS信號線,本信號線獨占主機的一個引腳,即有多少個從設備,就有多少條片選信號線。當主機要選擇從設備時,把該從設備的CS信號線設置為低電平,該從設備即被選中,即片選有效,接着主機開始與被選中的從設備進行SPI通訊;所以SPI通訊以CS線置低電平為開始信號,以CS線被拉高作為結束信號。
MOSI(Master Output Slave Input):主設備輸出/從設備輸入引腳。主機的數據從這條信號線輸出,從機由這條信號線讀入主機發送的數據,即這條線上數據的方向為主機到從機。
MISO(Master Input Slave Output):主設備輸入/從設備輸出引腳。主機從這條信號線讀入數據,從機的數據由這條信號線輸出到主機,即在這條線上數據的方向為從機到主機。
SCLK(Serial Clock):時鍾信號線,用於通訊數據同步。它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鍾頻率不一樣,如STM32的SPI時鍾頻率最大為Fpclk/2,兩個設備之間通訊時,通訊速率受限於低速設備。
擴展:SPI通信有4種不同的模式,不同的從設備可能在出廠就是配置為某種模式,這是無法改變的;但我們的通信雙方必須工作在同一模式下,所以我們可以通過對CPOL(時鍾極性)和CPHA(時鍾相位)的配置來設置我們的主設備的工作模式;CPOL是用來配置SCLK的電平的空閑態或者有效態時的電平,CPHA是用來配置數據采樣是發生在上升沿還是下降沿。具體如下:
Mode0:CPOL=0,CPHA=0;空閑態時SCLK=0,數據在上升沿采樣,在下降沿移位;
Mode1:CPOL=0,CPHA=1;空閑態時SCLK=0,數據在下降沿采樣,在上升沿移位;
Mode2:CPOL=1,CPHA=0;空閑態時SCLK=1,數據在上升沿采樣,在下降沿移位;
Mode3:CPOL=1,CPHA=1;空閑態時SCLK=1,數據在下降沿采樣,在上升沿移位;
需要注意的是:因為我們的SPI通信並不像UART或者IIC通信那樣有專門的通信周期、專門的通信起始信號、專門的通信結束信號;所以我們的SPI協議能夠通過控制時鍾信號線,當沒有數據交流的時候我們的時鍾線要么保持高電平要么保持低電平。
擴展
1、SPI設備內部詳細結構如圖2所示,主要組件包括狀態寄存器、控制寄存器和數據寄存器,數據位移邏輯單元,波特率發生器,主從控制邏輯單元和端口控制邏輯單元。
圖2 SPI內部結構圖
2、由於在SPI Flash的通信中,全雙工並不常用,因此擴展了標准SPI中MOSI、MISO的用法,使其工作在半雙工,用於加倍數據傳輸,這就形成了Dual SPI;在Dual SPI的基礎上再增加兩條信號線(SIO2、SIO3),可以在一個時鍾內傳輸4bit數據,使傳輸速率再次加倍,就形成了Qual SPI;