飛凌干貨 | 一文了解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í)時(shí)時(shí)鐘、AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。

SPI,是一種高速、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便。正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議。

 

SPI的特點(diǎn)

01、-從模式(Master-Slave) 的控制方式 

SPI 規(guī)定兩個(gè) SPI 設(shè)備之間通信必須由主設(shè)備 (Master) 來(lái)控制從設(shè)備 (Slave)。一個(gè) Master 設(shè)備可以通過(guò)提供 Clock 以及對(duì) Slave 設(shè)備進(jìn)行片選 (Slave Select) 來(lái)控制多個(gè) Slave 設(shè)備。

SPI 協(xié)議還規(guī)定 Slave 設(shè)備的 Clock 由 Master 設(shè)備通過(guò) SCK 管腳提供給 Slave 設(shè)備, Slave 設(shè)備本身不能產(chǎn)生或控制 Clock, 沒(méi)有 Clock 則 Slave 設(shè)備不能正常工作。

02、同步方式(Synchronous)傳輸數(shù)據(jù) 

Master 設(shè)備會(huì)根據(jù)將要交換的數(shù)據(jù)來(lái)產(chǎn)生相應(yīng)的時(shí)鐘脈沖(Clock Pulse),時(shí)鐘脈沖組成了時(shí)鐘信號(hào)(Clock Signal) ,時(shí)鐘信號(hào)通過(guò)時(shí)鐘極性 (CPOL) 和時(shí)鐘相位 (CPHA) 控制著兩個(gè) SPI 設(shè)備間何時(shí)數(shù)據(jù)交換以及何時(shí)對(duì)接收到的數(shù)據(jù)進(jìn)行采樣,來(lái)保證數(shù)據(jù)在兩個(gè)設(shè)備之間是同步傳輸?shù)摹?/span>

 

03、數(shù)據(jù)交換(Data Exchanges)

SPI 設(shè)備間的數(shù)據(jù)傳輸之所以又被稱為數(shù)據(jù)交換,是因?yàn)?SPI 協(xié)議規(guī)定一個(gè) SPI 設(shè)備不能在數(shù)據(jù)通信過(guò)程中僅僅只充當(dāng)一個(gè) "發(fā)送者(Transmitter)" 或者 "接收者(Receiver)"。在每個(gè) Clock 周期內(nèi),SPI 設(shè)備都會(huì)發(fā)送并接收一個(gè) bit 大小的數(shù)據(jù),相當(dāng)于該設(shè)備有一個(gè) bit 大小的數(shù)據(jù)被交換了。

1個(gè) Slave 設(shè)備要想能夠接收到 Master 發(fā)過(guò)來(lái)的控制信號(hào),必須在此之前能夠被 Master 設(shè)備進(jìn)行訪問(wèn) (Access),所以 Master 設(shè)備必須先通過(guò) SS/CS pin 對(duì) Slave 設(shè)備進(jìn)行片選,把想要訪問(wèn)的 Slave 設(shè)備選上。

在數(shù)據(jù)傳輸?shù)倪^(guò)程中,每次接收到的數(shù)據(jù)必須在下一次數(shù)據(jù)傳輸之前被采樣。如果之前接收到的數(shù)據(jù)沒(méi)有被讀取,那么這些已經(jīng)接收完成的數(shù)據(jù)將有可能會(huì)被丟棄,導(dǎo)致 SPI 物理模塊最終失效。

因此,在程序中一般都會(huì)在 SPI 傳輸完數(shù)據(jù)后,去讀取 SPI 設(shè)備里的數(shù)據(jù),即使這些數(shù)據(jù)(Dummy Data)在我們的程序里是無(wú)用的。

 04、四種傳輸模式

§  CPOL用來(lái)決定SCLK空閑時(shí)的電平

CPOL=0,空閑時(shí)為低電平;

CPOL=1,空閑時(shí)為高電平。

§  CPHA用來(lái)決定采樣時(shí)刻:

