天天看點

SPI接口說明及原理

作者:自由翺翔9651

簡介

SPI:Serial Peripheral Interface,是串行外設接口。

SPI是由摩托羅拉于 1985 年前後開發,是一種适用于短距離、裝置到裝置通信的同步串行接口。

從那時起,這種接口就已成為許多半導體制造商,特别是微控制器(MCU)和微處理器(MPU)采用的事實标準。

2SPI接口

SPI總線是一種4線總線,通常有一個主裝置和一個或多個從裝置,需要至少4根線,事實上3根也可以。

MOSI:Master Output Slave Input,主裝置資料輸出,從裝置資料輸入;

MISO:Master Input Slave Output,主裝置資料輸入,從裝置資料輸出;

SCLK:Serial Clock,時鐘信号,由主裝置産生;

SS:Slave Select,從裝置選擇信号,由主裝置控制;

SPI接口說明及原理

上面的SS信号,也可以了解為CS信号,一般是低電平有效,是以也是NSS(非)信号;

CS:Chip Select,片選信号(從裝置使能/選擇信号),由主裝置控制;

一主一從

最基本的SPI通信就是一主一從,比如:一個STM32作為主機,一個W25Q16(SPI Flash)作為從機。還有兩個MCU之間進行SPI通信等。

SPI接口說明及原理

上圖例子是主機發送一個位元組資料(0x53),從機應答一個位元組資料(0x46)。

一主多從

SPI可以一主一從(一個主機,一個從機),但也可以一主多從。一主多從常見有兩種連接配接方式。

A.正常

通常,每個從機都需要一條單獨的SS線,要與指定的從機通信,将該從機的SS線設為低電平,并将其餘的保持為高電平即可。

SPI接口說明及原理

B.一條SS信号

某些應用隻需要一條NSS即可(比如:移位寄存器),對于這種布局,資料從一個從裝置移位到另一個從裝置。

SPI接口說明及原理

3SPI資料傳輸

SPI的通信比較簡單,一個時鐘傳輸一位資料(主機 -> 從機,或者從機 -> 主機)。

SPI時鐘

理論上SPI的時鐘頻率可以做到很大,一般幾MHz~幾百MHz,拿常見的W25Q16來說,SPI最高支援80MHz。

SPI通信速率要結合實際情況,不能超過主機或從機支援的最大時鐘頻率。

SPI資料

SPI的資料分兩個方向:

MOSI:主機 -> 從機

MISO:從機 -> 主機

SPI通信有一個“缺點”:沒有指定的流控制,沒有應答機制确認是否接收到資料。

可以了解為:不知道是什麼時候主機發給從機,什麼時候從機發給主機,到底該發多少位元組資料等。

此時,需要通信的主機和從機達成約定,一般由主機進行控制讀寫的操作。

比如下面這個讀寫SPI Flash資料的操作:

SPI接口說明及原理

前面1位元組是指令,緊接着再3位元組(24位)位址,都是由主機發送給從機。之後,主機讀取資料(由從機發送出來)。

時鐘極性和相位

除了設定時鐘頻率外,主機還必須配置與資料有關的時鐘極性和相位。

SPI接口說明及原理

CPOL确定時鐘的極性,極性可以通過簡單的逆變器進行轉換。

CPHA确定相對于時鐘脈沖的資料位的時序(即相位)。

一般內建有SPI外設的處理器,都有SPI相關的配置寄存器,拿STM32來說,參考手冊裡面有詳細介紹SPI配置的資訊。

建議大家結合時序圖了解,不要死記硬背。