在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      博客專欄

      EEPW首頁 > 博客 > 一文搞懂SPI通信協(xié)議

      一文搞懂SPI通信協(xié)議

      發(fā)布人:美男子玩編程 時間:2022-06-22 來源:工程師 發(fā)布文章

      1


      簡介


      SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫,是美國摩托羅拉公司(Motorola)最先推出的一種同步串行傳輸規(guī)范,也是一種單片機外設(shè)芯片串行擴展接口,是一種高速、全雙工、同步通信總線,所以可以在同一時間發(fā)送和接收數(shù)據(jù),SPI沒有定義速度限制,通常能達(dá)到甚至超過10M/bps。


      SPI有主、從兩種模式,通常由一個主模塊和一個或多個從模塊組成(SPI不支持多主機),主模塊選擇一個從模塊進(jìn)行同步通信,從而完成數(shù)據(jù)的交換。提供時鐘的為主設(shè)備(Master),接收時鐘的設(shè)備為從設(shè)備(Slave),SPI接口的讀寫操作,都是由主設(shè)備發(fā)起,當(dāng)存在多個從設(shè)備時,通過各自的片選信號進(jìn)行管理。


      SPI通信原理很簡單,需要至少4根線,單向傳輸時3根線,它們是MISO(主設(shè)備數(shù)據(jù)輸入)、MOSI(主設(shè)備數(shù)據(jù)輸出)、SCLK(時鐘)和CS/SS(片選):

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

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

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

      • CS/SS(Chip Select/Slave Select):從設(shè)備使能信號,由主設(shè)備控制,一主多從時,CS/SS是從芯片是否被主芯片選中的控制信號,只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),主芯片對此從芯片的操作才有效。


      圖片

      一主設(shè)備一從設(shè)備模式

      圖片

      一主設(shè)備多從設(shè)備模式



      2


      通信原理


      SPI主設(shè)備和從設(shè)備都有一個串行移位寄存器,主設(shè)備通過向它的SPI串行寄存器寫入一個字節(jié)來發(fā)起一次傳輸。


      圖片

      SPI數(shù)據(jù)通信的流程可以分為以下幾步:

      1、主設(shè)備發(fā)起信號,將CS/SS拉低,啟動通信。

      2、主設(shè)備通過發(fā)送時鐘信號,來告訴從設(shè)備進(jìn)行寫數(shù)據(jù)或者讀數(shù)據(jù)操作(采集時機可能是時鐘信號的上升沿(從低到高)或下降沿(從高到低),因為SPI有四種模式,后面會講到),它將立即讀取數(shù)據(jù)線上的信號,這樣就得到了一位數(shù)據(jù)(1bit)。

      3、主機(Master)將要發(fā)送的數(shù)據(jù)寫到發(fā)送數(shù)據(jù)緩存區(qū)(Menory),緩存區(qū)經(jīng)過移位寄存器(緩存長度不一定,看單片機配置),串行移位寄存器通過MOSI信號線將字節(jié)一位一位的移出去傳送給從機,同時MISO接口接收到的數(shù)據(jù)經(jīng)過移位寄存器一位一位的移到接收緩存區(qū)。

      4、從機(Slave)也將自己的串行移位寄存器(緩存長度不一定,看單片機配置)中的內(nèi)容通過MISO信號線返回給主機。同時通過MOSI信號線接收主機發(fā)送的數(shù)據(jù),這樣,兩個移位寄存器中的內(nèi)容就被交換。


      例如,下圖示例中簡單模擬SPI通信流程,主機拉低NSS片選信號,啟動通信,并且產(chǎn)生時鐘信號,上升沿觸發(fā)邊沿信號,主機在MOSI線路一位一位發(fā)送數(shù)據(jù)0X53,在MISO線路一位一位接收數(shù)據(jù)0X46,如下圖所示:


      圖片

      這里有一點需要著重說明一下:SPI只有主模式和從模式之分,沒有讀和寫的說法,外設(shè)的寫操作和讀操作是同步完成的。若只進(jìn)行寫操作,主機只需忽略接收到的字節(jié)(虛擬數(shù)據(jù));反之,若主機要讀取從機的一個字節(jié),就必須發(fā)送一個空字節(jié)來引發(fā)從機的傳輸。也就是說,你發(fā)一個數(shù)據(jù)必然會收到一個數(shù)據(jù);你要收一個數(shù)據(jù)必須也要先發(fā)一個數(shù)據(jù)。




      3


      通信特性


      3.1、設(shè)備選擇


      SPI是單主設(shè)備(Single Master)通信協(xié)議,只有一支主設(shè)備能發(fā)起通信,當(dāng)SPI主設(shè)備想讀/寫從設(shè)備時,它首先拉低從設(shè)備對應(yīng)的SS線(SS是低電平有效)。接著開始發(fā)送工作脈沖到時鐘線上,在相應(yīng)的脈沖時間上,主設(shè)備把信號發(fā)到MOSI實現(xiàn)“寫”,同時可對MISO采樣而實現(xiàn)“讀”。如下圖所示:


      圖片


      3.2、設(shè)備時鐘


      SPI時鐘特點主要包括:時鐘速率、時鐘極性和時鐘相位三方面。


      3.2.1、時鐘速率


      SPI總線上的主設(shè)備必須在通信開始時候配置并生成相應(yīng)的時鐘信號。從理論上講,只要實際可行,時鐘速率就可以是你想要的任何速率,當(dāng)然這個速率受限于每個系統(tǒng)能提供多大的系統(tǒng)時鐘頻率,以及最大的SPI傳輸速率。


      3.2.2、時鐘極性


      根據(jù)硬件制造商的命名規(guī)則不同,時鐘極性通常寫為CKP或CPOL。時鐘極性和相位共同決定讀取數(shù)據(jù)的方式,比如信號上升沿讀取數(shù)據(jù)還是信號下降沿讀取數(shù)據(jù)。

      CKP可以配置為1或0。


      這意味著你可以根據(jù)需要將時鐘的默認(rèn)狀態(tài)(IDLE)設(shè)置為高或低。極性反轉(zhuǎn)可以通過簡單的邏輯逆變器實現(xiàn)。你必須參考設(shè)備的數(shù)據(jù)手冊才能正確設(shè)置CKP和CKE。

      • CKP = 0:時鐘空閑IDLE為低電平 0;

      • CKP = 1:時鐘空閑IDLE為高電平1。


      3.2.3、時鐘相位


      根據(jù)硬件制造商的不同,時鐘相位通常寫為CKE或CPHA。顧名思義,時鐘相位/邊沿,也就是采集數(shù)據(jù)時是在時鐘信號的具體相位或者邊沿。

      • CKE = 0:在時鐘信號SCK的第一個跳變沿采樣;

      • CKE = 1:在時鐘信號SCK的第二個跳變沿采樣。


      3.3、四種模式


      根據(jù)SPI的時鐘極性和時鐘相位特性可以設(shè)置4種不同的SPI通信操作模式,它們的區(qū)別是定義了在時鐘脈沖的哪條邊沿轉(zhuǎn)換(toggles)輸出信號,哪條邊沿采樣輸入信號,還有時鐘脈沖的穩(wěn)定電平值(就是時鐘信號無效時是高還是低),詳情如下所示:

      • Mode0:CKP=0,CKE =0:當(dāng)空閑態(tài)時,SCK處于低電平,數(shù)據(jù)采樣是在第1個邊沿,也就是SCK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在上升沿(準(zhǔn)備數(shù)據(jù)),(發(fā)送數(shù)據(jù))數(shù)據(jù)發(fā)送是在下降沿。

      • Mode1:CKP=0,CKE=1:當(dāng)空閑態(tài)時,SCK處于低電平,數(shù)據(jù)發(fā)送是在第2個邊沿,也就是SCK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。

      • Mode2:CKP=1,CKE=0:當(dāng)空閑態(tài)時,SCK處于高電平,數(shù)據(jù)采集是在第1個邊沿,也就是SCK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。

      • Mode3:CKP=1,CKE=1:當(dāng)空閑態(tài)時,SCK處于高電平,數(shù)據(jù)發(fā)送是在第2個邊沿,也就是SCK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。


      圖片

      黑線為采樣數(shù)據(jù)的時刻,藍(lán)線為SCK時鐘信號


      舉個例子,下圖是SPI Mode0讀/寫時序,可以看出SCK空閑狀態(tài)為低電平,主機數(shù)據(jù)在第一個跳變沿被從機采樣,數(shù)據(jù)輸出同理。


      圖片


      下圖是SPI Mode3讀/寫時序,SCK空閑狀態(tài)為高電平,主機數(shù)據(jù)在第二個跳變沿被從機采樣,數(shù)據(jù)輸出同理。


      圖片



      4


      多從機模式


      有兩種方法可以將多個從設(shè)備連接到主設(shè)備:多片選和菊花鏈。


      通常,每個從機都需要一條單獨的SS線。如果要和特定的從機進(jìn)行通訊,可以將相應(yīng)的NSS信號線拉低,并保持其他SS信號線的狀態(tài)為高電平;如果同時將兩個SS信號線拉低,則可能會出現(xiàn)亂碼,因為從機可能都試圖在同一條MISO線上傳輸數(shù)據(jù),最終導(dǎo)致接收數(shù)據(jù)亂碼。


      圖片


      菊花鏈的最大缺點是信號串行傳輸,一旦數(shù)據(jù)鏈路中的某設(shè)備發(fā)生故障的時候,它下面優(yōu)先級較低的設(shè)備就不可能得到服務(wù)了。另一方面,距離主機越遠(yuǎn)的從機,獲得服務(wù)的優(yōu)先級越低,所以需要安排好從機的優(yōu)先級,并且設(shè)置總線檢測器,如果某個從機超時,則對該從機進(jìn)行短路,防止單個從機損壞造成整個鏈路崩潰的情況。


      圖片

      5


      SPI優(yōu)缺點


      優(yōu)點


      1. 無起始位和停止位,因此數(shù)據(jù)位可以連續(xù)傳輸而不會被中斷;

      2. 沒有像I2C這樣復(fù)雜的從設(shè)備尋址系統(tǒng);

      3. 數(shù)據(jù)傳輸速率比I2C更高(幾乎快兩倍);

      4. 分離的MISO和MOSI信號線,因此可以同時發(fā)送和接收數(shù)據(jù);

      5. 極其靈活的數(shù)據(jù)傳輸,不限于8位,它可以是任意大小的字;

      6. 非常簡單的硬件結(jié)構(gòu)。從站不需要唯一地址(與I2C不同)。從機使用主機時鐘,不需要精密時鐘振蕩器/晶振(與UART不同)。不需要收發(fā)器(與CAN不同)。


      缺點

      1. 使用四根信號線(I2C和UART使用兩根信號線);

      2. 無法確認(rèn)是否已成功接收數(shù)據(jù)(I2C擁有此功能);

      3. 沒有任何形式的錯誤檢查,如UART中的奇偶校驗位;

      4. 只允許一個主設(shè)備;

      5. 沒有硬件從機應(yīng)答信號(主機可能在不知情的情況下無處發(fā)送);

      6. 沒有定義硬件級別的錯誤檢查協(xié)議;

      7. 與RS-232和CAN總線相比,只能支持非常短的距離;



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



      關(guān)鍵詞: SPI

      相關(guān)推薦

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

      關(guān)閉