網頁

2014年5月4日 星期日

[SPI] Serial Peripheral Interface

 

簡介:

SPI 是 Motorola 所定義的, 一種 4 線同步傳輸協定. 它由一個主控端 (Master), 及多個被控端 (Slave)所構成. 下圖是一個主控端對一個被控端的示意圖.

350px-SPI_single_slave_svg

 

Pin Definition:

SPI 定義了 4 條線, 這 4 條線的名稱有時會有差異, 但是實際上是相同的.

名稱 別名 定義 備註
SCLK SCK SPI 動作的 clock Master 控制, Slave 只能接受, 不能改變
MOSI SDI, DI, SI Master Data Output, Slave Data Input Master 傳送資料給 Slave
MISO SDO, DO,SO Master Data Input, Slave Data Output Slave 傳送資料給 Master
SS nCS, CS, nSS Slave Select Master 選擇被控端時, 將對應的 device 的 select pin 拉 low, 並且使 device 進行 reset. 通常是 GPIO.

SPI 定義了 4 條線, 這 4 條線的名稱有時會有差異, 但是實際上是相同的.

理論上, 把 Slave 的輸出, 連接到另一個 Slave 的輸入, 那麼, 就可以同時和多數個 device 溝通. 不過, 實務上是很少看到這樣的應用.

 

Data Transaction Details:

在下圖中, Master 及 Slave 各有一個 8 bit 的 shift register. 當 Master 對 Slave 做 select 之後 (連接到該 slave 的 SS 拉 low), Master 開始送出 clock, 同時, Master 的資料 ( MSB, 最高位元), 也由 shift register 推到 D 型正反器, 以在 MOSI 上維持住它的值. 需要注意的是, Slave 的資料, 也是在同一時間送到 MISO. 這說明了 SPI 是一個全雙工同步的訊號系統.

在資料送出來的時間點, 和資料被讀取的時間點, 並沒有明確的定義. 因此, 在使用 SPI 介面時, 必需注意 device ( Slave) 所支援的 clock mode.

image

 

Clock modes:

 

Clock modes (SPI-modes) CPOL CPHA  
0 0 0 CPOL =0, 表示 clock 原本在 low. CPHA =0 表示資料在第1個 edge 被讀取.  也就是 rising edge 被讀取
1 0 1 CPOL =0, 表示 clock 原本在 low. CPHA =1 表示資料在第2個 edge 被讀取. 也就是 falling edge 被讀取
2 1 0 CPOL =1, 表示 clock 原本在 high. CPHA =0 表示資料在第1個 edge 被讀取. 也就是 falling edge 被讀取
3 1 1 CPOL =1, 表示 clock 原本在 high. CPHA =1 表示資料在第2個 edge 被讀取. 也就是 rising edge 被讀取

參考以下 Timing chart 可以更清楚瞭解

spi-modes