還記得當(dāng)年的打印機(jī),鼠標(biāo)和調(diào)制解調(diào)器嗎?他們都有巨大笨重的連接器和粗電纜,并且必須擰到你的電腦上。這些設(shè)備正是使用UART協(xié)議與計(jì)算機(jī)進(jìn)行通信。
雖然USB幾乎完全取代了舊的電纜和連接器,但UART絕對(duì)沒(méi)有過(guò)時(shí)。你會(huì)發(fā)現(xiàn)目前許多項(xiàng)目中使用UART的GPS模塊、藍(lán)牙模塊和RFID讀卡器模塊等連接到Raspberry Pi,Arduino或其他微控制器上。
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸?shù)?a href="http://www.1cnz.cn/soft/special/" target="_blank">資料在串行通信與并行通信之間加以轉(zhuǎn)換。作為把并行輸入信號(hào)轉(zhuǎn)成串行輸出信號(hào)的芯片,UART通常被集成于其他通訊接口的連接上。
它不是像SPI和I2C這樣的通信協(xié)議,而是微控制器中獨(dú)立的物理電路或獨(dú)立的IC。
UART最好的一點(diǎn)是它只使用兩根線就可以在設(shè)備之間傳輸數(shù)據(jù),UART背后的原理很容易理解。
UART通信簡(jiǎn)介
在UART通信中,兩個(gè)UART直接相互通信。發(fā)送UART將來(lái)自CPU等控制設(shè)備的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,并將其串行發(fā)送到接收UART,接收UART然后將串行數(shù)據(jù)轉(zhuǎn)換回接收設(shè)備的并行數(shù)據(jù)。在兩個(gè)UART之間傳輸數(shù)據(jù)只需要兩根線。數(shù)據(jù)從發(fā)送UART的Tx引腳流向接收UART的Rx引腳:
UART以異步方式發(fā)送數(shù)據(jù),這意味著沒(méi)有時(shí)鐘信號(hào)將發(fā)送UART的位輸出與接收UART的位采樣同步。發(fā)送UART不是時(shí)鐘信號(hào),而是將開(kāi)始和停止位添加到正在傳輸?shù)臄?shù)據(jù)包中。這些位定義數(shù)據(jù)包的開(kāi)始和結(jié)束,因此接收UART知道何時(shí)開(kāi)始讀取位。
當(dāng)接收UART檢測(cè)到起始位時(shí),它開(kāi)始以稱為波特率的特定頻率讀取輸入位。波特率是數(shù)據(jù)傳輸速度的度量,以每秒位數(shù)(bps)表示。兩個(gè)UART必須以大致相同的波特率運(yùn)行。發(fā)送和接收UART之間的波特率只能相差10%左右。
兩個(gè)UART還必須配置為發(fā)送和接收相同的數(shù)據(jù)包結(jié)構(gòu)。
UART如何工作
UART傳輸數(shù)據(jù)依靠的是UART總線,數(shù)據(jù)總線用于通過(guò)CPU、存儲(chǔ)器或微控制器等其他設(shè)備將數(shù)據(jù)發(fā)送到UART。數(shù)據(jù)以并行形式從數(shù)據(jù)總線傳輸發(fā)送到UART。UART從數(shù)據(jù)總線獲得并行數(shù)據(jù)之后,它將添加起始位,奇偶校驗(yàn)位和停止位,從而創(chuàng)建數(shù)據(jù)包。接下來(lái),數(shù)據(jù)包在Tx引腳上逐位串行輸出。UART接收端則在其Rx引腳上逐位讀取數(shù)據(jù)包。然后,接收UART將數(shù)據(jù)轉(zhuǎn)換回并行形式,并刪除起始位,奇偶校驗(yàn)位和停止位。最后,接收UART將數(shù)據(jù)包并行傳輸?shù)浇邮斩说臄?shù)據(jù)總線:
UART傳輸?shù)臄?shù)據(jù)被組織成數(shù)據(jù)包。每個(gè)數(shù)據(jù)包包含1個(gè)起始位,5到9個(gè)數(shù)據(jù)位(取決于UART),可選的奇偶校驗(yàn)位以及1或2個(gè)停止位:
1
開(kāi)始位
當(dāng)UART數(shù)據(jù)傳輸線不傳輸數(shù)據(jù)時(shí),它通常保持在高電壓電平。為了開(kāi)始數(shù)據(jù)傳輸,發(fā)送UART將傳輸線從高電平拉至低電平一個(gè)時(shí)鐘周期。當(dāng)接收UART檢測(cè)到高電壓到低電壓轉(zhuǎn)換時(shí),它開(kāi)始以波特率的頻率讀取數(shù)據(jù)幀中的位。
2
數(shù)據(jù)框
數(shù)據(jù)框包含要傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則它可以是5位到8位長(zhǎng)。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀可以是9位長(zhǎng)。在大多數(shù)情況下,數(shù)據(jù)首先以最低有效位發(fā)送。
3
奇偶校驗(yàn)位
奇偶校驗(yàn)描述數(shù)字的均勻性或奇數(shù)。奇偶校驗(yàn)位是接收UART在傳輸過(guò)程中判斷是否有任何數(shù)據(jù)發(fā)生變化的一種方法。電磁輻射、不匹配的波特率或長(zhǎng)距離傳輸時(shí),數(shù)據(jù)都有可能發(fā)生變化。接收UART讀取數(shù)據(jù)幀后,它會(huì)計(jì)算值為1的位數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù)。
如果奇偶校驗(yàn)位為0(偶校驗(yàn)),則數(shù)據(jù)幀中的1位應(yīng)總計(jì)為偶數(shù)。如果奇偶校驗(yàn)位是1(奇校驗(yàn)),則數(shù)據(jù)幀中的1位應(yīng)總計(jì)為奇數(shù)。當(dāng)奇偶校驗(yàn)位與數(shù)據(jù)匹配時(shí),UART知道傳輸沒(méi)有錯(cuò)誤。但如果奇偶校驗(yàn)位為0,然而1位應(yīng)總計(jì)為奇數(shù);或者奇偶校驗(yàn)位是1,并且1位應(yīng)總計(jì)是偶數(shù),則數(shù)據(jù)幀中的位已經(jīng)改變。
4
停止位
為了通知傳輸數(shù)據(jù)包的結(jié)束,UART發(fā)送端會(huì)將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)至高電壓至少兩位持續(xù)時(shí)間。
UART傳輸步驟
1)發(fā)送UART從數(shù)據(jù)總線并行接收數(shù)據(jù)↓↓
2)發(fā)送UART將起始位,奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)幀↓↓
3)整個(gè)數(shù)據(jù)包從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)先配置的波特率對(duì)數(shù)據(jù)線進(jìn)行采樣↓↓
4)接收UART丟棄數(shù)據(jù)幀中的起始位,奇偶校驗(yàn)位和停止位↓↓
5)接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線↓↓
UART的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):只使用兩根電線;不需要時(shí)鐘信號(hào);有一個(gè)奇偶校驗(yàn)位;只要雙方設(shè)置后,就可以改變數(shù)據(jù)包的結(jié)構(gòu);有完整的文檔并且具有廣泛的使用。
缺點(diǎn):數(shù)據(jù)幀的大小限制為最多9位;不支持多個(gè)從屬或多個(gè)主系統(tǒng);每個(gè)UART的波特率必須在10%之內(nèi)。
責(zé)任編輯:lq
-
連接器
+關(guān)注
關(guān)注
98文章
14476瀏覽量
136430 -
調(diào)制解調(diào)器
+關(guān)注
關(guān)注
3文章
854瀏覽量
38803 -
串口通信
+關(guān)注
關(guān)注
34文章
1624瀏覽量
55508
原文標(biāo)題:還沒(méi)搞懂串口通信?一文帶你讀懂
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論