1、SPI協議簡介
1.1 SPI協議概括
SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,比如MSP430單片機系列處理器。
1.2 SPI優點
1):支持全雙工通信
2):通信簡單
3):數據傳輸速率快
1.3 缺點
沒有指定的流控制,沒有應答機制確認是否接收到數據,所以跟IIC總線協議比較在數據
可靠性上有一定的缺陷。
2、 特點
2.1 采用主-從模式(Master-Slave) 的控制方式
SPI 規定了兩個 SPI 設備之間通信必須由主設備 (Master) 來控制次設備 (Slave)。 一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備,SPI 協議還規定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock,沒有 Clock 則 Slave 設備不能正常工作。
2.2 采用同步方式(Synchronous)傳輸數據
Master 設備會根據將要交換的數據來產生相應的時鐘脈沖(Clock Pulse),時鐘脈沖組成了時鐘信號(Clock Signal) ,時鐘信號通過時鐘極性 (CPOL) 和 時鐘相位 (CPHA) 控制著兩個 SPI 設備間何時數據交換以及何時對接收到的數據進行采樣,來保證數據在兩個設備之間是同步傳輸的。
2.3 數據交換(Data Exchanges)
SPI 設備間的數據傳輸之所以又被稱為數據交換,是因為 SPI 協議規定一個 SPI 設備不能在數據通信過程中僅僅只充當一個 "發送者(Transmitter)" 或者 "接收者(Receiver)"。在每個 Clock 周期內,SPI 設備都會發送并接收一個 bit 大小的數據(不管主設備好還是從設備),相當于該設備有一個 bit 大小的數據被交換了。一個 Slave 設備要想能夠接收到 Master 發過來的控制信號,必須在此之前能夠被 Master 設備進行訪問 (Access)。所以,Master 設備必須首先通過 SS/CS pin 對 Slave 設備進行片選, 把想要訪問的 Slave 設備選上。 在數據傳輸的過程中,每次接收到的數據必須在下一次數據傳輸之前被采樣。如果之前接收到的數據沒有被讀取,那么這些已經接收完成的數據將有可能會被丟棄,導致 SPI 物理模塊最終失效。因此,在程序中一般都會在 SPI 傳輸完數據后,去讀取 SPI 設備里的數據, 即使這些數據(Dummy Data)在我們的程序里是無用的(雖然發送后緊接著的讀取是無意義的,但仍然需要從寄存器中讀出來)。
2.5 SPI只有主模式和從模式之分
SPI沒有讀和寫的說法,因為實質上每次SPI是主從設備在交換數據。也就是說,你發一個數據必然會收到一個數據;你要收一個數據必須也要先發一個數據。
3、 工作機制
3.1 概述
上圖只是對 SPI 設備間通信的一個簡單的描述, 下面就來解釋一下圖中所示的幾個組件:
- SSPBUF:泛指 SPI 設備里面的內部緩沖區,一般在物理上是以 FIFO 的形式,保存傳輸過程中的臨時數據;
- SSPSR:泛指 SPI 設備里面的移位寄存器,它的作用是根據設置好的數據位寬(bit-width) 把數據移入或者移出 SSPBUF;
- Controller:泛指 SPI 設備里面的控制寄存器,可以通過配置它們來設置 SPI 總線的傳輸模式。
通常情況下,我們只需要對上圖所描述的四個管腳(pin) 進行編程即可控制整個 SPI 設備之間的數據通信:
- SCK:主要的作用是 Master(主)設備往 Slave(從)設備傳輸時鐘信號, 控制數據交換的時機以及速率;
- SS/CS:用于 Master(主)設備片選 Slave (從)設備,使被選中的 Slave(從)設備能夠被 Master(主)設備所訪問;
- SDO/MOSI:在 Master(主)上面也被稱為 Tx-Channel,作為數據的出口,主要用于 SPI 設備發送數據;
- SDI/MISO:在 Master(主)上面也被稱為 Rx-Channel,作為數據的入口,主要用于SPI 設備接收數據;
SPI 設備在進行通信的過程中,Master 設備和 Slave 設備之間會產生一個數據鏈路回環(Data Loop),就像上圖所畫的那樣, 通過 SDO 和 SDI 管腳, SSPSR 控制數據移入移出 SSPBUF,Controller 確定 SPI 總線的通信模式,SCK 傳輸時鐘信號。
SDI(數據輸入)、SDO(數據輸出)、SCK(時鐘)、CS(片選)
(1)、SDO/MOSI – 主設備數據輸出,從設備數據輸入;
(2)、SDI/MISO – 主設備數據輸入,從設備數據輸出;
(3)、SCK – 時鐘信號,由主設備產生;
(4)、CS/SS – 從設備使能信號,由主設備控制。當有多個從設備的時候,因為每個從設備上都有一個片選引腳接入到主設備機中,當我們的主設備和某個從設備通信時將需要將從設備對應的片選引腳電平拉低或者是拉高。
3.2 SPI相關的縮寫或說法
SPI的極性Polarity和相位Phase,最常見的寫法是CPOL和CPHA,不過也有一些其他寫法,簡單總結如下:
- CKPOL (Clock Polarity) = CPOL = POL = Polarity = (時鐘)極性
- CKPHA (Clock Phase) = CPHA = PHA = Phase = (時鐘)相位
- SCK=SCLK=SPI的時鐘
- Edge=邊沿,即時鐘電平變化的時刻,即上升沿(rising edge)或者下降沿(falling edge)對于一個時鐘周期內,有兩個edge,分別稱為:
- Leading edge=前一個邊沿=第一個邊沿,對于開始電壓是1,那么就是1變成0的時候,對于開始電壓是0,那么就是0變成1的時候;
- Trailing edge=后一個邊沿=第二個邊沿,對于開始電壓是1,那么就是0變成1的時候(即在第一次1變成0之后,才可能有后面的0變成1),對于開始電壓是0,那么就是1變成0的時候;
3.3 SPI總線的極性和相位
CPOL配置SPI總線的極性,CPHA配置SPI總線的相位。
3.3.1 SPI總線的極性
極性,會直接影響SPI總線空閑時的時鐘信號是高電平還是低電平。
CPOL = 1:表示空閑時是高電平;
CPOL = 0:表示空閑時是低電平。
由于數據傳輸往往是從跳變沿開始的,也就表示開始傳輸數據的時候,是下降沿還是上升沿。如下圖:
3.3.2 SPI總線的相位
一個時鐘周期會有2個跳變沿。而相位,直接決定SPI總線從那個跳變沿開始采樣數據。
CPHA = 0:表示從第一個跳變沿開始采樣;
CPHA = 1:表示從第二個跳變沿開始采樣。
至于跳變沿究竟是上升沿還是下降沿,這取決于 CPOL。記住, CPHA 只決定是哪個跳變沿采樣。
3.4 SPI總線傳輸的四種模式
CPOL 和 CPHA 的不同組合,形成了SPI總線的不同模式。
時鐘極性CPOL是用來配置SCLK的電平出于哪種狀態時是空閑態或者有效態,時鐘相位CPHA
是用來配置數據采樣是在第幾個邊沿:
CPOL=0,表示當SCLK=0時處于空閑態,所以有效狀態就是SCLK處于高電平時。
CPOL=1,表示當SCLK=1時處于空閑態,所以有效狀態就是SCLK處于低電平時。
CPHA=0,表示數據采樣是在第1個邊沿,數據發送在第2個邊沿。
CPHA=1,表示數據采樣是在第2個邊沿,數據發送在第1個邊沿。
例如:
CPOL=0,CPHA=0:此時空閑態時,SCLK處于低電平,數據采樣是在第1個邊沿,也就是
SCLK由低電平到高電平的跳變,所以數據采樣是在上升沿,數據發送是在下降沿。
CPOL=0,CPHA=1:此時空閑態時,SCLK處于低電平,數據發送是在第1個邊沿,也就是
SCLK由低電平到高電平的跳變,所以數據采樣是在下降沿,數據發送是在上升沿。
CPOL=1,CPHA=0:此時空閑態時,SCLK處于高電平,數據采集是在第1個邊沿,也就是
SCLK由高電平到低電平的跳變,所以數據采集是在下降沿,數據發送是在上升沿。
CPOL=1,CPHA=1:此時空閑態時,SCLK處于高電平,數據發送是在第1個邊沿,也就是
SCLK由高電平到低電平的跳變,所以數據采集是在上升沿,數據發送是在下降沿。
需要注意的是:我們的主設備能夠控制時鐘,因為SPI通信并不像UART或者IIC通信那樣有專門的通信周期,有專門的通信起始信號,有專門的通信結束信號;所以SPI協議能夠通過控制時鐘信號線,當沒有數據交流的時候我們的時鐘線要么是保持高電平要么是保持低電平。
-
SPI
+關注
關注
17文章
1700瀏覽量
91320 -
SPI協議
+關注
關注
0文章
18瀏覽量
8356
發布評論請先 登錄
相關推薦
評論