SPI(串行外圍裝置接口)總線是一種基于時鐘同步的高速全雙工串行通信總線。通常包含四根信号線,分别為sdi(串行資料輸入),sdo(串行資料輸出),sclk(串行移位時鐘)、cs(從使能信号)構成。

圖1 SPI總線連接配接關系(點對點)
圖2 一主機對多從機
SPI總線采用主從模式(Master Slave)架構,支援多從機模式應用,但實際晶片隻支援單主機工作,其中cs信号決定了唯一與主裝置通信的從裝置。若沒有cs信号,則隻能存在一個從裝置。主從機發送與接收資料是同時完成的。
在SPI操作中,資料是同步進行發送和接收的。資料傳輸的時鐘基于來自自主處理器的時鐘脈沖。最常用的時鐘設定是基于時鐘極性(CPOL)和時鐘相位(CPHA)兩個參數。時鐘極性設定時鐘空閑時的電平(高電平還是低電平),時鐘相位設定讀取和發送資料時的時鐘沿(上升沿還是下降沿)。通過對時鐘極性以及時鐘相位的設定,SPI總線有四種工作模式。使用最廣泛的是SPI0和SPI3方式,若CPOL=0,串行同步時鐘的空閑狀态為低電平,若CPOL=1,則串行同步時鐘的空閑狀态為高電平。CPHA能夠選擇兩種不同的傳輸協定之一進行資料傳輸。若CPHA=0,在串行時鐘的第一個跳變沿資料被采集,若CPHA=1,在串行同步時鐘的第二個跳變沿資料被采集。四種模式時序分析如下:
- CPOL=0,CPHA=0
圖3 SPI0模式時序圖
由上圖可以看出,SPI0模式時,當資料未發送以及資料發送後,SCK都是低電平,在SCK第一個沿時,資料是穩定的,同時在第二個沿時,MOSI與MISO會發生變化,也就是在時鐘的第一個沿進行資料采樣,資料輸出在第二個沿上。
- CPOL=0,CPHA=1
圖4 SPI1模式時序圖
由上圖可以看出,SPI1模式時,當資料未發送以及資料發送後,SCK都是低電平,在SCK第一個沿時,MOSI與MISO會發生變化,在第二個沿時資料是穩定的,也就是在時鐘的第一個沿進行資料輸出,資料采樣在第二個沿上。
- CPOL=1,CPHA=0
圖5 SPI2模式時序圖
由上圖可以看出,SPI2模式時,當資料未發送以及資料發送後,SCK都是高電平,在SCK的第一個沿時,資料是穩定的,在SCK的第二個沿時,MOSI與MISO會發生變化,即在時鐘的第一個沿時進行資料采樣,在時鐘的第二個沿時進行資料輸出。
- CPOL=1,CPHA=1
圖6 SPI3模式時序圖
由上圖可以看出,SPI3模式時,當資料未發送以及資料發送後,SCK都是高電平,在SCK的第一個沿時,MOSI與MISO會發生變換,在SCK的第二個沿時,資料是穩定的。即在時鐘的第一個沿進行資料輸出,在時鐘的第二個沿進行資料采樣。
綜上所述,可以看出,當CPHA=0時,表示資料的采樣在時鐘周期的第一個沿上,而具體的時鐘沿由CPOL決定,則資料輸出在第二個沿。當CPHA=1時,表示資料的輸出在時鐘的第一個沿上,同樣具體的時鐘沿由CPOL決定,則第二個資料采樣在第二個沿。
從上面時序可以看出,SPI的主從裝置内部均為一個8位的移位寄存器。SPI的實作結構如下:
圖7 SPI實作結構
實際實作時,可以利用主機的sclk信号作為移位時鐘信号,按照高位在前,低位在後的順序,依次将總線上的資料送入内部移位寄存器,進而完成SPI的接收與發送。