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