還記得打印機(jī)、鼠標(biāo)和調(diào)制解調(diào)器曾經(jīng)使用粗線和笨重連接器嗎?那些必須擰進(jìn)電腦里的連接器?這些設(shè)備很可能使用 UART 與電腦通信。雖然 USB 幾乎完全取代了那些老式的線纜和連接器,但 UART 絕非過時(shí)之物。你會(huì)發(fā)現(xiàn) UART 在許多 DIY 電子項(xiàng)目中被用于將GPS 模塊 、 藍(lán)牙模塊和 RFID 讀卡器模塊連接到你的 Raspberry Pi、Arduino 或其他微控制器。
UART 是通用異步收發(fā)器 (Universal Asynchronous Receiver/Transmitter) 的縮寫。它并非像 SPI 和 I2C 那樣的通信協(xié)議,而是微控制器中的物理電路或獨(dú)立 IC。UART 的主要用途是發(fā)送和接收串行數(shù)據(jù)。
UART 的優(yōu)點(diǎn)之一是它僅使用兩根線即可在設(shè)備之間傳輸數(shù)據(jù)。UART 的原理很容易理解,但如果您還沒有閱讀過本系列的第一部分“SPI 通信協(xié)議基礎(chǔ)知識(shí)”,那么這部分或許是一個(gè)不錯(cuò)的入門指南。
UART 通信簡介
在 UART 通信中,兩個(gè) UART 直接相互通信。發(fā)送端 UART 將來自控制設(shè)備(例如 CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并以串行方式傳輸?shù)浇邮斩?UART,接收端 UART 隨后將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),以供接收設(shè)備使用。兩個(gè) UART 之間僅需兩根線即可傳輸數(shù)據(jù)。數(shù)據(jù)從發(fā)送端 UART 的 Tx 引腳流向接收端 UART 的 Rx 引腳:

UART 異步傳輸數(shù)據(jù),這意味著沒有時(shí)鐘信號(hào)來同步發(fā)送端 UART 的位輸出和接收端 UART 的位采樣。發(fā)送端 UART 不使用時(shí)鐘信號(hào),而是在正在傳輸?shù)臄?shù)據(jù)包中添加起始位和停止位。這些位定義了數(shù)據(jù)包的開始和結(jié)束,以便接收端 UART 知道何時(shí)開始讀取位。
當(dāng)接收 UART 檢測到起始位時(shí),它會(huì)開始以特定頻率(稱為波特率)讀取輸入位。 波特率是數(shù)據(jù)傳輸速度的度量,以比特/秒 (bps) 表示。 兩個(gè) UART 必須以大致相同的波特率工作。發(fā)送和接收 UART 之間的波特率只能相差約 10%,否則會(huì)導(dǎo)致位時(shí)序偏差過大。
兩個(gè) UART 還必須配置為發(fā)送和接收相同的數(shù)據(jù)包結(jié)構(gòu)。

UART 的工作原理
即將發(fā)送數(shù)據(jù)的 UART 從數(shù)據(jù)總線接收數(shù)據(jù)。數(shù)據(jù)總線用于將數(shù)據(jù)從其他設(shè)備(例如 CPU、內(nèi)存或微控制器)發(fā)送到 UART。數(shù)據(jù)以并行形式從數(shù)據(jù)總線傳輸?shù)桨l(fā)送端 UART。發(fā)送端 UART 從數(shù)據(jù)總線獲取并行數(shù)據(jù)后,會(huì)添加起始位、奇偶校驗(yàn)位和停止位,從而創(chuàng)建數(shù)據(jù)包。接下來,數(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)、一個(gè)可選的奇偶校驗(yàn)位以及 1 或 2 個(gè)停止位:

