SPI的四種工作模式
時間:2023-10-24 來源:華清遠見
SPI是一種高速的、全雙工的、同步的通信總線,并且至多僅需使用4根線,節約了芯片的管腳,SPI主要應用于EEPROM、FLASH、ADC、DAC等芯片,還有數字信號處理器和數字信號解碼器之間。SPI設備之間采用全雙工模式通信,是一個主機和一個或者多個從機的主從模式。主機負責初始化幀,這個數據傳輸幀可以用于讀與寫兩種操作,片選線可以從多個從機選擇一個來響應主機的請求。 SPI接口定義如下表:

由上表也可以看出當SPI設備間通信時,數據線應該是MOSI連接MOSI,MISO連接MISO,SCLK與SCLK相連,而不是像串口那樣TX、RX進行反接。當只有單一SPI從機設備時,如果從機設備允許的話,可直接將CS/SS線固定在低電平。然而類似于MAX1242這款需要CS/SS線的下降沿來觸發的芯片,則必須將CC/SS線與主機相連。如下圖,為一主一從連接方式。

大多數從機設備都有著三態邏輯的特性,因此當設備未被選中時,它們的MISO信號線會變成高阻抗狀態(電氣斷開)。沒有三態輸出的設備則需外接三態緩沖器才能與其他的從機設備共享SPI總線。
SPI通信的4種工作模式
SPI通信中有4種不同的操作模式,不同的從機設備可能在出廠時就被設置好了某種模式,并且無法更改。但是SPI通信必須處于同一種模式下才能進行。因此我們應該對自己手里的SPI主機設備進行模式的配置,也就是通過CPOL(時鐘極性)和CPHA(時鐘相位)來控制SPI主設備的通信模式,具體如下: 時鐘極性(CPOL)定義了SCLK時鐘線空閑狀態時的電平: 1. CPOL=0,即SCLK=0,表示SCLK時鐘信號線在空閑狀態時的電平為低電平,因此有效狀態為高電平。 2. CPOL=1,即SCLK=1,表示SCLK時鐘信號線在空閑狀態時的電平為高電平,因此有效狀態為低電平。 時鐘相位(CPHA)定義了數據位相對于時鐘線的時序(即相位): 1. CPHA=0,即表示輸出(out)端在上一個時鐘周期的后沿改變數據,而輸入(in)端在時鐘周期的前沿(或不久之后)捕獲數據。輸出端保持數據有效直到當前時鐘周期的尾部邊緣。對于第一個時鐘周期來說,第一位的數據必須在時鐘前沿之前出現在MOSI線上。也就是一個CPHA=0的周期包括半個時鐘空閑和半個時鐘置位的周期。 2. CPHA=1,即表示輸出(out)端在當前時鐘周期的前沿改變數據,而輸入(in)端在時鐘周期的后沿(或不久之后)捕獲數據。輸出端保持數據有效直到下一個時鐘周期的前沿。對于最后一個時鐘周期來說,從機設備在片選信號消失之前保持MISO信號線有效。也就是一個CHPA=1的周期包括半個時鐘置位和半個時鐘空閑的周期。此處的前沿和后沿的意思表示在每個周期中第一個出現的邊沿和最后一個出現的邊沿。總的來說則為:當時鐘為正向時鐘時,時鐘線的上升沿為前沿,時鐘的下降沿為后沿,反之。 如下表,為SPI通信的4種模式:

下圖顯示了時鐘極性和相位的時序圖。紅線表示時鐘的前沿,藍線表示時鐘的后沿。


