作者:糊涂振
出品:汽車電子與軟件
01SPI概念
SPI(Serial Peripheral interface, 串行外設接口)是微處理控制單元(MCU)和外圍IC(如傳感器、ADC、DAC、驅(qū)動芯片和外部存儲設備等)之間進行通信的同步串行端口,其通信速率一般可以從幾千bps到幾百Mbps甚至更高, 具體的SPI通信速率取決于主設備和從設備的規(guī)格和性能,以及他們之間的協(xié)商和支持能力。
Source:An Introduction to SPI Communications Protocol
SPI是一種全雙工,同步,主從式接口,涉及兩個主要角色:主設備(Master)和從設備(Slave)。SPI接口可以是3線式或4線式,這里重點介紹常用的4線SPI接口。4線SPI接口有四個信號:時鐘信號(SCLK),片選信號(SS/CS),主設備輸出從設備輸入信號(MOSI)和主設備輸入從設備輸出信號(MISO),如下所示:
Source: SPI Protocol - Serial Peripheral Interface - javatpoint
其中,
SCLK(Serial Clock):時鐘信號線,由主設備提供,用于同步數(shù)據(jù)傳輸。
MOSI(Master Out, Slave In):主設備輸出,從設備輸入,用于主設備向從設備發(fā)送數(shù)據(jù)。
MISO(Master In, Slave Out):主設備輸入,從設備輸出,用于從設備向主設備發(fā)送數(shù)據(jù)。
SS(Slave Select):從設備選擇信號線,由主設備控制,用于選擇要與主設備通信的從設備。
02SPI原理
利用四線SPI接口可以構(gòu)建不同SPI模式(拓撲方式),比如單主單從,單主多從和菊花鏈等模式,接下來就結(jié)合不同SPI模式來分別介紹SPI工作原理。
1)單主單從模式
單主單從模式,即主設備的SCLK、MOSI和MISO連接到從設備的相應引腳。從設備與主設備之間只有一組SCLK、MOSI和MISO線連接,如下所示:
Source: Basics of the SPI Communication Protocol (circuitbasics.com)
其基本原理是:
首先是時鐘同步,主設備產(chǎn)生SCLK,控制數(shù)據(jù)傳輸?shù)臅r序。時鐘信號由主設備提供,并在主設備和從設備之間同步傳輸。
Source: Basics of the SPI Communication Protocol
然后是片選信號,主設備將SS/CS引腳切換到低電壓狀態(tài),從而激活了從設備。
Source: Basics of the SPI Communication Protocol
最后是數(shù)據(jù)傳輸過程,主設備通過MOSI線向從設備發(fā)送數(shù)據(jù)。從設備接收到數(shù)據(jù)后,將其通過MISO線傳輸給主設備。主設備和從設備之間的數(shù)據(jù)傳輸是同時進行的。
Source: Introduction to SPI Interface | Analog Devices
2)單主多從模式
單主多從模式,即主設備的SCLK和MOSI連接到每個從設備的相應引腳,從設備的MISO連接到主設備的MISO引腳,每個從設備有獨立的SS引腳與主設備連接,主設備通過選擇SS來選擇要與之通信的從設備。
Source: Basics of the SPI Communication Protocol
其基本原理與單主單從模式的幾乎相同,唯一區(qū)別是當某個從設備的SS處于低電平時,該從設備與主設備進行通信,其他從設備的SS處于高電平狀態(tài)。
3)菊花鏈模式
菊花鏈模式,即主設備的MOSI和SCLK連接到第一個從設備的MOSI和SCLK。從第一個從設備的MISO連接到第二個從設備的MOSI,以此類推,直到最后一個從設備的MISO。
Source: Basics of the SPI Communication Protocol
其工作原理是:
首先,主設備提供SCLK,控制數(shù)據(jù)傳輸?shù)臅r序。時鐘信號由主設備產(chǎn)生,并在整個菊花鏈中進行傳遞,從設備根據(jù)時鐘信號的邊沿進行數(shù)據(jù)的傳輸和接收。
然后,主設備通過MOSI線將數(shù)據(jù)發(fā)送到第一個從設備,第一個從設備接收到數(shù)據(jù)后,將其通過MISO線傳輸給第二個從設備,這樣,數(shù)據(jù)從一個從設備級聯(lián)傳輸?shù)较乱粋€從設備,直到傳輸?shù)阶詈笠粋€從設備。
每個從設備都需要有一個獨立的SS,主設備通過控制相應的SS選擇要與之通信的從設備,只有被選中的從設備才會響應主設備的數(shù)據(jù)傳輸。
在菊花鏈模式下,當數(shù)據(jù)從一個從設備傳播到下一個從設備時,傳輸數(shù)據(jù)所需的時鐘周期數(shù)量與從設備在菊花鏈中的位置成正比。在一個8位系統(tǒng)中,第3個從設備上的數(shù)據(jù)需要24個時鐘脈沖,而在常規(guī)的SPI模式中只需要8個時鐘脈沖,下圖顯示了通過菊花鏈傳播的時鐘周期和數(shù)據(jù)。
Source: Introduction to SPI Interface | Analog Devices
03SPI核心思想
SPI的核心思想是,每個設備都有一個移位寄存器,它可以用來發(fā)送或接收一個字節(jié)的數(shù)據(jù)。這兩個移位寄存器以環(huán)形方式連接在一起,一個寄存器的輸出到另一個寄存器的輸入,反之亦然。主設備控制共同的時鐘信號,確保每個寄存器在另一個寄存器移出一個比特時,正好移入一個比特。
Source: What Could Go Wrong: SPI | Hackaday
04SPI數(shù)據(jù)傳輸
4.1采樣和移位
根據(jù)上面內(nèi)容可知SPI通信,主設備必須發(fā)送SCLK信號,并通過使能SS信號(低電平)選擇從設備。然后主設備和從設備可以分別通過MOSI和MISO線路同時發(fā)送數(shù)據(jù)。在SPI通信期間,數(shù)據(jù)的發(fā)送(串行移出到MOSI/SDO總線上,即移位)和接收(采樣或讀入總線(MISO/SDI)上的數(shù)據(jù),即采樣)同時進行。
?Sample(采樣)
采樣是指主設備或從設備在時鐘的上升沿或下降沿時讀取數(shù)據(jù)位的操作。采樣的目的是在合適的時機獲取正確的數(shù)據(jù)位,以確保數(shù)據(jù)的準確傳輸。
?Shift(移位)
移位是指數(shù)據(jù)位從發(fā)送器移動到接收器的過程,以實現(xiàn)數(shù)據(jù)的傳輸。移位是SPI通信中的關鍵步驟之一,確保數(shù)據(jù)的逐位傳輸和同步。
4.2時鐘極性和時鐘相位
具體何時進行采樣和移位操作,可以通過設置時鐘極性和時鐘相位來實現(xiàn)。
?時鐘極性(Clock Polarity,CPOL)
在空閑狀態(tài)期間,CPOL位設置時鐘信號的極性。
CPOL = 1:表示空閑時是高電平;
CPOL = 0:表示空閑時是低電平。
空閑狀態(tài)是指傳輸開始時CS為高電平且在向低電平轉(zhuǎn)變的期間,以及傳輸結(jié)束時CS為低電平且在向高電平轉(zhuǎn)變的期間,如下所示:
?時鐘相位(Clock Phase,CPHA)
CPHA位選擇時鐘相位。根據(jù)CPHA位的狀態(tài),使用時鐘上升沿或下降沿來采樣和/或移位數(shù)據(jù)。
CPHA = 0:表示從第一個跳變沿開始采樣;
CPHA = 1:表示從第二個跳變沿開始采樣。
主設備必須根據(jù)從設備的要求選擇時鐘極性和時鐘相位,根據(jù)上述CPOL和CPHA位的選擇,有四種SPI模式可用,如下所示:
?
SPI模式 | CPOL | CPHA | 空閑狀態(tài) | 采樣,移位 |
0 | 0 | 0 | 低電平 | 采樣上升沿,移位下降沿 |
1 | 0 | 1 | 低電平 | 采樣下降沿,移位上升沿 |
2 | 1 | 0 | 高電平 | 采樣下降沿,移位上升沿 |
3 | 1 | 1 | 高電平 | 采樣上升沿,移位下降沿 |
?
對應到數(shù)據(jù)位,以CPOL = 0,CPHA = 0為例,綠色虛線表示片選使能,橙色虛線表示采樣,藍色虛線表示移位,如下所示:
Source: Introduction to SPI Interface | Analog Devices
4.3傳輸位序
先發(fā)送高bit(MSB),還是先發(fā)送低bit(LSB)。如下圖所示,若采用MSB first,那么MOSI發(fā)送的數(shù)據(jù)為01000011, 即0x43。
Source: Basics of the SPI Communication Protocol
若采用LSB first,那么MISO接收到0x43后,發(fā)送形式如下所示:
Source: Basics of the SPI Communication Protocol
4.4 數(shù)據(jù)長度
注意上面的各圖演示的都是傳輸8位數(shù)據(jù),實際上SPI可以根據(jù)設備所支持的情況傳輸不同位數(shù)的數(shù)據(jù),比如Aurix TC2xx系列最高支持32位數(shù)據(jù)傳輸。
總的來說,SPI數(shù)據(jù)傳輸取決于具體配置,選取哪種模式,何時采樣,數(shù)據(jù)有多少位,是MSB還是LSB first,當然除此之外,實際實現(xiàn)這個功能還需要考慮更多因素。
05總結(jié)
到此本文就以比較淺顯易懂的方式介紹了SPI的基本內(nèi)容,即通過四根信號線(SCLK, SS, MISO, MOSI),結(jié)合移位寄存器,實現(xiàn)主從設備間的數(shù)據(jù)傳輸;關于數(shù)據(jù)傳輸如何配置,要要設置時鐘極性,時鐘相位等參數(shù)。對于有需要深入研究這個主題的朋友。
審核編輯:湯梓紅
評論
查看更多