作者:Eric Peňa and Mary Grace Legaspi
UART或通用異步接收器-發(fā)射器是最常用的設(shè)備到設(shè)備通信協(xié)議之一。本文介紹如何按照標(biāo)準(zhǔn)過程將 UART 用作硬件通信協(xié)議。
正確配置后,UART可以使用許多不同類型的串行協(xié)議,這些協(xié)議涉及發(fā)送和接收串行數(shù)據(jù)。在串行通信中,數(shù)據(jù)使用單線或電線逐位傳輸。在雙向通信中,我們使用兩條線進(jìn)行成功的串行數(shù)據(jù)傳輸。根據(jù)應(yīng)用和系統(tǒng)要求,串行通信需要較少的電路和電線,從而降低了實(shí)施成本。
在本文中,我們將討論使用 UART 時(shí)的基本原則,重點(diǎn)是數(shù)據(jù)包傳輸、標(biāo)準(zhǔn)幀協(xié)議和自定義幀協(xié)議,這些協(xié)議在實(shí)現(xiàn)時(shí)(尤其是在代碼開發(fā)期間)是安全合規(guī)性的增值功能。在產(chǎn)品開發(fā)過程中,本文檔還旨在分享在檢查數(shù)據(jù)手冊(cè)的實(shí)際使用情況時(shí)的一些基本步驟。
在文章的最后,目標(biāo)是更好地理解和遵守UART標(biāo)準(zhǔn),以最大限度地提高功能和應(yīng)用,特別是在開發(fā)新產(chǎn)品時(shí)。
“溝通中最大的一個(gè)問題是它已經(jīng)發(fā)生的錯(cuò)覺。
——蕭伯納
通信協(xié)議在組織設(shè)備之間的通信方面起著重要作用。它根據(jù)系統(tǒng)要求以不同的方式設(shè)計(jì),并且這些協(xié)議具有設(shè)備之間商定的特定規(guī)則以實(shí)現(xiàn)成功的通信。
嵌入式系統(tǒng)、微控制器和計(jì)算機(jī)大多使用UART作為設(shè)備到設(shè)備硬件通信協(xié)議的一種形式。在可用的通信協(xié)議中,UART僅使用兩根電線作為其發(fā)送端和接收端。
盡管它是一種廣泛使用的硬件通信協(xié)議方法,但它并沒有一直完全優(yōu)化。在微控制器內(nèi)部使用UART模塊時(shí),通常會(huì)忽略幀協(xié)議的正確實(shí)現(xiàn)。
根據(jù)定義,UART是一種硬件通信協(xié)議,它使用具有可配置速度的異步串行通信。異步意味著沒有時(shí)鐘信號(hào)來同步從發(fā)送設(shè)備到接收端的輸出位。
圖1.兩個(gè)UART直接相互通信。
每個(gè)UART設(shè)備的兩個(gè)信號(hào)被命名為:
發(fā)射器(發(fā)射)
接收器(接收)
每個(gè)設(shè)備的發(fā)射器和接收器線的主要目的是發(fā)送和接收用于串行通信的串行數(shù)據(jù)。
圖2.帶數(shù)據(jù)總線的UART。
發(fā)送UART連接到以并行形式發(fā)送數(shù)據(jù)的控制數(shù)據(jù)總線。由此,數(shù)據(jù)現(xiàn)在將在傳輸線(線)上串行地一點(diǎn)一點(diǎn)地傳輸?shù)浇邮誙ART。反過來,這將把串行數(shù)據(jù)轉(zhuǎn)換為接收設(shè)備的并行數(shù)據(jù)。
UART線路用作向另一個(gè)數(shù)據(jù)發(fā)送和接收數(shù)據(jù)的通信介質(zhì)。請(qǐng)注意,UART設(shè)備具有專用于發(fā)送或接收的發(fā)送和接收引腳。
對(duì)于UART和大多數(shù)串行通信,需要在發(fā)送和接收設(shè)備上設(shè)置相同的波特率。波特率是信息傳輸?shù)酵ㄐ磐ǖ赖乃俾?。在串?a target="_blank">端口上下文中,設(shè)置的波特率將用作每秒要傳輸?shù)淖畲笪粩?shù)。
表1總結(jié)了我們必須了解的有關(guān)UART的知識(shí)。
電線 | 2 |
速度 | 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000, 1500000 |
傳輸方法 | 異步 |
最大母版數(shù)量 | 1 |
最大從屬數(shù)量 | 1 |
UART接口不使用時(shí)鐘信號(hào)來同步發(fā)射器和接收器設(shè)備;它異步傳輸數(shù)據(jù)。發(fā)射器不是時(shí)鐘信號(hào),而是基于其時(shí)鐘信號(hào)生成比特流,而接收器則使用其內(nèi)部時(shí)鐘信號(hào)對(duì)傳入數(shù)據(jù)進(jìn)行采樣。通過在兩個(gè)設(shè)備上具有相同的波特率來管理同步點(diǎn)。否則可能會(huì)影響發(fā)送和接收數(shù)據(jù)的時(shí)間,從而導(dǎo)致數(shù)據(jù)處理過程中出現(xiàn)差異。波特率的允許差異高達(dá)10%,在位的時(shí)序偏離太遠(yuǎn)之前。
數(shù)據(jù)傳輸
在UART中,傳輸模式是數(shù)據(jù)包的形式。連接發(fā)射器和接收器的部分包括創(chuàng)建串行數(shù)據(jù)包并控制這些物理硬件線路。數(shù)據(jù)包由起始位、數(shù)據(jù)幀、奇偶校驗(yàn)位和停止位組成。
圖3.UART 數(shù)據(jù)包。
起始位
UART數(shù)據(jù)傳輸線在不傳輸數(shù)據(jù)時(shí)通常保持在高電壓電平。為了開始數(shù)據(jù)傳輸,發(fā)射UART將傳輸線從高到低拉一(1)個(gè)時(shí)鐘周期。當(dāng)接收UART檢測(cè)到高低壓轉(zhuǎn)換時(shí),它開始以波特率的頻率讀取數(shù)據(jù)幀中的位。
圖4.起始位。
數(shù)據(jù)框
數(shù)據(jù)框包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,它可以是五 (5) 位,最多八 (8) 位長。如果未使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以是九 (9) 位。在大多數(shù)情況下,數(shù)據(jù)首先以最低有效位發(fā)送。
圖5.數(shù)據(jù)框。
平價(jià)
奇偶校驗(yàn)描述了一個(gè)數(shù)字的偶數(shù)或奇數(shù)。奇偶校驗(yàn)位是接收UART判斷傳輸過程中是否有任何數(shù)據(jù)更改的一種方式。位可以通過電磁輻射、不匹配的波特率或長距離數(shù)據(jù)傳輸來改變。
接收UART讀取數(shù)據(jù)幀后,計(jì)算值為1的位數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù)。如果奇偶校驗(yàn)位為 0(偶數(shù)奇偶校驗(yàn)),則數(shù)據(jù)幀中的 1 或邏輯高位的總和應(yīng)為偶數(shù)。如果奇偶校驗(yàn)位為 1(奇偶校驗(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ù)框中的位已更改。
圖6.奇偶校驗(yàn)位。
停止位
為了發(fā)出數(shù)據(jù)包結(jié)束的信號(hào),發(fā)送UART將數(shù)據(jù)傳輸線從低壓驅(qū)動(dòng)到高壓,持續(xù)時(shí)間為一(1)到兩(2)位。
圖7.停止位。
UART傳輸?shù)牟襟E
第一:發(fā)送UART從數(shù)據(jù)總線并行接收數(shù)據(jù)。
圖8.數(shù)據(jù)總線到發(fā)送UART。
第二:發(fā)送UART將起始位、奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)幀中。
圖9.Tx 側(cè)的 UART 數(shù)據(jù)幀。
第三:整個(gè)數(shù)據(jù)包從起始位到停止位從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)配置的波特率對(duì)數(shù)據(jù)線進(jìn)行采樣。
圖 10.UART傳輸。
第四:接收UART丟棄數(shù)據(jù)框中的起始位、奇偶校驗(yàn)位和停止位。
圖 11.接收端的 UART 數(shù)據(jù)框。
第五:接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線。
圖 12.接收UART到數(shù)據(jù)總線。
幀協(xié)議
UART中可用但尚未完全使用的一個(gè)關(guān)鍵功能是幀協(xié)議的實(shí)現(xiàn)。這樣做的主要用途和重要性是為每個(gè)設(shè)備的安全性和保護(hù)增加值。
例如,當(dāng)兩個(gè)設(shè)備使用相同的UART幀協(xié)議時(shí),有一種趨勢(shì)是,當(dāng)連接到同一UART而不檢查配置時(shí),設(shè)備將連接到可能導(dǎo)致系統(tǒng)故障的不同引腳。
另一方面,實(shí)現(xiàn)這一點(diǎn)可確保安全性,因?yàn)樾枰鶕?jù)設(shè)計(jì)框架協(xié)議解析收到的信息。每個(gè)幀協(xié)議都經(jīng)過專門設(shè)計(jì),具有唯一性和安全性。
在設(shè)計(jì)幀協(xié)議時(shí),設(shè)計(jì)人員可以為不同的設(shè)備設(shè)置所需的標(biāo)頭和尾部,包括CRC。在圖 13 中,將兩 (2) 個(gè)字節(jié)設(shè)置為標(biāo)頭的一部分。
第二:在內(nèi)存映射下,檢查UART地址。
圖 13.示例 UART 幀協(xié)議。
根據(jù)示例,可以設(shè)置設(shè)備唯一的標(biāo)頭、尾部和 CRC。
標(biāo)頭 1(H1 為 0xAB)和標(biāo)頭 2(H2 為 0xCD)
標(biāo)頭是確定您是否與正確的設(shè)備通信的唯一標(biāo)識(shí)符。
命令 (CMD) 選擇
命令將取決于旨在創(chuàng)建兩個(gè)設(shè)備之間通信的命令列表。
每個(gè)命令的數(shù)據(jù)長度 (DL)
數(shù)據(jù)長度將基于所選的命令。您可以根據(jù)所選命令最大化數(shù)據(jù)長度,因此數(shù)據(jù)長度會(huì)因選擇而異。在這種情況下,可以調(diào)整數(shù)據(jù)長度。
數(shù)據(jù) n(可變數(shù)據(jù))
數(shù)據(jù)是要從設(shè)備傳輸?shù)挠行ж?fù)載。
拖車 1(T1 為 0xE1)和拖車 2(T2 為 0xE2)
拖車是在傳輸結(jié)束后添加的數(shù)據(jù)。就像標(biāo)頭一樣,它們可以被唯一標(biāo)識(shí)。
循環(huán)冗余校驗(yàn)(CRC公式)
循環(huán)冗余檢查公式是一種附加的錯(cuò)誤檢測(cè)模式,用于檢測(cè)對(duì)原始數(shù)據(jù)的意外更改。發(fā)射設(shè)備的CRC值必須始終等于接收端的CRC計(jì)算。
建議通過為每個(gè)UART設(shè)備實(shí)現(xiàn)幀協(xié)議來增加安全性。幀協(xié)議在發(fā)送和接收設(shè)備上需要相同的配置。
UART操作
使用任何硬件通信協(xié)議時(shí),查看數(shù)據(jù)手冊(cè)和硬件參考手冊(cè)是先決條件。
以下是要遵循的步驟:
首先:檢查器件的數(shù)據(jù)手冊(cè)接口。
圖 15.微控制器內(nèi)存圖。
第三:檢查UART端口的具體細(xì)節(jié),如操作模式、數(shù)據(jù)位長度、奇偶校驗(yàn)位和停止位。數(shù)據(jù)表中的示例UART端口詳細(xì)信息:UART端口
示例MCU提供全雙工UART端口,該端口與PC標(biāo)準(zhǔn)UART完全兼容。UART 端口為其他外設(shè)或主機(jī)提供簡化的 UART 接口,支持串行數(shù)據(jù)的全雙工、DMA 和異步傳輸。UART 端口包括對(duì) 5 到 8 個(gè)數(shù)據(jù)位的支持,以及無奇偶校驗(yàn)、偶數(shù)奇偶校驗(yàn)或奇偶校驗(yàn)。幀終止一個(gè)半或兩個(gè)停止位。
第四:檢查UART操作細(xì)節(jié),包括波特率計(jì)算。波特率使用以下示例公式進(jìn)行配置。此公式因微控制器而異。
UART 操作的示例詳細(xì)信息:
5 至 8 個(gè)數(shù)據(jù)位
1、2 或 1 和 1/2 停止位
無,偶數(shù)或奇偶校驗(yàn)
可編程過采樣率 4、8、16、32
波特率 = PCLK/((M + N/2048) × 2OSR + 2×
哪里
OSR(過采樣率)
UART_LCR2。OSR = 0 到 3
DIV(波特率分頻器)
UART_DIV = 1 到 65535
M (DIVM 分?jǐn)?shù)波特率 M)
UART_FBR。DIVM = 1 到 3
N(DIVM 分?jǐn)?shù)波特率 M)
UART_FBR。DIVN = 0 到 2047
第五:對(duì)于波特率,請(qǐng)務(wù)必檢查要使用的外設(shè)時(shí)鐘(PCLK)。在本例中,有一個(gè) 26 MHz PCLK 和 16 MHz PCLK 可用。請(qǐng)注意,OSR、DIV、DIVM 和 DIVN 因設(shè)備而異。
波特率 | OSR | DIV | 迪姆 | 迪文 |
9600 | 3 | 24 | 3 | 1078 |
115200 | 3 | 4 | 1 | 1563 |
波特率 | OSR | DIV | 迪姆 | 迪文 |
9600 | 3 | 17 | 3 | 1078 |
115200 | 3 | 2 | 2 | 348 |
第六:下一部分是檢查UART配置的詳細(xì)寄存器。查看計(jì)算波特率的參數(shù),例如UART_LCR2、UART_DIV和UART_FBR。表4將引出一個(gè)特定的寄存器來覆蓋。
名字 | 描述 |
UART_DIV | 波特率分頻器 |
UART_FIBR | 分?jǐn)?shù)波特率 |
UART_LCR2 | 二線控制 |
第七:在每個(gè)寄存器下,檢查詳細(xì)信息并替換值以計(jì)算波特率,然后開始實(shí)施UART。
為什么它很重要?
在開發(fā)穩(wěn)健、質(zhì)量驅(qū)動(dòng)的產(chǎn)品時(shí),熟悉UART通信協(xié)議是有利的。了解如何僅使用兩條線發(fā)送數(shù)據(jù),以及如何傳輸整個(gè)數(shù)據(jù)包或有效載荷,將有助于確保數(shù)據(jù)傳輸和接收無誤。由于UART是最常用的硬件通信協(xié)議,因此這些知識(shí)可以在未來的設(shè)計(jì)中實(shí)現(xiàn)設(shè)計(jì)靈活性。
使用案例
您可以將UART用于許多應(yīng)用程序,例如:
調(diào)試:在開發(fā)過程中及早檢測(cè)系統(tǒng)錯(cuò)誤非常重要。在這種情況下,添加 UART 可以通過從系統(tǒng)捕獲消息來幫助。
制造功能級(jí)跟蹤:日志在制造中非常重要。它們通過提醒操作員生產(chǎn)線上發(fā)生的情況來確定功能。
客戶或客戶端更新:軟件更新非常重要。擁有完整的動(dòng)態(tài)硬件和支持更新的軟件對(duì)于擁有完整的系統(tǒng)非常重要。
測(cè)試/驗(yàn)證:在產(chǎn)品離開制造過程之前對(duì)其進(jìn)行驗(yàn)證有助于向客戶提供最優(yōu)質(zhì)的產(chǎn)品。
審核編輯:郭婷
-
接收器
+關(guān)注
關(guān)注
15文章
2561瀏覽量
73372 -
發(fā)射器
+關(guān)注
關(guān)注
6文章
875瀏覽量
54248 -
uart
+關(guān)注
關(guān)注
22文章
1265瀏覽量
103236
發(fā)布評(píng)論請(qǐng)先 登錄
UART:了解通用異步接收器/發(fā)送器的硬件通信協(xié)議

通用異步接收器/發(fā)送器(UART)
通用異步接收器/發(fā)送器(UART)
單片機(jī)常用的通信協(xié)議有哪些
單片機(jī)常用的通信協(xié)議有哪幾種呢
基于射頻/無線系統(tǒng)的發(fā)射器與接收器的基本測(cè)試
通用異步收發(fā)器UART的工作原理及協(xié)議格式
討論使用UART通信協(xié)議的基本原則
微控制器通信協(xié)議之UART技術(shù)

TL28L92 3.3V/5V雙通道通用異步接收器/發(fā)射器數(shù)據(jù)表

評(píng)論