CPHA=0,每個(gè)周期的第一個(gè)時(shí)鐘沿采樣;

CPHA=1,每個(gè)周期的第二個(gè)時(shí)鐘沿采樣。

 

05、只有主模式和從模式之分

沒(méi)有讀和寫(xiě)的說(shuō)法,因?yàn)閷?shí)質(zhì)上每次SPI是主從設(shè)備在交換數(shù)據(jù)。也就是說(shuō),你發(fā)一個(gè)數(shù)據(jù)必然會(huì)收到一個(gè)數(shù)據(jù);你要收一個(gè)數(shù)據(jù)必須也要先發(fā)一個(gè)數(shù)據(jù)。

 06、SPI極性和相位的設(shè)置 

SPI分主設(shè)備和從設(shè)備,兩者通過(guò)SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備SPI是何種模式,然后再將主設(shè)備SPI的模式設(shè)置成和從設(shè)備相同的模式,即可正常通訊。

兩種從設(shè)備SPI的模式:

(1)固定的,由SPI從設(shè)備硬件決定

SPI從設(shè)備,具體是什么模式,相關(guān)的datasheet中會(huì)有描述,需要自己去datasheet中找到相關(guān)的描述。

關(guān)于SPI從設(shè)備在空閑的時(shí)候,是高電平還是低電平,決定了CPOL是0還是1;然后再確定設(shè)備是在上升沿采樣數(shù)據(jù)還是下降沿采樣數(shù)據(jù),這樣就可以在定了CPOL值的前提下,對(duì)應(yīng)著推算出CPHA是0還是1了。

(2)可配置的,由軟件自己設(shè)定

從設(shè)備也是一個(gè)SPI控制器,4種模式都支持,此時(shí)只要自己設(shè)置為某種模式即可。知道了從設(shè)備的模式后,再去將SPI主設(shè)備的模式設(shè)置為和從設(shè)備模式一樣的即可。

對(duì)于如何配置SPI的CPOL和CPHA,這里不多細(xì)說(shuō),多數(shù)都是直接去寫(xiě)對(duì)應(yīng)的SPI控制器中對(duì)應(yīng)寄存器中的CPOL和CPHA那兩位,寫(xiě)0或?qū)?即可。

 

SPI示例

 

對(duì)于我們的FIT_CAN_II_2515模塊來(lái)說(shuō),其主芯片使用的是MCP2515。根據(jù)芯片手冊(cè),該芯片可以工作在SPI的MODE 0和MODE 3模式:

 

 

 

但芯片硬件并沒(méi)有相應(yīng)的配置引腳

 

 

在咨詢軟件工程師后,確定是軟件設(shè)置為MODE 0:

 

 

關(guān)于SPI總線工作原理先介紹到這里,希望能幫助到你,后續(xù)會(huì)分享更多有關(guān)SPI的干貨,敬請(qǐng)關(guān)注我們【飛凌嵌入式】公眾號(hào)。

 

END



相關(guān)產(chǎn)品 >

  • OKT507-C 開(kāi)發(fā)板

    CPU: T507 工業(yè)級(jí)處理器,超低功耗,10年+生命周期|推薦全志工業(yè)級(jí)T507開(kāi)發(fā)板系列,飛凌OKT507-C開(kāi)發(fā)板采用全志T507 四核工業(yè)級(jí)處理器 T507設(shè)計(jì)開(kāi)發(fā),Cortex-A53架構(gòu),工業(yè)級(jí)寬溫,性能強(qiáng),低功耗,是一款高性價(jià)比的工業(yè)級(jí)產(chǎn)品,提供豐富的開(kāi)發(fā)設(shè)計(jì)資料,提供產(chǎn)品規(guī)格書(shū),軟硬件手冊(cè)等,全志的T507適用于車(chē)載電子、電力、醫(yī)療、工業(yè)控制、物聯(lián)網(wǎng)、智能終端等領(lǐng)域。

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

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

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

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


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

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

推薦閱讀 換一批 換一批