UART、SPI、I2C協(xié)議異同點(diǎn)
寫(xiě)在前文: 這似乎是一個(gè)更側(cè)重于軟件層面的話題,直到我多次在硬件方案選型、layout布線等場(chǎng)合下,才發(fā)現(xiàn)我需要考量的并不僅僅只是電路設(shè)計(jì)或工藝制程方面的內(nèi)容。后來(lái)我才開(kāi)始反思,雖說(shuō)“術(shù)業(yè)有專(zhuān)攻”,但作為一名研發(fā)工程師,你所需要立項(xiàng)的新方案、你所碰到的問(wèn)題并不會(huì)挑“你所認(rèn)為的硬件或軟件才需要懂的知識(shí)”來(lái)和你碰面。除非,你想做一個(gè)“只聽(tīng)人家吩咐而做事”的技術(shù)工。
I2C、SPI、UART都是常見(jiàn)的低速板級(jí)通信協(xié)議 ,目前主流的SoC都內(nèi)置了這些通訊協(xié)議的控制器,同樣,各種傳感器、Touch控制器、指紋模塊、藍(lán)牙模塊、WIFI模塊也都兼容這三種通信方式的一種或幾種。對(duì)于這三種通信協(xié)議的差別,可以區(qū)分到非常細(xì),包括信號(hào)的單位、傳輸協(xié)議中的封包格式等。
UART一般由TXD、RXD、GND三根線組成,是一種異步傳輸協(xié)議。無(wú)論是主機(jī)還是從機(jī),均可以自由發(fā)送數(shù)據(jù),但是由于UART總線并沒(méi)有時(shí)鐘線,所以需要提前約定對(duì)應(yīng)的波特率,這是一種很簡(jiǎn)單的傳輸協(xié)議,以此基礎(chǔ)再搭電路可以實(shí)現(xiàn)RS-232、RS-242、RS-485等通信協(xié)議。過(guò)去老式電腦是具備RS-232接口的,但近10年的電腦都只具備USB,因此通常需要透過(guò)一個(gè)UART轉(zhuǎn)USB的轉(zhuǎn)接電路才能互相連接。UART比較簡(jiǎn)單,所以CPU輸出log一般都是通過(guò)一個(gè)UART口來(lái)輸出,是目前最常用的調(diào)試接口,其傳輸速度比較慢,傳統(tǒng)的傳輸速度在115200bps或以下,不過(guò)現(xiàn)在大部分UART控制器也能支持到4Mbps或者8Mbps了。
I2C是兩根線,SDA(數(shù)據(jù))和SCL(時(shí)鐘),是一種半雙工同步傳輸協(xié)議。主機(jī)在發(fā)送開(kāi)始信號(hào)之后,先發(fā)送7個(gè)比特的地址位和1個(gè)比特的讀寫(xiě)位,每個(gè)從機(jī)有自己的I2C地址,當(dāng)發(fā)現(xiàn)該條指令是發(fā)給自己的時(shí)候,拉低SDA線(即回復(fù)ACK信號(hào)),然后主機(jī)發(fā)送或接收數(shù)據(jù),完成傳輸。傳輸完成之后,主機(jī)發(fā)送停止位,完成該次傳輸。I2C最早是由PHILIPS提出來(lái)的,用于晶片間的傳輸,理論上可以連接128個(gè)從機(jī)(一般最多只接10個(gè)),原則上只能以PCB板上的銅箔線路來(lái)走,然而目前許多應(yīng)用卻是把I2C纜線化。另外,I2C總線的管腳都是開(kāi)漏輸出,必須外接上拉電阻,阻值可以根據(jù)總線速度來(lái)推算,一般我們常用400kbps傳輸速率(標(biāo)準(zhǔn)模式:100kbps,快速模式:400kbps,高速模式:3.4Mbps),上拉電阻選用2.2K。
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)入休眠。SPI由Motorola發(fā)明,與I2C相同可以接多個(gè)從機(jī),只是每增加一個(gè)從機(jī),線路至少要增加一條,其發(fā)送與接收可以同時(shí)進(jìn)行,傳輸速度可達(dá)到幾Mbps水平,比I2C快。
UART和后面兩者最大的區(qū)別在于后面兩者是同步的,要有統(tǒng)一的時(shí)鐘線,而UART不需要,接線方便,但收發(fā)雙方都需要配置相同的波特率,即設(shè)備要有自己的時(shí)鐘源;I2C協(xié)議中是有地址規(guī)則的,因此在一對(duì)多通信的時(shí)候更有優(yōu)勢(shì)。常用來(lái)連接傳感器;SPI編程簡(jiǎn)單,在設(shè)備不多,端口充足,對(duì)通信速度要求不高的場(chǎng)合可以應(yīng)用,較常用來(lái)連接EEPROM、FLASH或液晶顯示器。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!