博客專欄

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

        SPI接口說明及原理

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

        SPI:Serial Peripheral Interface,是串行外設(shè)接口。


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


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


        2SPI接口

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


        MOSI:Master Output Slave Input,主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入;

        MISO:Master Input Slave Output,主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出;

        SCLK:Serial Clock,時鐘信號,由主設(shè)備產(chǎn)生;

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

        圖片


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


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


        一主一從

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

        圖片


        上圖例子是主機(jī)發(fā)送一個字節(jié)數(shù)據(jù)(0x53),從機(jī)應(yīng)答一個字節(jié)數(shù)據(jù)(0x46)。


        一主多從

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


        A.常規(guī)

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

        圖片


        B.一條SS信號

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

        圖片


        3SPI數(shù)據(jù)傳輸

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


        SPI時鐘

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


        SPI通信速率要結(jié)合實(shí)際情況,不能超過主機(jī)或從機(jī)支持的最大時鐘頻率。


        SPI數(shù)據(jù)

        SPI的數(shù)據(jù)分兩個方向:

        MOSI:主機(jī) -> 從機(jī)

        MISO:從機(jī) -> 主機(jī)


        SPI通信有一個“缺點(diǎn)”:沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。


        可以理解為:不知道是什么時候主機(jī)發(fā)給從機(jī),什么時候從機(jī)發(fā)給主機(jī),到底該發(fā)多少字節(jié)數(shù)據(jù)等。


        此時,需要通信的主機(jī)和從機(jī)達(dá)成約定,一般由主機(jī)進(jìn)行控制讀寫的操作。


        比如下面這個讀寫SPI Flash數(shù)據(jù)的操作:

        圖片


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


        時鐘極性和相位

        除了設(shè)置時鐘頻率外,主機(jī)還必須配置與數(shù)據(jù)有關(guān)的時鐘極性和相位。

        圖片


        CPOL確定時鐘的極性,極性可以通過簡單的逆變器進(jìn)行轉(zhuǎn)換。


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


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


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


        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



        關(guān)鍵詞: SPI接口

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 千阳县| 海淀区| 蒙阴县| 南澳县| 读书| 怀集县| 阳谷县| 泊头市| 甘谷县| 兴和县| 兴义市| 布尔津县| 龙里县| 昂仁县| 陇南市| 清远市| 江门市| 水城县| 门头沟区| 门源| 兰州市| 博爱县| 康平县| 赤峰市| 新晃| 安仁县| 清河县| 汉源县| 全州县| 宽城| 茌平县| 皋兰县| 佳木斯市| 龙门县| 历史| 远安县| 阳朔县| 富蕴县| 辛集市| 扎兰屯市| 金山区|