博客專欄

        EEPW首頁 > 博客 > 藍牙串口通訊總線——I2C/SPI/UART

        藍牙串口通訊總線——I2C/SPI/UART

        發布人:美迅物聯網 時間:2024-01-22 來源:工程師 發布文章

        嵌入式工程師在做串口通信調試工作的時候,會經常用到I2C、SPI、UART這3條總線,I2C、SPI、UART這三種通信總線在嵌入式領域很常見,目前主流的SOC芯片都內置了這三種總線的控制器,各種Sensor、Touch、藍牙模塊、WIFI模塊等也都兼容這三種通信協議的1種以上。那么這三條通信總線有什么區別呢?工業物聯網無線通信專業廠商為您一一細說——

          I2C:半雙工、同步、串行傳輸,物理上只有兩根線(SDA/SCL);傳輸數據必須8位8位的傳輸。

          I2C串口通信傳輸步驟

          1.在SCL線為高電平時,主機通過將SDA線從高電平切換到低電平來啟動總線通信;

          2.主機向總線發送要與之通信的從機的7位或10位地址,以及讀/寫位;

          3.每個從機將主機發送的地址與其自己的地址進行比較。如果地址匹配,則從機通過將SDA線拉低一位返回一個ACK位。如果主機的地址與從機的地址不匹配,則從機將SDA線拉高。

          4.主機發送或接收數據幀;

          5.傳輸完每個數據幀后,接收設備將另一個ACK位返回給發送方,以確認已成功接收到該幀;

          6.隨后主機將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機發送停止條件。

          SPI:全雙工、同步、串行傳輸,收發獨立,傳輸速率高,但是沒有指定的流控制,沒有應答機制確認是否接收到數據。物理上4根線(CLK/SDI/SDO/CS),因為是全雙工,并且不需要尋址,所以速度要比I2C快,但是占用的物理線的數量要比I2C多;通信時可以一位一位的傳輸數據。

          SPI串口通信傳輸步驟:

          1.主機輸出時鐘信號;

          2.主機拉低SS/CS引腳,激活從機;

          3.主機通過MOSI將數據發送給從機;

          4.如果需要相應,則從機通過MISO將數據返回給從機。

          UART:全雙工、異步、串行傳輸,收發獨立,UART總線并沒有時鐘線,所以需要提前約定對應的波特率,傳輸速度較慢,物理上4根線(VCC/TX/RX/GND),雖然速度慢,但是可用于不同主機間的通信,通常用于debug調試非常方便;傳輸時數據位可以5、6、7、8位。

          UART串口通信傳輸步驟:

          1.發送UART從數據總線并行接收數據;

          2.發送UART將起始位、奇偶校驗位和停止位添加到數據幀;

          3.整個數據包從發送UART串行發送到接收UART。接收UART以預先配置的波特率對數據線進行采樣;

          4.接收UART丟棄數據幀中的起始位、奇偶校驗位和停止位;

          5.接收UART將串行數據轉換回并行數據,并將其傳輸到接收端的數據總線。

          單工、半雙工、全雙工

          單工:數據只能在一個方向上傳輸。

          半雙工:數據可以在兩個方向上進行傳輸,但是同一時刻,只允許數據在一個方向上傳輸,相當于單工通信的分時復用。

          全雙工:數據可以同時在兩個方向上傳輸,相當于兩個單工通信的結合。

          同步通信和異步通信

          同步是阻塞模式,異步是非阻塞模式。

          同步通信要求發收雙方具有同頻同相的同步時鐘信號(一般共用一個時鐘),同步通信效率高。

          異步通信的收發雙方沒有同步時鐘,比如UART,收發雙方僅僅是約定,你按照什么樣的速率發,而我也按照這樣的速率去接收,這樣如果速度越快,那么信號寬度越窄,誤差就越大,所以異步通信效率較低。

          綜上所述,工業物聯網無線通信專業廠商要說的是I2C、SPI、UART這三條總線在通信速度上,SPI最快,UART最慢;通信距離上,I2C和SPI通常用于片上通信,而UART通常用于設備間通信,比如PC機和我們要調試的產品設備。




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



        關鍵詞: 總線 串口

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 仪陇县| 洮南市| 商丘市| 珲春市| 怀仁县| 老河口市| 天水市| 滁州市| 益阳市| 三穗县| 图木舒克市| 南涧| 共和县| 井陉县| 桐庐县| 布拖县| 招远市| 英山县| 亳州市| 霍林郭勒市| 辽阳市| 腾冲县| 新化县| 绥中县| 江津市| 苍南县| 九龙县| 西丰县| 雷州市| 运城市| 河源市| 定日县| 北票市| 赣州市| 竹山县| 隆尧县| 娱乐| 教育| 井陉县| 宣化县|