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