通信協(xié)議:I2C、SPI、UART

I2C、SPI、UART都是常見的低速板級(jí)通信協(xié)議,目前主流的SoC都內(nèi)置了這些通訊協(xié)議的控制器,同樣,各種傳感器、Touch控制器、指紋模塊、藍(lán)牙模塊、WIFI模塊也都兼容這三種通信方式的一種或幾種。

分別說下:

1. SPI是四根線,分別是CS(片選)、MOSI(主發(fā)從收)、MISO(從發(fā)主收)、CLK(時(shí)鐘),是一種同步傳輸協(xié)議。主機(jī)送出CLK信號(hào),主機(jī)到從機(jī)的數(shù)據(jù)在MOSI線上傳輸,從機(jī)到主機(jī)的數(shù)據(jù)在MISO線上傳輸。在啟動(dòng)傳輸之前,需要先拉低(一般是這樣,也有各別芯片是CS高有效)對(duì)應(yīng)從機(jī)的CS管腳,在傳輸完成之后,再拉高CS管腳,從機(jī)的SPI Slave模塊進(jìn)入休眠。

2. I2C是兩根線,SDA(數(shù)據(jù))和SCL(時(shí)鐘),也是一種同步傳輸協(xié)議。主機(jī)在發(fā)送開始信號(hào)之后,先發(fā)送7個(gè)比特的地址位和1個(gè)比特的讀寫位,每個(gè)從機(jī)有自己的I2C地址,當(dāng)發(fā)現(xiàn)該條指令是發(fā)給自己的時(shí)候,拉低SDA線(即回復(fù)ACK信號(hào)),然后主機(jī)發(fā)送或接收數(shù)據(jù),完成傳輸。傳輸完成之后,主機(jī)發(fā)送停止位,完成該次傳輸。

3. UART一般由TXD、RXD、GND三根線組成,是一種異步傳輸協(xié)議。無論是主機(jī)還是從機(jī),均可以自由發(fā)送數(shù)據(jù),但是由于UART總線并沒有時(shí)鐘線,所以需要提前約定對(duì)應(yīng)的波特率,這是一種很簡(jiǎn)單的傳輸協(xié)議。

說說異同點(diǎn)和使用場(chǎng)景吧。首先,I2C和SPI都是同步協(xié)議,都有時(shí)鐘信號(hào),在一條總線上也都可以掛多個(gè)從設(shè)備,但是I2C的從設(shè)備是通過地址來區(qū)分的,SPI的從設(shè)備是通過片選線來區(qū)分的,所以SPI總線上,每多掛一個(gè)從設(shè)備,就要多用一個(gè)線作為片選線,而I2C則不用,只要地址不沖突,可以隨便掛設(shè)備。但是,I2C總線速度一般普遍慢于SPI,I2C一般的速度是100kbs、400kbps和1Mbps,而SPI的速度可以在幾Mbps,也可以10+Mbps。所以看使用場(chǎng)合,低速的話,I2C就挺合適的,如果速度快一些,則一般都要選用SPI。另外,I2C總線的管腳都是開漏輸出,必須外接上拉電阻,阻值可以根據(jù)總線速度來推算,一般我們常用400kbps傳輸速率,上拉電阻選用2.2K。

UART和SPI、I2C不同,他是異步傳輸?shù)?,一般來說傳輸速度比較慢,傳統(tǒng)的傳輸速度一般在115200bps或以下,不過現(xiàn)在大部分UART控制器也能支持到4Mbps或者8Mbps了。UART目前最常用的就是調(diào)試接口,因?yàn)閁ART比較簡(jiǎn)單,所以CPU輸出log一般都通過一個(gè)UART口來輸出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容