SPI (Serial Peripheral Interface)

SPI 是 SPI Bus 簡稱,是一種用於晶片通信的同步串行通信介面規範,SPI 裝置之間使用全雙工模式通信,是一個 master 搭配一個或多個 slave 的模式。

SPI 使用四根訊號線,如下:
1, SCLK (Serial CLocK): 串列時脈,由 master 發出。
2, MOSI (Master Output Slave Input): 由 master 輸出訊號到 slave。
3, MISO (Master Input Slave Output): 由 slave 輸出訊號到 master。
4, CS/SS (Chip/Slave Select): 選擇 chip/slave,由主機發出。

下圖為 SPI 線路範例,由一個 master 裝置 及三個 slave 裝置組成:
SPI 簡介
可以看到對 SPI Master 來說,MOSI, SCLK, SS 為 output,MISO 為 input。

SPI 的線路圖範例為:
SPI 簡介

 

SPI 只是硬體的傳輸協定,完全沒有提及定址(選擇晶片/暫存器位址),指令,資料長度...等等,這一部份是完全由 slave 晶片制定,master 想要控制 slave 動作必需完全依據 slave 晶片 datasheet 上的規範。

SPI 的資料是 MSB 先傳,且 SPI 不提供交握機制,無法確認 slave 晶片是否有跟上。
另一方面, I2C 則有雙向的確認機制。

 

 

極性與相位

使用 SPI,最麻煩一件事是確認周邊晶片的工作模式。

SPI 可以分為 4 種工作模式:
1,依其時脈 (Clock) 的極性 (polarity),分成 2 種,CPOL = 0 或 1。
2,再依其時脈 (Clock) 的相位 (phase), 分成 2 種,CPHA = 0 或 1。

SPI slave 晶片一般只支援一種工作模式,所以通常 master 必需遷就 slave 把工作模式設成和 slave 一致,才能正常運作。

第一個不同是 SCLK 的極性 (polarity),所謂極性其實是指 SPI 不工作時,SCLK 是停留在高電位還是低電位:
在不工作時,CPOL=0 是指 SCLK 停留在低電位,CPOL=1 則是指 SCLK 停留在高電位。

再來要注意 Slave 晶片是在 SCLK 的下降緣栓鎖資料,還是在 SCLK 的上升緣栓鎖資料。
如果 Slave 晶片在 SCLK 的下降緣栓鎖資料,相對的 master 就必需要在上升緣送出資料。
反之,slave 晶片在 SCLK 的上升緣栓鎖資料,相對的 master 就必需要在下降緣送出資料。

CPHA=0 是 SPI 的第一個 bit 讀取的步驟會發生在 clock 訊號開始變化的第一個邊緣。
CPHA=1 是 SPI 的第一個 bit 讀取的步驟會發生在 clock 訊號開始變化的第二個邊緣。

整體來看,如下圖:

SPI 簡介
從 CS 被拉低後,SCLK 開始動作,依 CPOL 的值 0 或 1,來決定要拉 LOW 還是 HIGH。
接著看依 CPHA 的值 0 或 1,來決定資料讀取的步驟是要在 SCLK 訊號開始變化的第一個邊緣還是第二個邊緣。而這同時也間接地決定了資料寫入步驟的時間點。

 

Dual SPI:
雙線SPI 使傳輸速率相比單線SPI提高一倍,MISO 和 MOSI 資料腳位變成單向線路,以半雙工模式每個時脈週期傳輸兩位元。
MOSI 線變為 IO0,MISO 線變為 IO1。

 

Quad SPI:
四線SPI 與 雙線SPI 類似,但再次將傳輸量提高一倍,新增了兩條額外的資料線,每個時脈週期傳輸4位元。
資料線現在是 IO0、IO1、IO2 和 IO3。

 

 

 

Reference

Wiki: Serial Peripheral Interface

Serial Buses Comparison: JTAG, SPI, and I2C

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 silverwind1982 的頭像
    silverwind1982

    拾人牙慧

    silverwind1982 發表在 痞客邦 留言(0) 人氣()