UART、I2C、SPI都是常見的低速板級通信協(xié)議,目前主流的SoC都內(nèi)置了這些通訊協(xié)議的控制器,同樣,各種傳感器、Touch控制器、指紋模塊、藍(lán)牙模塊、WIFI模塊也都兼容這三種通信方式的一種或幾種。
下面分別說下:
UART
UART一般由TXD、RXD、GND三根線組成,是一種異步傳輸協(xié)議。
無論是主機還是從機,均可以自由發(fā)送數(shù)據(jù),但是由于UART總線并沒有時鐘線,所以需要提前約定對應(yīng)的波特率,這是一種很簡單的傳輸協(xié)議。
I2C
I2C是兩根線,SDA(數(shù)據(jù))和SCL(時鐘),也是一種同步傳輸協(xié)議。主機在發(fā)送開始信號之后,先發(fā)送7個比特的地址位和1個比特的讀寫位,每個從機有自己的I2C地址,當(dāng)發(fā)現(xiàn)該條指令是發(fā)給自己的時候,拉低SDA線(即回復(fù)ACK信號),然后主機發(fā)送或接收數(shù)據(jù),完成傳輸。傳輸完成之后,主機發(fā)送停止位,完成該次傳輸。
SPI
SPI是四根線,分別是CS(片選)、MOSI(主發(fā)從收)、MISO(從發(fā)主收)、CLK(時鐘),是一種同步傳輸協(xié)議。主機送出CLK信號,主機到從機的數(shù)據(jù)在MOSI線上傳輸,從機到主機的數(shù)據(jù)在MISO線上傳輸。在啟動傳輸之前,需要先拉低(一般是這樣,也有各別芯片是CS高有效)對應(yīng)從機的CS管腳,在傳輸完成之后,再拉高CS管腳,從機的SPI Slave模塊進(jìn)入休眠。
使用場景
首先,I2C和SPI都是同步協(xié)議,都有時鐘信號,在一條總線上也都可以掛多個從設(shè)備,但是I2C的從設(shè)備是通過地址來區(qū)分的,SPI的從設(shè)備是通過片選線來區(qū)分的,所以SPI總線上,每多掛一個從設(shè)備,就要多用一個線作為片選線,而I2C則不用,只要地址不沖突,可以隨便掛設(shè)備。
但是,I2C總線速度一般普遍慢于SPI,I2C一般的速度是100kbs、400kbps和1Mbps,而SPI的速度可以在幾Mbps,也可以10+Mbps。所以看使用場合,低速的話,I2C就挺合適的,如果速度快一些,則一般都要選用SPI。另外,I2C總線的管腳都是開漏輸出,必須外接上拉電阻,阻值可以根據(jù)總線速度來推算,一般我們常用400kbps傳輸速率,上拉電阻選用2.2K。
UART和SPI、I2C不同,他是異步傳輸?shù)?,一般來說傳輸速度比較慢,傳統(tǒng)的傳輸速度一般在115200bps或以下,不過現(xiàn)在大部分UART控制器也能支持到4Mbps或者8Mbps了。UART目前最常用的就是調(diào)試接口,因為UART比較簡單,所以CPU輸出log一般都通過一個UART口來輸出。
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753053 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
879瀏覽量
40294 -
SPI
+關(guān)注
關(guān)注
17文章
1706瀏覽量
91498 -
I2C
+關(guān)注
關(guān)注
28文章
1484瀏覽量
123616 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101350
原文標(biāo)題:一文搞懂UART、I2C、SPI協(xié)議
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論