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

原創 2020-03-04 16:18:00 SPI SPI原理 CAN模塊

SPI是什么


SPI(Serial Peripheral Interface),即串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM、FLASH、實時時鐘、AD轉換器,還有數字信號處理器和數字信號解碼器之間。

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

 

SPI的特點

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

SPI 規定兩個 SPI 設備之間通信必須由主設備 (Master) 來控制從設備 (Slave)。一個 Master 設備可以通過提供 Clock 以及對 Slave 設備進行片選 (Slave Select) 來控制多個 Slave 設備。

SPI 協議還規定 Slave 設備的 Clock 由 Master 設備通過 SCK 管腳提供給 Slave 設備, Slave 設備本身不能產生或控制 Clock, 沒有 Clock 則 Slave 設備不能正常工作。

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

Master 設備會根據將要交換的數據來產生相應的時鐘脈沖(Clock Pulse),時鐘脈沖組成了時鐘信號(Clock Signal) ,時鐘信號通過時鐘極性 (CPOL) 和時鐘相位 (CPHA) 控制著兩個 SPI 設備間何時數據交換以及何時對接收到的數據進行采樣,來保證數據在兩個設備之間是同步傳輸的。

 

03、數據交換(Data Exchanges)

SPI 設備間的數據傳輸之所以又被稱為數據交換,是因為 SPI 協議規定一個 SPI 設備不能在數據通信過程中僅僅只充當一個 "發送者(Transmitter)" 或者 "接收者(Receiver)"。在每個 Clock 周期內,SPI 設備都會發送并接收一個 bit 大小的數據,相當于該設備有一個 bit 大小的數據被交換了。

1個 Slave 設備要想能夠接收到 Master 發過來的控制信號,必須在此之前能夠被 Master 設備進行訪問 (Access),所以 Master 設備必須先通過 SS/CS pin 對 Slave 設備進行片選,把想要訪問的 Slave 設備選上。

在數據傳輸的過程中,每次接收到的數據必須在下一次數據傳輸之前被采樣。如果之前接收到的數據沒有被讀取,那么這些已經接收完成的數據將有可能會被丟棄,導致 SPI 物理模塊最終失效。

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

 04、四種傳輸模式

§  CPOL用來決定SCLK空閑時的電平

CPOL=0,空閑時為低電平;

CPOL=1,空閑時為高電平。

§  CPHA用來決定采樣時刻:

CPHA=0,每個周期的第一個時鐘沿采樣;

CPHA=1,每個周期的第二個時鐘沿采樣。

 

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

沒有讀和寫的說法,因為實質上每次SPI是主從設備在交換數據。也就是說,你發一個數據必然會收到一個數據;你要收一個數據必須也要先發一個數據。

 06、SPI極性和相位的設置 

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

兩種從設備SPI的模式:

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

SPI從設備,具體是什么模式,相關的datasheet中會有描述,需要自己去datasheet中找到相關的描述。

關于SPI從設備在空閑的時候,是高電平還是低電平,決定了CPOL是0還是1;然后再確定設備是在上升沿采樣數據還是下降沿采樣數據,這樣就可以在定了CPOL值的前提下,對應著推算出CPHA是0還是1了。

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

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

對于如何配置SPI的CPOL和CPHA,這里不多細說,多數都是直接去寫對應的SPI控制器中對應寄存器中的CPOL和CPHA那兩位,寫0或寫1即可。

 

SPI示例

 

對于我們的FIT_CAN_II_2515模塊來說,其主芯片使用的是MCP2515。根據芯片手冊,該芯片可以工作在SPI的MODE 0和MODE 3模式:

 

 

 

但芯片硬件并沒有相應的配置引腳

 

 

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

 

 

關于SPI總線工作原理先介紹到這里,希望能幫助到你,后續會分享更多有關SPI的干貨,敬請關注我們【飛凌嵌入式】公眾號。

 

END



相關產品 >

  • OKT507-C 開發板

    CPU: T507 工業級處理器,超低功耗,10年+生命周期|推薦全志工業級T507開發板系列,飛凌OKT507-C開發板采用全志T507 四核工業級處理器 T507設計開發,Cortex-A53架構,工業級寬溫,性能強,低功耗,是一款高性價比的工業級產品,提供豐富的開發設計資料,提供產品規格書,軟硬件手冊等,全志的T507適用于車載電子、電力、醫療、工業控制、物聯網、智能終端等領域。

    了解詳情
    OKT507-C 開發板
  • OKMX8MP-C開發板

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

    了解詳情
    OKMX8MP-C開發板
  • OK3568-C開發板

    強而穩,國產芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開發板基于國產工業級AI處理器RK3568四核64位Cortex-A55 處理器設計。RK3568作為國產化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規格書_datasheet_數據手冊_原理圖等,


    了解詳情
    OK3568-C開發板
  • OKMX6ULL-C開發板

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

推薦閱讀 換一批 換一批