飛凌干貨 | 一文了解SPI總線工作原理
SPI是什么
SPI(Serial Peripheral Interface),即串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在 EEPROM、FLASH、實(shí)時時鐘、AD轉(zhuǎn)換器,還有數(shù)字信號處理器和數(shù)字信號解碼器之間。
SPI,是一種高速、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便。正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。
SPI的特點(diǎn)
01、主-從模式(Master-Slave) 的控制方式
SPI 規(guī)定兩個 SPI 設(shè)備之間通信必須由主設(shè)備 (Master) 來控制從設(shè)備 (Slave)。一個 Master 設(shè)備可以通過提供 Clock 以及對 Slave 設(shè)備進(jìn)行片選 (Slave Select) 來控制多個 Slave 設(shè)備。
SPI 協(xié)議還規(guī)定 Slave 設(shè)備的 Clock 由 Master 設(shè)備通過 SCK 管腳提供給 Slave 設(shè)備, Slave 設(shè)備本身不能產(chǎn)生或控制 Clock, 沒有 Clock 則 Slave 設(shè)備不能正常工作。
02、同步方式(Synchronous)傳輸數(shù)據(jù)
Master 設(shè)備會根據(jù)將要交換的數(shù)據(jù)來產(chǎn)生相應(yīng)的時鐘脈沖(Clock Pulse),時鐘脈沖組成了時鐘信號(Clock Signal) ,時鐘信號通過時鐘極性 (CPOL) 和時鐘相位 (CPHA) 控制著兩個 SPI 設(shè)備間何時數(shù)據(jù)交換以及何時對接收到的數(shù)據(jù)進(jìn)行采樣,來保證數(shù)據(jù)在兩個設(shè)備之間是同步傳輸?shù)摹?/span>
03、數(shù)據(jù)交換(Data Exchanges)
SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換,是因?yàn)?SPI 協(xié)議規(guī)定一個 SPI 設(shè)備不能在數(shù)據(jù)通信過程中僅僅只充當(dāng)一個 "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)"。在每個 Clock 周期內(nèi),SPI 設(shè)備都會發(fā)送并接收一個 bit 大小的數(shù)據(jù),相當(dāng)于該設(shè)備有一個 bit 大小的數(shù)據(jù)被交換了。
1個 Slave 設(shè)備要想能夠接收到 Master 發(fā)過來的控制信號,必須在此之前能夠被 Master 設(shè)備進(jìn)行訪問 (Access),所以 Master 設(shè)備必須先通過 SS/CS pin 對 Slave 設(shè)備進(jìn)行片選,把想要訪問的 Slave 設(shè)備選上。
在數(shù)據(jù)傳輸?shù)倪^程中,每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。如果之前接收到的數(shù)據(jù)沒有被讀取,那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會被丟棄,導(dǎo)致 SPI 物理模塊最終失效。
因此,在程序中一般都會在 SPI 傳輸完數(shù)據(jù)后,去讀取 SPI 設(shè)備里的數(shù)據(jù),即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無用的。
04、四種傳輸模式
§ CPOL用來決定SCLK空閑時的電平:
CPOL=0,空閑時為低電平;
CPOL=1,空閑時為高電平。
§ CPHA用來決定采樣時刻:
CPHA=0,每個周期的第一個時鐘沿采樣;
CPHA=1,每個周期的第二個時鐘沿采樣。
05、只有主模式和從模式之分
沒有讀和寫的說法,因?yàn)閷?shí)質(zhì)上每次SPI是主從設(shè)備在交換數(shù)據(jù)。也就是說,你發(fā)一個數(shù)據(jù)必然會收到一個數(shù)據(jù);你要收一個數(shù)據(jù)必須也要先發(fā)一個數(shù)據(jù)。
06、SPI極性和相位的設(shè)置
SPI分主設(shè)備和從設(shè)備,兩者通過SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備SPI是何種模式,然后再將主設(shè)備SPI的模式設(shè)置成和從設(shè)備相同的模式,即可正常通訊。
兩種從設(shè)備SPI的模式:
(1)固定的,由SPI從設(shè)備硬件決定
SPI從設(shè)備,具體是什么模式,相關(guān)的datasheet中會有描述,需要自己去datasheet中找到相關(guān)的描述。
關(guān)于SPI從設(shè)備在空閑的時候,是高電平還是低電平,決定了CPOL是0還是1;然后再確定設(shè)備是在上升沿采樣數(shù)據(jù)還是下降沿采樣數(shù)據(jù),這樣就可以在定了CPOL值的前提下,對應(yīng)著推算出CPHA是0還是1了。
(2)可配置的,由軟件自己設(shè)定
從設(shè)備也是一個SPI控制器,4種模式都支持,此時只要自己設(shè)置為某種模式即可。知道了從設(shè)備的模式后,再去將SPI主設(shè)備的模式設(shè)置為和從設(shè)備模式一樣的即可。
對于如何配置SPI的CPOL和CPHA,這里不多細(xì)說,多數(shù)都是直接去寫對應(yīng)的SPI控制器中對應(yīng)寄存器中的CPOL和CPHA那兩位,寫0或?qū)?即可。
SPI示例
對于我們的FIT_CAN_II_2515模塊來說,其主芯片使用的是MCP2515。根據(jù)芯片手冊,該芯片可以工作在SPI的MODE 0和MODE 3模式:
但芯片硬件并沒有相應(yīng)的配置引腳:
在咨詢軟件工程師后,確定是軟件設(shè)置為MODE 0:
關(guān)于SPI總線工作原理先介紹到這里,希望能幫助到你,后續(xù)會分享更多有關(guān)SPI的干貨,敬請關(guān)注我們【飛凌嵌入式】公眾號。
END
相關(guān)產(chǎn)品 >
-
OKT507-C 開發(fā)板
CPU: T507 工業(yè)級處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級T507開發(fā)板系列,飛凌OKT507-C開發(fā)板采用全志T507 四核工業(yè)級處理器 T507設(shè)計開發(fā),Cortex-A53架構(gòu),工業(yè)級寬溫,性能強(qiáng),低功耗,是一款高性價比的工業(yè)級產(chǎn)品,提供豐富的開發(fā)設(shè)計資料,提供產(chǎn)品規(guī)格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。
了解詳情 -
OKMX8MP-C開發(fā)板
內(nèi)置NPU、ISP,AI計算能力高達(dá)2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發(fā)板 基于高性能低功耗工業(yè)級iMX8MP核心板設(shè)計,支持多種多種高速通信接口。iMX8MP開發(fā)板內(nèi)置NPU,AI計算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統(tǒng)的iMX8MP開發(fā)板。
了解詳情 -
OK3568-C開發(fā)板
強(qiáng)而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,
-
OKMX6ULL-C開發(fā)板
40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設(shè)計開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應(yīng)場景豐富。 了解詳情