本節繼續講嵌入式硬件通信接口協議中的另外一個串行通信接口-SPI。相比于UART串口協議,SPI又有著其獨特之處。
簡介
SPI(全稱SerialPeripheral Interface),串行外設接口。
SPI是串行外設接口(SerialPeripheral Interface)的縮寫。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,如今越來越多的芯片集成了這種通信協議,比如AT91RM9200。
--from 百度百科
該接口由摩托羅拉在20世紀80年代中期開發,并已成為事實標準。
--from Wiki
從維基百科查閱的的“事實標準”,在這來科普一下知識盲點:
事實標準是指非由標準化組織制定的,而是由處于技術領先地位的企業、企業集團制定(有的還需行業聯盟組織認可,如DVD標準需經DVD論壇認可),由市場實際接納的技術標準。
--from 百度百科
SPI接口定義了一主多從這樣的一個通信架構,在同一SPI總線上只有一個主機,可以有多個從機。這樣的架構就限制了通信的主動權只能在主機端,主機發起一次通信,從機做出想要。
信號線
SPI被稱為四線串行總線,其信號線分別有:
SCLK:串行時鐘(主機輸出)
MOSI:主輸出從機輸入或主機輸出從機輸入(主機輸出的數據)
MISO:主輸入從輸出或主輸入從輸出(從輸出的數據輸出)
SS:從機選擇(通常為低電平有效,主機輸出)
信號線命名也是五花八門,以下的命名也是會遇見的:
串口時鐘:
SCLK:SCK
主輸出--->從輸入(MOSI):
SIMO,MTSR - 對應主設備和從設備上的MOSI,相互連接
SDI,DI,DIN,SI - 在從設備上; 連接到主設備上的MOSI,或連接到下面的連接
SDO,DO,DOUT,SO - 在主設備上; 連接到從站上的MOSI,或連接到上面的連接
主輸入<---從輸出(MISO):
SOMI,MRST - 對應主設備和從設備上的MISO,相互連接
SDO,DO,DOUT,SO - 在從設備上; 連接到主設備上的MISO,或連接到下面的連接
SDI,DI,DIN,SI - 主設備; 連接到奴隸上的MISO或上面的連接
從機選擇:
SS:SSEL,CS,CE,nSS,/ SS,SS#
以上容易讓人混淆的名字是SDO、SDI、DOUT、DIN等,這些都需要看具體印在主設備還是從設備上單獨討論。但是一般的還是盡量寫清寫規范,這樣不容易產生歧義。
SPI作為同步串行接口,可以認為有兩個同步信號,第一個是從機選擇SS信號,告知被選中的從機,準備開始進行SPI通信,第二個是同步時鐘信號SCLK,收發雙方進行數據的交互時,都是基于SCLK的跳變進行逐bit輸出和采樣的。
四根信號線并非全部都需要,根據工作模式,可以配置成兩線、三線。
在STM32CubeMX工具的配置頁面,可以很清楚看到,配置不同的工作模式時,對應被使能的芯片管腳有何不同:



對比發現,全雙工的四線和三線的區別是從機選擇信號NSS。這種情況一般是因為SPI總線上只有一主一從的通信架構,從機的NSS信號一直接低電平,不需要做從機選擇。