日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機(jī)站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

UART與I2C、SPI總線有什么區(qū)別?

2024-07-08 10:12:19·  來源:汽車電控知識  
 

UART(Universal Asynchronous Receiver / Transmitter)通用異步收發(fā)器是一種常用的串行通信協(xié)議,在汽車嵌入式系統(tǒng)中常用于MCU與MCU,或MCU與外設(shè)之間的數(shù)據(jù)通信。


可用于線路板內(nèi)部芯片間串行通信的還有SPI(Serial Peripheral Interface,串行外圍設(shè)備接口)總線《為什么說SPI總線的數(shù)據(jù)傳輸與眾不同?》和I2C(Inter-Integrated Circuit,集成電路互連)總線《I2C與SPI總線有什么區(qū)別?》。


UART是如何通信的?它與SPI和I2C通信協(xié)議有什么區(qū)別呢?


1.通信方式


1.1物理接口


SPI總線有4條線,串行數(shù)據(jù)線MOSI和MISO、串行時鐘線SCK和從設(shè)備選擇線SS。


圖片

SPI總線接口1對1原理框圖


I2C總線僅需要兩條線就可以實(shí)現(xiàn)芯片之間的互連通信,這兩條線分別為串行數(shù)據(jù)線SDA和串行時鐘線SCL。


圖片

I2C總線接口1對1原理框圖


UART總線也只需兩條線就可以實(shí)現(xiàn)芯片之間的互連通信,這兩根線分別為串行數(shù)據(jù)發(fā)送線TX和串行數(shù)據(jù)接收線RX。


圖片

UART接口1對1原理框圖


這里要注意的是,UART信號線必須交叉連接,也就是己方的發(fā)送TX與對方的接收RX相連,己方的接收RX與對方的發(fā)送TX相連。


通過三種通信接口對比可知,UART的物理接口最簡單,不僅線少,而且不需要上拉電阻等外圍電路。


1.2全雙工與半雙工


SPI共有4個線,其中有2個數(shù)據(jù)線MOSI和MISO;UART共有2個線,分別是數(shù)據(jù)線TX和RX;I2C共有2個線,只有1個數(shù)據(jù)線SDA。


SPI和UART的2個數(shù)據(jù)線分別用于發(fā)送和接收,所以可以實(shí)現(xiàn)全雙工的通信,所謂的雙工就是指可以在發(fā)送與接收兩個方向上傳輸數(shù)據(jù),全雙工就是可以同時進(jìn)行收發(fā)。


而I2C只用1根數(shù)據(jù)線,也可以實(shí)現(xiàn)兩個方向的傳輸,但是同一時刻只能進(jìn)行收或發(fā),不能同時進(jìn)行,因此I2C是一種半雙工的通信方式。


SPI用4個線實(shí)現(xiàn)了全雙工,I2C用2個線實(shí)現(xiàn)了半雙工,而UART只用2個線就實(shí)現(xiàn)了全雙工的通信方式,可以說性價比非常高!


1.3通信速率


SPI并沒有規(guī)定最大傳輸速率,傳輸速率主要取決于SCK串行時鐘頻率,而SCK又取決于芯片的工作頻率,通??梢赃_(dá)到20MHz甚至更高。


I2C的傳輸速率不僅與SCL時鐘頻率有關(guān),還與工作模式有關(guān),8位的串行雙向數(shù)據(jù)傳輸速率在標(biāo)準(zhǔn)模式下最高可達(dá)100 kbit/s,在快速模式下最高可達(dá)400 kbit/s,在快速增強(qiáng)模式下最高可達(dá)1 Mbit/s,在高速模式下最高可達(dá)3.4 Mbit/s。8位的單向數(shù)據(jù)傳輸,在超快速模式下最高可達(dá)5 Mbit/s。


UART在外部物理接口上并沒有SCK或SCL等時鐘信號,它的通信速率,也就是波特率與MCU中的系統(tǒng)時鐘有關(guān),可根據(jù)MCU內(nèi)部的分頻器設(shè)置,常常見的波特率有2400、4800、9600、19200、38400、57600、115200。


在這三種通信協(xié)議中,SPI的通信速率最快,其次是I2C,UART的傳輸速度最慢!


1.4同步與異步


同步通信是指收發(fā)雙方具有同頻率和同相位的同步時鐘信號,在傳送報(bào)文開始時會通過特定的同步字符,使收發(fā)雙方建立同步,此后在同步時鐘的控制下逐位發(fā)送和接收。


