飛凌干貨 | 一文了解SPI總線工作原理

原創(chuàng) 2020-03-04 16:18:00 SPI SPI原理 CAN模塊

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è)計(jì)開發(fā),Cortex-A53架構(gòu),工業(yè)級寬溫,性能強(qiáng),低功耗,是一款高性價比的工業(yè)級產(chǎn)品,提供豐富的開發(fā)設(shè)計(jì)資料,提供產(chǎn)品規(guī)格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。

    了解詳情
    OKT507-C 開發(fā)板
  • OKMX8MP-C開發(fā)板

    內(nèi)置NPU、ISP,AI計(jì)算能力高達(dá)2.3TOPS|飛凌嵌入式i.MX8MP 系列-NXP iMX8M Plus 開發(fā)板 基于高性能低功耗工業(yè)級iMX8MP核心板設(shè)計(jì),支持多種多種高速通信接口。iMX8MP開發(fā)板內(nèi)置NPU,AI計(jì)算能力2.3TOPS,支持4K,支持雙圖像信號處理器(ISP),是一款支持LinuxQT/android操作系統(tǒng)的iMX8MP開發(fā)板。

    了解詳情
    OKMX8MP-C開發(fā)板
  • OK3568-C開發(fā)板

    強(qiáng)而穩(wěn),國產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發(fā)板基于國產(chǎn)工業(yè)級AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書_datasheet_數(shù)據(jù)手冊_原理圖等,


    了解詳情
    OK3568-C開發(fā)板
  • OKMX6ULL-C開發(fā)板

    40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設(shè)計(jì)開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應(yīng)場景豐富。 了解詳情
    OKMX6ULL-C開發(fā)板

推薦閱讀 換一批 換一批