24小時(shí)聯(lián)系電話(huà):18217114652、13661815404
中文
行業(yè)資訊
了解UART串口通信
UART,即通用異步接收器-發(fā)送器,是最常用的設備到設備通信協(xié)議之一。本文介紹如何通過(guò)遵循標準過(guò)程將UART用作硬件通信協(xié)議。
正確配置后,UART可以使用許多不同類(lèi)型的串行協(xié)議,這些協(xié)議涉及發(fā)送和接收串行數據。在串行通信中,使用一條線(xiàn)或一條線(xiàn)一點(diǎn)一點(diǎn)地傳輸數據。在雙向通信中,我們使用兩根線(xiàn)來(lái)成功進(jìn)行串行數據傳輸。根據應用和系統要求,串行通信需要較少的電路和電線(xiàn),從而降低了實(shí)施成本。
在本文中,我們將討論使用UART時(shí)的基本原理,重點(diǎn)是數據包傳輸,標準幀協(xié)議和自定義幀協(xié)議,這些協(xié)議是實(shí)現時(shí)(特別是在代碼開(kāi)發(fā)期間)安全合規性的增值功能。在產(chǎn)品開(kāi)發(fā)過(guò)程中,本文檔還旨在在檢查數據表中的實(shí)際用法時(shí)共享一些基本步驟。
在本文的最后,目標是更好地理解和遵守UART標準,以最大程度地發(fā)揮其功能和應用程序,特別是在開(kāi)發(fā)新產(chǎn)品時(shí)。
通信協(xié)議在組織設備之間的通信中扮演著(zhù)重要角色。它根據系統要求以不同的方式進(jìn)行設計,并且這些協(xié)議具有在設備之間達成一致以實(shí)現成功通信的特定規則。
嵌入式系統,微控制器和計算機大多使用UART作為設備到設備硬件通信協(xié)議的一種形式。在可用的通信協(xié)議中,UART僅使用兩條線(xiàn)作為其發(fā)送和接收端。
盡管它是硬件通信協(xié)議的一種廣泛使用的方法,但并非一直都在對其進(jìn)行完全優(yōu)化。在微控制器內部使用UART模塊時(shí),通常會(huì )忽略幀協(xié)議的正確實(shí)現。
根據定義,UART是一種硬件通信協(xié)議,它以可配置的速度使用異步串行通信。異步意味著(zhù)沒(méi)有時(shí)鐘信號來(lái)同步從發(fā)送設備到接收端的輸出位。
接口
每個(gè)UART設備的兩個(gè)信號分別命名為:
發(fā)射器(Tx)
接收器(Rx)
每個(gè)設備的發(fā)送器和接收器線(xiàn)的主要目的是發(fā)送和接收用于串行通信的串行數據。
圖2.帶有數據總線(xiàn)的UART。
發(fā)送UART連接到以并行形式發(fā)送數據的控制數據總線(xiàn)。由此,數據現在將在傳輸線(xiàn)(導線(xiàn))上一點(diǎn)一點(diǎn)地串行傳輸到接收UART。反過(guò)來(lái),這會(huì )將串行數據轉換為接收設備的并行數據。
UART線(xiàn)用作通信介質(zhì),以將一個(gè)數據發(fā)送到另一個(gè)。請注意,UART器件具有專(zhuān)用于發(fā)送或接收的發(fā)送和接收引腳。
對于UART和大多數串行通信,需要在發(fā)送和接收設備上將波特率設置為相同。波特率是信息傳輸到通信信道的速率。在串行端口環(huán)境中,設置的波特率將用作每秒傳輸的最大位數。
表1總結了我們必須了解的UART。
表1. UART摘要
電線(xiàn) |
2 |
速度 |
9600、19200、38400、57600、115200、230400、460800、921600、1000000、1500000 |
傳播方式 |
異步 |
碩士總數 |
1個(gè) |
最大從站數 |
1個(gè) |
UART接口不使用時(shí)鐘信號來(lái)同步發(fā)送器和接收器設備。它異步傳輸數據。當接收器使用其內部時(shí)鐘信號采樣輸入數據時(shí),發(fā)送器將根據其時(shí)鐘信號生成比特流,而不是時(shí)鐘信號。通過(guò)在兩個(gè)設備上具有相同的波特率來(lái)管理同步點(diǎn)。否則可能會(huì )影響發(fā)送和接收數據的時(shí)間,從而導致數據處理過(guò)程中的差異。在位的時(shí)序變得太遠之前,波特率的允許差異最大為10%。
資料傳輸
在UART中,傳輸模式為數據包形式。連接發(fā)送器和接收器的部分包括創(chuàng )建串行數據包并控制這些物理硬件線(xiàn)路。數據包由起始位,數據幀,奇偶校驗位和停止位組成。
圖3. UART數據包。
起始位
UART數據傳輸線(xiàn)通常在不傳輸數據時(shí)保持在高電壓電平。為了開(kāi)始數據傳輸,發(fā)送UART在一(1)個(gè)時(shí)鐘周期內將傳輸線(xiàn)從高電平拉低到低電平。當接收UART檢測到高電壓到低電壓轉換時(shí),它開(kāi)始以波特率的頻率讀取數據幀中的位。
圖4.起始位。
數據框
數據幀包含正在傳輸的實(shí)際數據。如果使用奇偶校驗位,則可以是五(5)位,最多八(8)位。如果不使用奇偶校驗位,則數據幀的長(cháng)度可以為九(9)位。在大多數情況下,數據首先以最低有效位發(fā)送。
圖5.數據框。
平價(jià)
奇偶性描述數字的偶數或奇數。奇偶校驗位是接收UART判斷傳輸期間是否有任何數據更改的方式??梢酝ㄟ^(guò)電磁輻射,不匹配的波特率或長(cháng)距離數據傳輸來(lái)更改位。
接收UART讀取數據幀后,它將對值為1的位數進(jìn)行計數,并檢查總數是偶數還是奇數。如果奇偶校驗位為0(偶數奇偶校驗),則數據幀中的1或邏輯高位應總計為偶數。如果奇偶校驗位為1(奇校驗),則數據幀中的1位或邏輯高電平應總計為奇數。
當奇偶校驗位與數據匹配時(shí),UART知道傳輸沒(méi)有錯誤。但是,如果奇偶校驗位為0,總和為奇數,或者奇偶校驗位為1,總和為偶數,則UART知道數據幀中的位已更改。
圖6.奇偶校驗位。
停止位
為了向數據包的結尾發(fā)出信號,發(fā)送UART將數據傳輸線(xiàn)從低電壓驅動(dòng)到高電壓持續一(1)到兩(2)位。
圖7.停止位。
UART傳輸步驟
首先:發(fā)送UART從數據總線(xiàn)并行接收數據。
圖8.到發(fā)送UART的數據總線(xiàn)。
第二:發(fā)送UART將起始位,奇偶校驗位和停止位添加到數據幀。
圖9. Tx端的UART數據幀。
第三:從發(fā)送UART的起始位到停止位,整個(gè)數據包從發(fā)送UART到接收UART依次發(fā)送。接收UART以預配置的波特率對數據線(xiàn)進(jìn)行采樣。
圖10. UART傳輸。
第四:接收UART丟棄數據幀中的起始位,奇偶校驗位和停止位。
圖11. Rx側的UART數據幀。
第五:接收UART將串行數據轉換回并行數據,并將其傳輸到接收端的數據總線(xiàn)。
圖12.接收UART到數據總線(xiàn)。
框架協(xié)議
UART中可用但尚未完全使用的一項關(guān)鍵功能是幀協(xié)議的實(shí)現。其主要用途和重要性是每臺設備的安全性和保護性的附加值。
例如,當兩個(gè)設備使用相同的UART幀協(xié)議時(shí),有一種趨勢是,在不檢查配置的情況下連接到同一UART時(shí),該設備將連接到不同的引腳,這可能會(huì )導致系統故障。
另一方面,由于需要根據設計框架協(xié)議解析接收到的信息,因此實(shí)現此操作可確保安全性。每個(gè)幀協(xié)議都經(jīng)過(guò)專(zhuān)門(mén)設計,以確保唯一性和安全性。
在設計幀協(xié)議時(shí),設計人員可以將所需的標頭和標頭(包括CRC)設置到不同的設備。在圖13中,將兩(2)個(gè)字節設置為標頭的一部分。
第二:在內存映射下,檢查UART地址。
圖13.示例UART幀協(xié)議。
根據示例,您可以設置設備獨有的標頭,尾部和CRC。
標頭1(H1為0xAB)和標頭2(H2為0xCD)
標頭是確定您是否與之通信的唯一標識符
正確的設備。
命令(CMD)選擇
命令將取決于旨在創(chuàng )建兩個(gè)設備之間的通信的命令列表。
每個(gè)命令的數據長(cháng)度(DL)
數據長(cháng)度將基于所選命令。您可以根據所選擇的命令來(lái)最大化數據長(cháng)度,因此它可以根據選擇而變化。在這種情況下,可以調整數據長(cháng)度。
數據n(變化數據)
數據是要從設備傳輸的有效負載。
尾部1(T1為0xE1)和尾部2(T2為0xE2)
尾部是在傳輸結束后添加的數據。就像標題一樣,它們可以唯一地標識。
循環(huán)冗余校驗(CRC公式)
循環(huán)冗余校驗公式是一種附加的錯誤檢測模式,用于檢測原始數據的意外更改。發(fā)送設備的CRC值必須始終等于接收器端的CRC計算值。
建議通過(guò)為每個(gè)UART設備實(shí)現幀協(xié)議來(lái)增加安全性。幀協(xié)議在發(fā)送和接收設備上都需要相同的配置。
UART操作
使用任何硬件通信協(xié)議時(shí),必須先閱讀數據表和硬件參考手冊。
以下是要遵循的步驟:
首先:檢查設備的數據表接口。
圖15.微處理器內存映射。
第三:檢查UART端口的詳細信息,例如操作模式,數據位長(cháng)度,奇偶校驗位和停止位。數據手冊中的示例UART端口詳細信息:
UART端口
示例MCU提供了一個(gè)全雙工UART端口,該端口與PC標準UART完全兼容。UART端口為其他外圍設備或主機提供了簡(jiǎn)化的UART接口,支持全雙工,DMA和串行數據的異步傳輸。UART端口支持五到八個(gè)數據位,無(wú)奇偶校驗。幀以一個(gè)半或兩個(gè)停止位終止。
第四:檢查UART操作細節,包括波特率計算。波特率使用以下示例公式配置。該公式因微控制器而異。
UART操作的示例詳細信息:
5至8個(gè)數據位
1、2或1和?個(gè)停止位
無(wú),甚至奇偶校驗
可編程過(guò)采樣率分別為4,8,16,32
波特率= PCLK /(((M + N / 2048)×2 OSR + 2 ×DIV
哪里,
OSR(過(guò)采樣率)
UART_LCR2.OSR = 0至3
DIV(波特率分頻器)
UART_DIV = 1至65535
M(DIVM分數波特率M)
UART_FBR.DIVM = 1至3
N(DIVM分數波特率M)
UART_FBR.DIVN = 0至2047
第五:關(guān)于波特率,請確保檢查要使用的外設時(shí)鐘(PCLK)。在此示例中,有26 MHz PCLK和16 MHz PCLK可用。請注意,OSR,DIV,DIVM和DIVN隨設備而異。
表2.基于26 MHz PCLK的波特率示例
波特率 |
OSR |
DIV |
虛擬機 |
迪文 |
9600 |
3 |
24 |
3 |
1078 |
115200 |
3 |
4 |
1個(gè) |
1563 |
表3.基于16 MHz PCLK的波特率示例
波特率 |
OSR |
DIV |
虛擬機 |
迪文 |
9600 |
3 |
17 |
3 |
1078 |
115200 |
3 |
2 |
2 |
348 |
第六:下一部分是檢查UART配置的詳細寄存器??匆幌掠嬎悴ㄌ芈蕰r(shí)的參數,例如UART_LCR2,UART_DIV和UART_FBR。表4將列出一個(gè)特定的寄存器。
表4. UART寄存器說(shuō)明
名稱(chēng) |
描述 |
UART_DIV |
波特率分頻器 |
UART_FIBR |
小數波特率 |
UART_LCR2 |
二線(xiàn)控制 |
第七:在每個(gè)寄存器下,檢查詳細信息并用值替代波特率,然后開(kāi)始實(shí)現UART。
它為什么如此重要?
在開(kāi)發(fā)強大的,質(zhì)量驅動(dòng)的產(chǎn)品時(shí),熟悉UART通信協(xié)議非常有幫助。知道如何僅使用兩條線(xiàn)發(fā)送數據,以及如何傳輸整包數據或有效載荷,將有助于確保正確無(wú)誤地傳輸和接收數據。由于UART是最常用的硬件通信協(xié)議,因此該知識可以在將來(lái)的設計中實(shí)現設計靈活性。
用例
您可以將UART用于許多應用程序,例如:
調試:在開(kāi)發(fā)過(guò)程中及早發(fā)現系統錯誤很重要。在這種情況下,添加UART可以通過(guò)捕獲系統消息來(lái)提供幫助。
制造功能級別跟蹤:日志在制造中非常重要。他們通過(guò)提醒操作員生產(chǎn)線(xiàn)上正在發(fā)生的事情來(lái)確定功能。
客戶(hù)或客戶(hù)更新:軟件更新非常重要。具有完整的,具有可更新功能的軟件的動(dòng)態(tài)硬件對于擁有完整的系統至關(guān)重要。
測試/驗證:在產(chǎn)品離開(kāi)制造過(guò)程之前對其進(jìn)行驗證有助于為客戶(hù)提供最優(yōu)質(zhì)的產(chǎn)品。