SPI和I2C就是同步串行通信。SPI主設(shè)備負(fù)責(zé)產(chǎn)生時鐘信號,從設(shè)備必須使用主設(shè)備的時鐘信號,時鐘信號通過時鐘極性(CPOL)和時鐘相位(CPHA)控制兩個SPI 設(shè)備間何時數(shù)據(jù)傳輸以及何時進(jìn)行采樣,通過相同的工作模式來保證數(shù)據(jù)在兩個設(shè)備之間的同步傳輸。


圖片

SPI Clock Format 1 (CPHA = 1)


I2C的時鐘同步是通過SCL接口和SCL總線之間的“線與”連接來執(zhí)行的。當(dāng)有兩個主機(jī)同時啟動傳輸時,主機(jī)一的SCL接口檢測到總線上由高電平到低電平的轉(zhuǎn)換時,便拉低自己的SCL,并開始倒計(jì)時應(yīng)有的SCL低電平保持時間,直到應(yīng)有的低電平時間結(jié)束,會把SCL時鐘拉到高電平狀態(tài)。


如果主機(jī)二的SCL時鐘仍然處于低電平周期內(nèi),則主機(jī)一的SCL時鐘由低到高的轉(zhuǎn)換不會改變SCL總線為低電平的狀態(tài),主機(jī)一的SCL時鐘會進(jìn)入高電平等待狀態(tài)。因此,SCL總線會被具有最長低電平周期的主機(jī)保持在低電平。


當(dāng)所有的主機(jī)都已完成自身低電平周期的計(jì)時時,SCL時鐘總線會被釋放并變?yōu)楦唠娖?。主機(jī)SCL接口和SCL總線的狀態(tài)之間保持一致,都為高電平。所有主機(jī)開始計(jì)算它們的高電平周期。第一個完成高電平周期的主機(jī)再次將SCL線拉低。


這樣,就產(chǎn)生了同步的SCL總線時鐘,其低周期由具有最長時鐘低周期的主機(jī)確定,其高周期由具有最短時鐘高周期的主機(jī)確定。


圖片

I2C總線時鐘同步


UART沒有時鐘線,只有發(fā)送和接收數(shù)據(jù)線,是異步串行通信接口,UART異步通信是按幀(5-9位)發(fā)送,常用的為按字符(8位)發(fā)送。通信中兩個幀之間的時間間隔是不固定的,而在一個幀內(nèi)各位的時間間隔是固定的。


圖片

UART幀發(fā)送時間不固定


異步通信發(fā)送端可以在任意時刻開始發(fā)送數(shù)據(jù)幀,接收端必須時刻做好接收的準(zhǔn)備。異步通信在幀內(nèi)是通過起始位和結(jié)束位來確定位時序的,這樣就可以確保接收端能夠完整準(zhǔn)確地收到每一個數(shù)據(jù)幀。


由于異步通信沒有主設(shè)備提供的時鐘,通信雙方必須預(yù)先設(shè)置相同的波特率才能正常收發(fā)數(shù)據(jù)。


1.5單點(diǎn)與多點(diǎn)通信


SPI和I2C總線都采用主從模式通信,通信網(wǎng)絡(luò)中都會有1個主設(shè)備,1個以上的從設(shè)備,也就是可以實(shí)現(xiàn)多點(diǎn)通信。


主設(shè)備在查找從設(shè)備時,SPI為硬件尋址,通過SS硬線信號選擇從設(shè)備。


圖片

SPI總線1主3從原理框圖


I2C為軟件尋址,主設(shè)備通過數(shù)據(jù)線中的地址數(shù)據(jù)來實(shí)現(xiàn)片選功能。


圖片

I2C總線2主2從原理框圖


UART通信中并沒有地址的概念,也沒有主從的概念。每個設(shè)備在發(fā)送數(shù)據(jù)時,會拉低TX管腳,而接收數(shù)據(jù)時則依賴于對方設(shè)備的TX管腳被拉低。這種機(jī)制決定了UART通信在設(shè)備直連時只能實(shí)現(xiàn)一對一的通信,也就是單點(diǎn)通信。因?yàn)槿绻嵌鄠€設(shè)備連接TX,當(dāng)一個設(shè)備發(fā)送數(shù)據(jù)時,其他設(shè)備的TX也會被拉低,導(dǎo)致電平邏輯混亂,無法正確接收數(shù)據(jù)。


所以SPI和I2C是多點(diǎn)連接,可以稱為總線,但是UART只能單點(diǎn)連接,不能稱為總線。


