還記得當(dāng)年的打印機,鼠標(biāo)和調(diào)制解調(diào)器嗎?他們都有巨大笨重的連接器和粗電纜,并且必須擰到你的電腦上。這些設(shè)備正是使用 UART 協(xié)議與計算機進(jìn)行通信。雖然 USB 幾乎完全取代了舊的電纜和連接器,但 UART 絕對沒有過時。您會發(fā)現(xiàn)目前許多項目中使用 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)換。作為把并行輸入信號轉(zhuǎn)成串行輸出信號的芯片,UART 通常被集成于其他通訊接口的連結(jié)上。
它不是像 SPI 和 I2C 這樣的通信協(xié)議,而是微控制器中獨立的物理電路或獨立的 IC。
UART 最好的一點是它只使用兩根線就可以在設(shè)備之間傳輸數(shù)據(jù),UART 背后的原理很容易理解。
UART 通信簡介
在 UART 通信中,兩個 UART 直接相互通信。發(fā)送 UART 將來自 CPU 等控制設(shè)備的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,并將其串行發(fā)送到接收 UART,接收 UART 然后將串行數(shù)據(jù)轉(zhuǎn)換回接收設(shè)備的并行數(shù)據(jù)。在兩個 UART 之間傳輸數(shù)據(jù)只需要兩根線。數(shù)據(jù)從發(fā)送 UART 的 Tx 引腳流向接收 UART 的 Rx 引腳:
UART 以異步方式發(fā)送數(shù)據(jù),這意味著沒有時鐘信號將發(fā)送 UART 的位輸出與接收 UART 的位采樣同步。發(fā)送 UART 不是時鐘信號,而是將開始和停止位添加到正在傳輸?shù)臄?shù)據(jù)包中。這些位定義數(shù)據(jù)包的開始和結(jié)束,因此接收 UART 知道何時開始讀取位。
當(dāng)接收 UART 檢測到起始位時,它開始以稱為波特率的特定頻率讀取輸入位。波特率是數(shù)據(jù)傳輸速度的度量,以每秒位數(shù)(bps)表示。兩個 UART 必須以大致相同的波特率運行。發(fā)送和接收 UART 之間的波特率只能相差 10%左右。
兩個 UART 還必須配置為發(fā)送和接收相同的數(shù)據(jù)包結(jié)構(gòu)。
UART 如何工作
UART 傳輸數(shù)據(jù)依靠的是 UART 總線,數(shù)據(jù)總線用于通過 CPU,存儲器或微控制器等其他設(shè)備將數(shù)據(jù)發(fā)送到 UART。數(shù)據(jù)以并行形式從數(shù)據(jù)總線傳輸?shù)桨l(fā)送 UART。在發(fā)送 UART 從數(shù)據(jù)總線獲得并行數(shù)據(jù)之后,它將添加起始位,奇偶校驗位和停止位,從而創(chuàng)建數(shù)據(jù)包。接下來,數(shù)據(jù)包在 Tx 引腳上逐位串行輸出。UART 接收端則在其 Rx 引腳上逐位讀取數(shù)據(jù)包。然后,接收 UART 將數(shù)據(jù)轉(zhuǎn)換回并行形式,并刪除起始位,奇偶校驗位和停止位。最后,接收 UART 將數(shù)據(jù)包并行傳輸?shù)浇邮斩说臄?shù)據(jù)總線:
UART 傳輸?shù)臄?shù)據(jù)被組織成數(shù)據(jù)包。每個數(shù)據(jù)包包含 1 個起始位,5 到 9 個數(shù)據(jù)位(取決于 UART),可選的奇偶校驗位以及 1 或 2 個停止位:
開始位
當(dāng) UART 數(shù)據(jù)傳輸線不傳輸數(shù)據(jù)時,它通常保持在高電壓電平。為了開始數(shù)據(jù)傳輸,發(fā)送 UART 將傳輸線從高電平拉至低電平一個時鐘周期。當(dāng)接收 UART 檢測到高電壓到低電壓轉(zhuǎn)換時,它開始以波特率的頻率讀取數(shù)據(jù)幀中的位。
數(shù)據(jù)框
數(shù)據(jù)框包含要傳輸?shù)膶嶋H數(shù)據(jù)。如果使用奇偶校驗位,則它可以是 5 位到 8 位長。如果不使用奇偶校驗位,則數(shù)據(jù)幀可以是 9 位長。在大多數(shù)情況下,數(shù)據(jù)首先以最低有效位發(fā)送。
奇偶校驗位
奇偶校驗描述數(shù)字的均勻性或奇數(shù)。奇偶校驗位是接收 UART 在傳輸過程中判斷是否有任何數(shù)據(jù)發(fā)生變化的一種方法。電磁輻射、不匹配的波特率或長距離傳輸時,數(shù)據(jù)都有可能發(fā)生變化。接收 UART 讀取數(shù)據(jù)幀后,它會計算值為 1 的位數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù)。如果奇偶校驗位為 0(偶校驗),則數(shù)據(jù)幀中的 1 位應(yīng)總計為偶數(shù)。如果奇偶校驗位是 1(奇校驗),則數(shù)據(jù)幀中的 1 位應(yīng)總計為奇數(shù)。當(dāng)奇偶校驗位與數(shù)據(jù)匹配時,UART 知道傳輸沒有錯誤。但如果奇偶校驗位為 0,然而 1 位應(yīng)總計為奇數(shù);或者奇偶校驗位是 1,并且 1 位應(yīng)總計是偶數(shù),則數(shù)據(jù)幀中的位已經(jīng)改變。
停止位
為了通知傳輸數(shù)據(jù)包的結(jié)束,UART 發(fā)送端會將數(shù)據(jù)傳輸線從低電壓驅(qū)動至高電壓至少兩位持續(xù)時間。
UART 傳輸步驟
1. 發(fā)送 UART 從數(shù)據(jù)總線并行接收數(shù)據(jù):
2. 發(fā)送 UART 將起始位,奇偶校驗位和停止位添加到數(shù)據(jù)幀:
3. 整個數(shù)據(jù)包從發(fā)送 UART 串行發(fā)送到接收 UART。接收 UART 以預(yù)先配置的波特率對數(shù)據(jù)線進(jìn)行采樣:
4. 接收 UART 丟棄數(shù)據(jù)幀中的起始位,奇偶校驗位和停止位:
5. 接收 UART 將串行數(shù)據(jù)轉(zhuǎn)換回并行并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:
UART 的優(yōu)點和缺點
沒有任何一種通信協(xié)議是完美的,以下是一些優(yōu)點和缺點,可幫助您確定它們是否符合您項目的需求:
優(yōu)點
只使用兩根電線
不需要時鐘信號
有一個奇偶校驗位
只要雙方設(shè)置后,就可以改變數(shù)據(jù)包的結(jié)構(gòu)
有完整的文檔并且具有廣泛的使用
缺點
數(shù)據(jù)幀的大小限制為最多 9 位
不支持多個從屬或多個主系統(tǒng)
每個 UART 的波特率必須在 10%之內(nèi)
審核編輯:符乾江
-
電路
+關(guān)注
關(guān)注
172文章
5901瀏覽量
172135 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101354
發(fā)布評論請先 登錄
相關(guān)推薦
評論