藍(lán)牙串口通訊總線——I2C/SPI/UART
嵌入式工程師在做串口通信調(diào)試工作的時候,會經(jīng)常用到I2C、SPI、UART這3條總線,I2C、SPI、UART這三種通信總線在嵌入式領(lǐng)域很常見,目前主流的SOC芯片都內(nèi)置了這三種總線的控制器,各種Sensor、Touch、藍(lán)牙模塊、WIFI模塊等也都兼容這三種通信協(xié)議的1種以上。那么這三條通信總線有什么區(qū)別呢?工業(yè)物聯(lián)網(wǎng)無線通信專業(yè)廠商為您一一細(xì)說——
I2C:半雙工、同步、串行傳輸,物理上只有兩根線(SDA/SCL);傳輸數(shù)據(jù)必須8位8位的傳輸。
I2C串口通信傳輸步驟
1.在SCL線為高電平時,主機通過將SDA線從高電平切換到低電平來啟動總線通信;
2.主機向總線發(fā)送要與之通信的從機的7位或10位地址,以及讀/寫位;
3.每個從機將主機發(fā)送的地址與其自己的地址進(jìn)行比較。如果地址匹配,則從機通過將SDA線拉低一位返回一個ACK位。如果主機的地址與從機的地址不匹配,則從機將SDA線拉高。
4.主機發(fā)送或接收數(shù)據(jù)幀;
5.傳輸完每個數(shù)據(jù)幀后,接收設(shè)備將另一個ACK位返回給發(fā)送方,以確認(rèn)已成功接收到該幀;
6.隨后主機將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機發(fā)送停止條件。
SPI:全雙工、同步、串行傳輸,收發(fā)獨立,傳輸速率高,但是沒有指定的流控制,沒有應(yīng)答機制確認(rèn)是否接收到數(shù)據(jù)。物理上4根線(CLK/SDI/SDO/CS),因為是全雙工,并且不需要尋址,所以速度要比I2C快,但是占用的物理線的數(shù)量要比I2C多;通信時可以一位一位的傳輸數(shù)據(jù)。
SPI串口通信傳輸步驟:
1.主機輸出時鐘信號;
2.主機拉低SS/CS引腳,激活從機;
3.主機通過MOSI將數(shù)據(jù)發(fā)送給從機;
4.如果需要相應(yīng),則從機通過MISO將數(shù)據(jù)返回給從機。
UART:全雙工、異步、串行傳輸,收發(fā)獨立,UART總線并沒有時鐘線,所以需要提前約定對應(yīng)的波特率,傳輸速度較慢,物理上4根線(VCC/TX/RX/GND),雖然速度慢,但是可用于不同主機間的通信,通常用于debug調(diào)試非常方便;傳輸時數(shù)據(jù)位可以5、6、7、8位。
UART串口通信傳輸步驟:
1.發(fā)送UART從數(shù)據(jù)總線并行接收數(shù)據(jù);
2.發(fā)送UART將起始位、奇偶校驗位和停止位添加到數(shù)據(jù)幀;
3.整個數(shù)據(jù)包從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)先配置的波特率對數(shù)據(jù)線進(jìn)行采樣;
4.接收UART丟棄數(shù)據(jù)幀中的起始位、奇偶校驗位和停止位;
5.接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線。
單工、半雙工、全雙工
單工:數(shù)據(jù)只能在一個方向上傳輸。
半雙工:數(shù)據(jù)可以在兩個方向上進(jìn)行傳輸,但是同一時刻,只允許數(shù)據(jù)在一個方向上傳輸,相當(dāng)于單工通信的分時復(fù)用。
全雙工:數(shù)據(jù)可以同時在兩個方向上傳輸,相當(dāng)于兩個單工通信的結(jié)合。
同步通信和異步通信
同步是阻塞模式,異步是非阻塞模式。
同步通信要求發(fā)收雙方具有同頻同相的同步時鐘信號(一般共用一個時鐘),同步通信效率高。
異步通信的收發(fā)雙方?jīng)]有同步時鐘,比如UART,收發(fā)雙方僅僅是約定,你按照什么樣的速率發(fā),而我也按照這樣的速率去接收,這樣如果速度越快,那么信號寬度越窄,誤差就越大,所以異步通信效率較低。
綜上所述,工業(yè)物聯(lián)網(wǎng)無線通信專業(yè)廠商要說的是I2C、SPI、UART這三條總線在通信速度上,SPI最快,UART最慢;通信距離上,I2C和SPI通常用于片上通信,而UART通常用于設(shè)備間通信,比如PC機和我們要調(diào)試的產(chǎn)品設(shè)備。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。