2.通信協(xié)議


UART的通信的基本原理是將并行數(shù)據(jù)轉(zhuǎn)換為按位輸出的串行數(shù)據(jù),每個數(shù)據(jù)幀的位數(shù)不是固定的,范圍是5-9個位。


圖片

UART幀結(jié)構(gòu)


2.1空閑位


通信空閑時,信號線上始終為高電平,表示無數(shù)據(jù)傳輸。


2.2起始位


起始位為低電平,當(dāng)發(fā)送端發(fā)出起始位時,表示傳輸字符的開始;當(dāng)接收端Rx收到起始位,也就是信號電平由高到低轉(zhuǎn)換時,接收端就會以預(yù)先設(shè)定好的波特率接收數(shù)據(jù)。


2.3數(shù)據(jù)位


起始位后,發(fā)送端TX會開始發(fā)送數(shù)據(jù),數(shù)據(jù)幀長度可以是5-9位。沒有奇偶校驗(yàn)位時最大是9位,有奇偶校驗(yàn)位時最大是8位。


2.4校驗(yàn)位


數(shù)據(jù)傳輸完成后會有1個校驗(yàn)位,校驗(yàn)方法主要使用的是奇偶校驗(yàn),奇偶校驗(yàn)位的值取決于數(shù)據(jù)幀中“1”的總數(shù)是奇數(shù)還是偶數(shù)。


除了奇偶校驗(yàn),還有其它方式可以設(shè)置:


1)無校驗(yàn):無校驗(yàn)就是不進(jìn)行數(shù)據(jù)校驗(yàn);沒有校驗(yàn)位時,數(shù)據(jù)幀可以增加1位,所以最大是9位。


2)奇校驗(yàn):確保包含校驗(yàn)位在內(nèi)的數(shù)據(jù)幀中1的個數(shù)是奇數(shù)。


比如當(dāng)數(shù)據(jù)中1的個數(shù)是4(偶數(shù))時,校驗(yàn)位為1,確??倲?shù)4+1=5為奇數(shù)。


當(dāng)個數(shù)是3(奇數(shù))時,校驗(yàn)位為0,確??倲?shù)3+0=3仍為奇數(shù)。


3)偶校驗(yàn):確保包含校驗(yàn)位在內(nèi)的數(shù)據(jù)幀中1的個數(shù)是偶數(shù)。


比如當(dāng)數(shù)據(jù)中1的個數(shù)是4(偶數(shù))時,校驗(yàn)位為0,確保總數(shù)4+0=4為偶數(shù)。


當(dāng)個數(shù)是3(奇數(shù))時,校驗(yàn)位為1,確保總數(shù)3+1=4仍為偶數(shù)。


偶校驗(yàn)與奇校驗(yàn)的結(jié)果剛好相反。


圖片

奇偶校驗(yàn)


4)固定1校驗(yàn),校驗(yàn)位始終為1。


5)固定0校驗(yàn),校驗(yàn)位始終為0。


2.4停止位


停止位為高電平,表示數(shù)據(jù)傳輸結(jié)束。停止位長度為1-2位,可以選擇1、1.5或2位的時長。


與SPI和I2C相比,UART的協(xié)議要簡單很多,不需要時鐘同步信號。


圖片

I2C總線數(shù)據(jù)傳輸格式


UART也不需要應(yīng)答、仲裁等機(jī)制。


圖片

SPI通訊時序圖


3.通信實(shí)例


設(shè)置通信數(shù)據(jù)為8位,停止為1位,傳輸數(shù)據(jù)為0x25(00100101)時,數(shù)據(jù)傳輸時序如下圖所示:


圖片

0x25數(shù)據(jù)傳輸時序


這里要注意的是,UART的數(shù)據(jù)傳輸是低位LSB在前,所以時序圖中的數(shù)據(jù)順序是10100100。


4.小結(jié)


UART是異步串行通信,SPI和I2C總線是同步串行通信,UART和SPI是全雙工,I2C是半雙工。


與SPI和I2C相比,UART的接口簡單,不需要復(fù)雜的同步機(jī)制,對時序的要求比較低。它的通信速率不高,傳輸效率也不高,適合用于數(shù)據(jù)量不大,實(shí)時性要求不高的點(diǎn)對點(diǎn)的應(yīng)用場景,是一種簡單、經(jīng)濟(jì)、有效的串行通信方式。

分享到:
 
反對 0 舉報(bào) 0 收藏 0 評論 0
滬ICP備11026917號-25