UART代表通用異步接收器/發(fā)射器。它不是像SPI和I2C那樣的通信協(xié)議,而是微控制器中的物理電路或獨(dú)立IC。UART的主要目的是發(fā)送和接收串行數(shù)據(jù)。
UART最好的事情之一是它只使用兩根線在設(shè)備之間傳輸數(shù)據(jù)。UART背后的原理很容易理解,但是如果您還沒有閱讀本系列的第一部分SPI通信協(xié)議的基礎(chǔ)知識(shí),那可能是一個(gè)很好的起點(diǎn)。
在UART通信中,兩個(gè)UART直接相互通信。發(fā)送UART將來自控制設(shè)備(如CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行形式,將其串行傳輸?shù)浇邮誙ART,然后UART將串行數(shù)據(jù)轉(zhuǎn)換回接收設(shè)備的并行數(shù)據(jù)。在兩個(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í),它開始以稱為波特率的特定頻率讀取傳入位。波特率是數(shù)據(jù)傳輸速度的度量,以每秒比特?cái)?shù)(bps)表示。兩個(gè) UART 必須以大約相同的波特率運(yùn)行。在位的時(shí)序偏離太遠(yuǎn)之前,發(fā)送和接收 UART 之間的波特率只能相差約 10%。
還必須將兩個(gè) UART 配置為傳輸和接收相同的數(shù)據(jù)包結(jié)構(gòu)。
將要傳輸數(shù)據(jù)的UART從數(shù)據(jù)總線接收數(shù)據(jù)。數(shù)據(jù)總線用于通過另一個(gè)設(shè)備(如CPU,內(nèi)存或微控制器)將數(shù)據(jù)發(fā)送到UART。數(shù)據(jù)以并行形式從數(shù)據(jù)總線傳輸?shù)絺鬏擴(kuò)ART。在發(fā)送UART從數(shù)據(jù)總線獲取并行數(shù)據(jù)后,它會(huì)添加一個(gè)起始位、一個(gè)奇偶校驗(yàn)位和一個(gè)停止位,從而創(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 個(gè)或 2 個(gè)停止位:
● 起始位
UART數(shù)據(jù)傳輸線在不傳輸數(shù)據(jù)時(shí)通常保持在高電壓水平。為了開始數(shù)據(jù)傳輸,發(fā)送UART將傳輸線從高電平拉到低電平一個(gè)時(shí)鐘周期。當(dāng)接收UART檢測到從高到低的電壓轉(zhuǎn)換時(shí),它開始以波特率的頻率讀取數(shù)據(jù)幀中的位。
● 數(shù)據(jù)框
數(shù)據(jù)框包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則長度可以是 5 位到 8 位。如果未使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以為 9 位。在大多數(shù)情況下,數(shù)據(jù)首先以最低有效位發(fā)送。
● 平價(jià)
奇偶校驗(yàn)描述數(shù)字的偶數(shù)或奇數(shù)。奇偶校驗(yàn)位是接收UART的一種方式,用于判斷在傳輸過程中是否有任何數(shù)據(jù)發(fā)生了變化。位可以通過電磁輻射、不匹配的波特率或長距離數(shù)據(jù)傳輸來改變。接收的UART讀取數(shù)據(jù)幀后,它會(huì)計(jì)算值為1的位數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù)。如果奇偶校驗(yàn)位為 0(偶數(shù)奇偶校驗(yàn)),則數(shù)據(jù)幀中的 1 位應(yīng)加起來為偶數(shù)。如果奇偶校驗(yàn)位為 1(奇數(shù)奇偶校驗(yàn)),則數(shù)據(jù)幀中的 1 位應(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ù)幀中的位已經(jīng)改變。
● 停止位
為了發(fā)出數(shù)據(jù)包結(jié)束的信號(hào),發(fā)送UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)到高壓至少兩個(gè)位持續(xù)時(shí)間。
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)
沒有一個(gè)通信協(xié)議是完美的,但UART非常擅長它們所做的事情。以下是一些優(yōu)缺點(diǎn),可幫助您確定它們是否符合項(xiàng)目的需求:
【優(yōu)點(diǎn)】
● 僅使用兩根電線
● 無需時(shí)鐘信號(hào)
● 具有奇偶校驗(yàn)位以允許錯(cuò)誤檢查
● 數(shù)據(jù)包的結(jié)構(gòu)可以更改,只要為它設(shè)置了兩端
● 記錄充分且廣泛使用的方法
【缺點(diǎn)】
● 數(shù)據(jù)幀的大小限制為最大 9 位
● 不支持多個(gè)從站或多個(gè)主系統(tǒng)
● 每個(gè)UART的波特率必須在彼此的10%以內(nèi)