SPI 子系統之SPI spec
1.SPI hardware
SPI:Serial Perripheral Interface,串行外圍設備接口,由 Motorola 公司提出,是一種高速、全雙工、同步通信總線。SPI 以主從方式工作,通常是有一個主設備和一個或多個從設備,無應答機制。
本文我們講解標準的 4 線 SPI,四根線如下:
①CS/SS,Slave Select/Chip Select,片選信號線,用于選擇需要進行通信的從設備。
②SCK,Serial Clock,串行時鐘,和 I2C 的 SCL 一樣,為 SPI 通信提供時鐘。
③MOSI/SDO,Master Out Slave In/Serial Data Output,主輸出從輸入。
④MISO/SDI,Master In Slave Out/Serial Data Input,主輸入從輸出。
2.SPI 四種工作模式
SPI 有四種工作模式,通過時鐘極性(CPOL)和時鐘相位(CPHA)的搭配來得到四種工作模式:
①、CPOL=0,串行時鐘空閑狀態為低電平。
②、CPOL=1,串行時鐘空閑狀態為高電平。
③、CPHA=0,串行時鐘的第一個跳變沿(上升沿或下降沿)采集數據。
④、CPHA=1,串行時鐘的第二個跳變沿(上升沿或下降沿)采集數據。
示例波形圖如下:
SPI 是全雙工的,所以讀寫時序可以一起完成。
3.SPI 傳輸機制
從圖可以看出,主機和從機都有一個串行移位寄存器,主機通過向它的 SPI 串行寄存器寫入一個字節來發起一次傳輸。寄存器通過 MOSI 信號線將字節傳送給從機,從機也將自己的移位寄存器中的內容通過 MISO 信號線返回給主機。這樣,兩個移位寄存器中的內容就被交換。
外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的字節;反之,若主機要讀取從機的一個字節,就必須發送一個空字節來引發從機的傳輸。
雖然 SPI 四線制支持讀寫同時進行,但實際上我們很多時候并不需要又讀又寫,見以下兩種情況(參考 BMA223 數據手冊):
注意:如下三幅圖示均為 CPOL=1,CPHA=1
(1)主機向從機寫數據
主機發送先發送 8 bits,第一個 bit 為 0 代表這次主機是想寫數據到從機,AD6~AD0 表示要寫的寄存器地址。然后,主機就會一直寫下去。在這期間 SDO 一直沒用,一直是高阻態,算是一直讀到1。
(2)主機從從機讀數據
這種情況下,主機先發送 8 bits,第一位為 1 代表這次是讀,然后 AD6 ~ AD0 是想要讀的寄存器地址,然后 SDO 開始返回數據。
4.SPI timing diagram
Tcsb_setup:建立時間
Tcsb_hold:保持時間
tsckl:低電平時間
tsckh:高電平時間
SCK period :Tsckl + tsckh
一般情況下 Tsckl = tsckh
注意:真實的波形圖如上,高低電平并不是到達最高點才算,0.3Vdd 以下為低電平,0.7Vdd 以上為高電平,計算信號時間長度的時候需要注意這個微小的時間,硬件設計必須注意信號質量風險,軟件開發人員也要會看波形圖。
這里的參數,一般 spi 驅動不需要設置,但是半導體廠商提供的 spi 控制器驅動中,可以修改這些參數。我們寫 SPI 驅動時候,可以根據從設備的要求來修改這些參數。
5.DMA 與 FIFO
不同平臺對于 SPI FIFO 和 DMA 的 buffer size 設置不同:
傳輸 32bytes 以下使用 FIFO,傳輸 32bytes 以上使用 DMA。
DMA 可以自動發起多次傳輸,一次最大 256K 。
6.I2C 與 SPI 對比
功能 | I2C | SPI |
線數 | 2(SDA,SCL) | 4(MOSI,MISO,SCLK,CS) |
主機數量 | >=1 | ==1 |
類型 | 半雙工 | 全雙工 |
回應機制 | yes | no |
速度 | <=3.4Mbps | high |
應用 | 重要數據 | 大量數據 |
流控 | yes | no |
設備地址 | yes | no |
常規用途 | 命令 | 數據 |
I2C 和 SPI 的速率如下:
I2C模式 | 速度 |
標準 | 100KHz |
快速 | 400KHz |
快速+ | 1MHz |
高速 | 3.4MHz |
SPI 速率:幾十 MHz 甚至上百 MHz,速度取決于 CPU 的 SPI 控制器和時鐘 clock
STM32F103 的 SPI 最高支持 18MHz,imx6ull 的 SPI 最高支持 52MHz,其他芯片一般用不到更高的,因為速度越快波形質量越不好,越容易出問題。
具體采用多大速率還和外設有關,比如 EEPROM 的 W25Q128 的 SPI 最高支持 80MHz,ICM20608 傳感器的 SPI 最高支持8MHz。一般用在 flash 上的速度會較快。
7.擴展
SPI 協議其實是包括:Standard SPI、Dual SPI 和 Queued SPI 三種協議接口。
Dual SPI 還是四線制,只是傳輸線可以變為同方向,速度是 Standard SPI 的兩倍。
Queued SPI 是六線制,多了兩根數據線,傳輸速度是 Standard SPI 的四倍。