起始位
UART 數(shù)據(jù)傳輸線在不傳輸數(shù)據(jù)時(shí)通常保持高電平。為了開始傳輸數(shù)據(jù),發(fā)送端 UART 會(huì)將傳輸線從高電平拉低一個(gè)時(shí)鐘周期。當(dāng)接收端 UART 檢測到電壓從高電平到低電平的轉(zhuǎn)換時(shí),它會(huì)開始以波特率的頻率讀取數(shù)據(jù)幀中的位。
數(shù)據(jù)框
數(shù)據(jù)幀包含實(shí)際傳輸?shù)臄?shù)據(jù)。如果使用奇偶校驗(yàn)位,數(shù)據(jù)幀的長度可以為 5 位到 8 位。如果不使用奇偶校驗(yàn)位,數(shù)據(jù)幀的長度可以為 9 位。大多數(shù)情況下,數(shù)據(jù)會(huì)先發(fā)送最低有效位。
奇偶校驗(yàn)位
奇偶校驗(yàn)描述數(shù)字的奇偶性。奇偶校驗(yàn)位是接收 UART 判斷數(shù)據(jù)在傳輸過程中是否發(fā)生變化的一種方式。位可能會(huì)因電磁輻射、波特率不匹配或長距離數(shù)據(jù)傳輸而發(fā)生變化。接收 UART 讀取數(shù)據(jù)幀后,會(huì)計(jì)算值為 1 的位數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù)。如果奇偶校驗(yàn)位為 0(偶校驗(yàn)),則數(shù)據(jù)幀中“1”的位數(shù)總數(shù)應(yīng)為偶數(shù)。如果奇偶校驗(yàn)位為 1(奇校驗(yàn)),則數(shù)據(jù)幀中“1”的位數(shù)總數(shù)應(yīng)為奇數(shù)。當(dāng)奇偶校驗(yàn)位與數(shù)據(jù)匹配時(shí),UART 便知道傳輸沒有錯(cuò)誤。但如果奇偶校驗(yàn)位為 0,且總數(shù)為奇數(shù);或者奇偶校驗(yàn)位為 1,且總數(shù)為偶數(shù),則 UART 便知道數(shù)據(jù)幀中的位已發(fā)生變化。
停止位
為了發(fā)出數(shù)據(jù)包結(jié)束的信號(hào),發(fā)送方 UART 將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)至高電壓,持續(xù)至少兩個(gè)位持續(xù)時(shí)間。
UART 發(fā)送步驟
1、發(fā)送端 UART 從數(shù)據(jù)總線并行接收數(shù)據(jù):

2、發(fā)送方 UART 將起始位、奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)幀:

3、整個(gè)數(shù)據(jù)包從發(fā)送端 UART 串行發(fā)送到接收端 UART。接收端 UART 以預(yù)先配置的波特率對數(shù)據(jù)線進(jìn)行采樣:

4、接收 UART 丟棄數(shù)據(jù)幀中的起始位、奇偶校驗(yàn)位和停止位:

5、接收 UART 將串行數(shù)據(jù)轉(zhuǎn)換回并行,并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:

UART 的優(yōu)點(diǎn)和缺點(diǎn)
沒有完美的通信協(xié)議,但 UART 在這方面表現(xiàn)相當(dāng)出色。以下是一些優(yōu)缺點(diǎn),可幫助您確定它們是否適合您的項(xiàng)目需求:
優(yōu)勢
僅使用兩根電線
無需時(shí)鐘信號(hào)
具有奇偶校驗(yàn)位以允許錯(cuò)誤檢查
數(shù)據(jù)包的結(jié)構(gòu)可以改變,只要雙方都設(shè)置好
有據(jù)可查且廣泛使用的方法
缺點(diǎn)
數(shù)據(jù)幀的大小限制為最大9位
不支持多個(gè)從系統(tǒng)或多個(gè)主系統(tǒng)
每個(gè) UART 的波特率必須彼此相差 10% 以內(nèi)
繼續(xù)閱讀本系列的第三部分 “I2C 通信協(xié)議基礎(chǔ)知識(shí)” ,了解電子設(shè)備的另一種通信方式。如果您還沒有閱讀過,可以先閱讀第一部分 “SPI 通信協(xié)議基礎(chǔ)知識(shí)” 。
和往常一樣,如果您有任何問題或其他補(bǔ)充,請?jiān)谠u論區(qū)告訴我們!如果您喜歡這篇文章,并希望看到更多類似的文章,請務(wù)必關(guān)我們!
-
收發(fā)器
+關(guān)注
關(guān)注
10文章
3793瀏覽量
110510 -
uart
+關(guān)注
關(guān)注
22文章
1304瀏覽量
106056 -
串口通信
+關(guān)注
關(guān)注
34文章
1657瀏覽量
57603
發(fā)布評論請先 登錄
【FPGA設(shè)計(jì)實(shí)例】用JTAG讓你的FPGA玩出新花樣
如何把手中的這顆LED燈玩出新花樣
uart是什么意思?認(rèn)識(shí)uart串口
串口通信的原理,IO口模擬UART串口通信
用vivoNEX雙屏版玩游戲怎么樣
UART串口通信軟件推薦
單片機(jī)IO口模擬UART串口通信

UART 串口通信還能玩出什么花樣?
評論