• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > SPI接口說明及原理

    SPI接口說明及原理

    發布人:yingjian 時間:2022-08-18 來源:工程師 發布文章
    1簡介

    SPI:Serial Peripheral Interface,是串行外設接口。


    SPI是由摩托羅拉于 1985 年前后開發,是一種適用于短距離、設備到設備通信的同步串行接口。


    從那時起,這種接口就已成為許多半導體制造商,特別是微控制器(MCU)和微處理器(MPU)采用的事實標準。


    2SPI接口

    SPI總線是一種4線總線,通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以。


    MOSI:Master Output Slave Input,主設備數據輸出,從設備數據輸入;

    MISO:Master Input Slave Output,主設備數據輸入,從設備數據輸出;

    SCLK:Serial Clock,時鐘信號,由主設備產生;

    SS:Slave Select,從設備選擇信號,由主設備控制;

    圖片


    上面的SS信號,也可以理解為CS信號,一般是低電平有效,所以也是NSS(非)信號;


    CS:Chip Select,片選信號(從設備使能/選擇信號),由主設備控制;


    一主一從

    最基本的SPI通信就是一主一從,比如:一個STM32作為主機,一個W25Q16(SPI Flash)作為從機。還有兩個MCU之間進行SPI通信等。 

    圖片


    上圖例子是主機發送一個字節數據(0x53),從機應答一個字節數據(0x46)。


    一主多從

    SPI可以一主一從(一個主機,一個從機),但也可以一主多從。一主多從常見有兩種連接方式。


    A.常規

    通常,每個從機都需要一條單獨的SS線,要與指定的從機通信,將該從機的SS線設為低電平,并將其余的保持為高電平即可。

    圖片


    B.一條SS信號

    某些應用只需要一條NSS即可(比如:移位寄存器),對于這種布局,數據從一個從設備移位到另一個從設備。

    圖片


    3SPI數據傳輸

    SPI的通信比較簡單,一個時鐘傳輸一位數據(主機 -> 從機,或者從機 -> 主機)。


    SPI時鐘

    理論上SPI的時鐘頻率可以做到很大,一般幾MHz~幾百MHz,拿常見的W25Q16來說,SPI最高支持80MHz。


    SPI通信速率要結合實際情況,不能超過主機或從機支持的最大時鐘頻率。


    SPI數據

    SPI的數據分兩個方向:

    MOSI:主機 -> 從機

    MISO:從機 -> 主機


    SPI通信有一個“缺點”:沒有指定的流控制,沒有應答機制確認是否接收到數據。


    可以理解為:不知道是什么時候主機發給從機,什么時候從機發給主機,到底該發多少字節數據等。


    此時,需要通信的主機和從機達成約定,一般由主機進行控制讀寫的操作。


    比如下面這個讀寫SPI Flash數據的操作:

    圖片


    前面1字節是指令,緊接著再3字節(24位)地址,都是由主機發送給從機。之后,主機讀取數據(由從機發送出來)。


    時鐘極性和相位

    除了設置時鐘頻率外,主機還必須配置與數據有關的時鐘極性和相位。

    圖片


    CPOL確定時鐘的極性,極性可以通過簡單的逆變器進行轉換。


    CPHA確定相對于時鐘脈沖的數據位的時序(即相位)。


    一般集成有SPI外設的處理器,都有SPI相關的配置寄存器,拿STM32來說,參考手冊里面有詳細介紹SPI配置的信息。


    建議大家結合時序圖理解,不要死記硬背。


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



    關鍵詞: SPI接口

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 盘山县| 新闻| 浑源县| 岑溪市| 福建省| 武义县| 沂南县| 五莲县| 惠安县| 福州市| 巴彦县| 仙游县| 峨眉山市| 同江市| 松桃| 桓台县| 嘉祥县| 渭源县| 沾益县| 阿尔山市| 新龙县| 怀来县| 桑植县| 东港市| 葵青区| 平和县| 天水市| 望都县| 青冈县| 平安县| 南澳县| 呼和浩特市| 平泉县| 宁强县| 五台县| 汉中市| 黑龙江省| 东明县| 裕民县| 阳西县| 邵东县|