串行外設接口 (SPI) 總線是一種運行于全雙工模式下的同步串行數據鏈路。用于在單個主節點和一個或多個從節點之間交換數據。SPI 總線實施簡單,僅使用四條數據信號線和控制信號線(請參見圖 1)。
圖 1 基本的 SPI 總線
盡管表 1 中的引腳名稱取自 MOTOROLA 公司的 SPI 標準,但特殊集成電路的 SPI 端口名稱通常與圖 1 中所標示的名稱有所不同。
表 1 SPI 引腳名稱分配
SPI 數據速率通常介于 1 到 70 MHz 之間,字節長度范圍從 8 位和 12 位到這些數值的倍數位。
數據傳輸通常會包含一次數據交換。當主節點向從節點發送數據時,從節點也會向主節點發送數據。為此,主節點的內部移位寄存器和從節點被設置成環形(請參見圖 2)。
圖 2 兩個移位寄存器形成一個內部芯片環形緩沖器
在數據交換之前,主節點和從節點使其內部移位寄存器加載存儲器數據。產生時鐘信號時,主節點會通過 MOSI 線同步輸出其移位寄存器。同時,從節點在 SIMO 處從主節點讀取第一位,并將其存儲到存儲器中,然后通過 SOMI 輸出 MSB。主節點會在 MISO 處讀取從節點的第一位,并將其存儲到存儲器中以待稍后處理。整個過程將一直持續,直至交換完所有數據位,然后主節點使時鐘空閑并通過 /SS 禁用從節點。
除設置時鐘頻率之外,主節點還會配置相對于數據的時鐘極性和時鐘相位。這兩個選項分別稱作 CPOL 和 CPHA,能夠允許時鐘信號實現 180 度相移且數據延遲半個時鐘周期。圖 3 顯示了相應的時序圖。
圖 3 時鐘極性和相位的時序圖
CPOL = 0 時,時鐘在邏輯 0 處空閑:
*如果 CPHA = 0,數據會在 SCK 的上升沿上讀取,在下降沿上變化。
*如果 CPHA = 1,數據會在 SCK 的下降沿上讀取,在上升沿上變化。
CPOL = 1時,時鐘在邏輯高電平處空閑:
*如果 CPHA = 0,數據會在 SCK的下降沿上讀取,在上升沿上變化。
*如果 CPHA = 1,數據會在 SCK 的上升沿上讀取,在下降沿上變化。
在 SPI 中,主節點可以與單個或多個從節點進行通信。在使用單個從節點的情況下,從選擇信號可以關聯到從設備的本地接地電位以允許永久接入。對于使用多個從節點的應用,可能有兩種結構:獨立和菊花鏈式從節點(請參見圖 4)。
圖 4 主節點與獨立從節點(左)以及菊花鏈式從節點(右)進行通信
從節點獨立尋址時,主節點必須提供多個從選擇信號。該結構一般用在數據采集系統中,其中的多個模數轉換器 (ADC) 和數模轉換器 (DAC) 都必須單獨接入。
菊花鏈式從節點需要主節點提供唯一的從選擇信號,因此該結構要求同時啟用所有從節點,以確保菊花鏈內通過所有移位寄存器的數據流不會中斷。典型的應用為工業級 I/O 模塊中的級聯多通道輸入串行器和輸出驅動器。