UART:了解通用異步接收器或發(fā)送器的硬件通信協(xié)議
作者簡介:Eric Peňa,高級固件工程師。2019年4月加入ADI公司。畢業(yè)于馬尼拉亞當森大學,獲計算機工程學士學位。Eric之前曾在Technology Enabler Designer擔任固件工程師,還曾在Fujitsu Ten Solutions擔任系統(tǒng)工程師。聯(lián)系方式:eric.pena@analog.com。
本文引用地址:http://m.butianyuan.cn/article/202107/427250.htmMary Grace Legaspi,固件工程師。2018年9月加入ADI公司。畢業(yè)于塔拉克州立大學,獲電子工程學士學位。目前正在攻讀菲律賓大學管理碩士學位。聯(lián)系方式:mary.legaspi@analog.com。
摘要:正確配置后,UART可以配合許多不同類型的涉及發(fā)送和接收串行數據的串行協(xié)議工作。在串行通信中,數據通過單條線路或導線逐位傳輸。在雙向通信中,我們使用兩根導線來進行連續(xù)的串行數據傳輸。根據應用和系統(tǒng)要求,串行通信需要的電路和導線較少,可降低實現成本。
本文將討論使用UART的基本原則,重點是數據包傳輸、標準幀協(xié)議和定制幀協(xié)議;定制幀協(xié)議將是安全合規(guī)性方面的增值特性,尤其是在代碼開發(fā)期間。在產品開發(fā)過程中,本文還旨在分享一些基本步驟,以檢查數據表的實際使用。
最后,本文的目標是幫助更好地理解和遵循UART標準,以便最大程度地發(fā)揮其能力和應用優(yōu)勢,特別是在開發(fā)新產品時。
“溝通最大的問題在于,人們想當然地認為已經溝通了?!?/span>
——喬治·蕭伯納
通信協(xié)議在組織設備之間的通信時扮演著重要角色。它基于系統(tǒng)要求而以不同方式進行設計。此類協(xié)議具有特定的規(guī)則,為實現成功通信,不同設備都遵循該規(guī)則。嵌入式系統(tǒng)、微控制器和計算機大多將UART 作為設備間硬件通信協(xié)議的一種形式。在可用通信協(xié)議中,UART 的發(fā)送和接收端僅使用兩條線。盡管它是一種廣泛使用的硬件通信方法,但它并非在所有時候都是完全優(yōu)化的。在微控制器內部使用UART 模塊時,通常會忽略幀協(xié)議的適當實現。根據定義,UART 是一種硬件通信協(xié)議,以可配置的速度使用異步串行通信。異步意味著沒有時鐘信號來同步從發(fā)送設備進入接收端的輸出位[1-2]。
圖1 兩個UART彼此直接通信
接口
每個UART 設備的兩個信號分別命名為:發(fā)送器(Tx),接收器(Rx)(如圖1)。
每個設備的發(fā)送器和接收器線的主要作用是用于串行通信的串行數據的發(fā)送和接收。
圖2 帶數據總線的UART
發(fā)送UART 連接到以并行形式發(fā)送數據的控制數據總線。然后,數據將在傳輸線路(導線)上一位一位地串行傳輸到接收UART。反過來,對于接收設備,串行數據會被轉換為并行數據。UART 線用作發(fā)送和接收數據的通信介質。請注意,UART 設備具有專門用于發(fā)送或接收的發(fā)送和接收引腳。對于UART 和大多數串行通信,發(fā)送和接收設備需要將波特率設置為相同的值。波特率是指信息傳輸到信道的速率。對于串行端口,設定的波特率將用作每秒傳輸的最大位數。
表1 總結了關于UART 必須了解的幾點[3-4]。
UART 接口不使用時鐘信號來同步發(fā)送器和接收器設備,而是以異步方式傳輸數據。發(fā)送器根據其時鐘信號生成的位流取代了時鐘信號,接收器使用其內部時鐘信號對輸入數據進行采樣。同步點是通過兩個設備的相同波特率來管理的。如果波特率不同,發(fā)送和接收數據的時序可能會受影響,導致數據處理過程出現不一致。允許的波特率差異最大值為10%,超過此值,位的時序就會脫節(jié)。
數據傳輸
在UART 中,傳輸模式為數據包形式。連接發(fā)送器和接收器的機制包括串行數據包的創(chuàng)建和物理硬件線路的控制。數據包由起始位、數據幀、奇偶校驗位和停止位組成。
圖3 UART數據包
起始位
當不傳輸數據時,UART 數據傳輸線通常保持高電壓電平。若要開始數據傳輸,發(fā)送UART 會將傳輸線從高電平拉到低電平并保持1 個時鐘周期。當接收UART 檢測到高到低電壓躍遷時,便開始以波特率對應的頻率讀取數據幀中的位。
圖4 起始位
數據幀
數據幀包含所傳輸的實際數據。如果使用奇偶校驗位,數據幀長度可以是5~8 位。如果不使用奇偶校驗位,數據幀長度可以是9 位。在大多數情況下,數據以最低有效位優(yōu)先方式發(fā)送。
圖5 數據幀
奇偶校驗
奇偶性描述數字是偶數還是奇數。通過奇偶校驗位,接收UART 判斷傳輸期間是否有數據發(fā)生改變。電磁輻射、不一致的波特率或長距離數據傳輸都可能改變數據位。接收UART 讀取數據幀后,將計數值為1 的位,檢查總數是偶數還是奇數。如果奇偶校驗位為0(偶數奇偶校驗),則數據幀中的1 或邏輯高位總計應為偶數。如果奇偶校驗位為1(奇數奇偶校驗),則數據幀中的1 或邏輯高位總計應為奇數。當奇偶校驗位與數據匹配時,UART 認為傳輸未出錯。但是,如果奇偶校驗位為0,而總和為奇數,或者奇偶校驗位為1,而總和為偶數,則UART 認為數據幀中的位已改變。
圖6 奇偶校驗位
停止位
為了表示數據包結束,發(fā)送UART 將數據傳輸線從低電壓驅動到高電壓并保持1 到2 位時間。
圖7 停止位
UART傳輸步驟
第1 步:發(fā)送UART 從數據總線并行接收數據。
圖8 數據總線至發(fā)送UART
第2 步:發(fā)送UART 將起始位、奇偶校驗位和停止位添加到數據幀。
圖9 Tx側的UART數據幀
第3 步:從起始位到結束位,整個數據包以串行方式從發(fā)送UART 送至接收UART。接收UART 以預配置的波特率對數據線進行采樣。
圖10 UART傳輸
第4 步:接收UART 丟棄數據幀中的起始位、奇偶校驗位和停止位。
圖11 Rx側的UART數據幀
第5 步:接收UART 將串行數據轉換回并行數據,并將其傳輸到接收端的數據總線。
圖12 接收UART至數據總線
幀協(xié)議
UART 的一個關鍵特性是幀協(xié)議的實現,但還沒有被充分使用。其主要用途和重要性是為每臺設備提供安全和保護方面的增值。例如,當兩個設備使用相同的UART 幀協(xié)議時,有可能在沒有檢查配置的情況下連接到同一個UART,設備會連接到不同的引腳,這可能導致系統(tǒng)故障。
另一方面,實現幀協(xié)議可確保安全性,因為需要根據設計幀協(xié)議解析接收到的信息。每個幀協(xié)議都經過專門設計,以確保唯一性和安全性。在設計幀協(xié)議時,設計人員可以給不同設備設置期望的報頭和報尾(包括CRC)。在圖13 中,2 個字節(jié)被設置為報頭的一部分。
圖13 UART幀協(xié)議示例
根據示例,您可以給您的設備設置獨有的報頭、報尾和CRC。
報頭1(H1 為0×AB)和報頭2(H2 為0×CD)
報頭是確定您是否在與正確的設備通信的唯一標識符。
命令(CMD) 選擇
命令將取決于用于創(chuàng)建兩個設備之間通信的命令列表。
每個命令的數據長度(DL)
數據長度將取決于所選的命令。您可以根據所選的命令來使數據長度最大化,因此它會隨選擇而變化。
在這種情況下,數據長度可以調整。
數據n(可變數據)
數據是要從設備傳輸的有效載荷。
報尾1(T1 為0×E1)和報尾2(T2 為0×E2)
報尾是在傳輸結束后添加的數據。就像報頭一樣,報尾也可以唯一標識符。
循環(huán)冗余校驗(CRC 公式)
循環(huán)冗余校驗公式是一種附加的錯誤檢測模式,用于檢測原始數據是否發(fā)生意外更改。發(fā)送設備的CRC 值必須始終等于接收器端的CRC 計算值。
建議為每個UART 設備實現幀協(xié)議來增加安全性。
幀協(xié)議要求發(fā)送和接收設備使用相同的配置。
UART工作原理
使用任何硬件通信協(xié)議時,首先必須檢查數據手冊和硬件參考手冊。以下是要遵循的步驟:
第1 步:檢查設備的數據手冊接口。
圖14 微控制器數據手冊
第2 步:在存儲器映射下面檢查UART 地址。
圖15 微控制器存儲器映射
第3 步:檢查UART 端口的具體信息,例如工作模式、數據位長度、奇偶校驗位和停止位。
數據手冊中的UART 端口詳細信息示例:
UART端口
示例MCU 提供了一個全雙工UART 端口,其與PC 標準UART 完全兼容。UART 端口提供一個簡化的UART 接口用于連接其他外設或主機,支持全雙工、DMA 和異步串行數據傳輸。UART 端口支持5 到8個數據位,以及無校驗、偶校驗和奇校驗。幀由1?個或2 個停止位終止。
第4 步:檢查UART 操作的詳細信息,包括波特率計算。波特率通過以下示例公式進行配置。此公式隨微控制器而異。
UART 操作的詳細信息示例:
● 5~8 個數據位
● 1、2 或1 ? 個停止位
● 無、偶數或奇數奇偶校驗
● 可編程過采樣率為4、8、16、32
● 波特率=PCLK/((M + N/2048)×2OSR + 2×DIV
其中:
OSR(過采樣率)
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
第5 步:對于波特率,務必檢查要使用的外設時鐘(PCLK)。此示例有26 MHz PCLK 和16 MHz PCLK可用。請注意,OSR、DIV、DIVM和DIVN 隨設備而異。
第6 步:下一部分是檢查UART 配置的詳細寄存器。了解計算波特率時的參數,例如UART_LCR2、UART_DIV 和UART_FBR。表4 要列出所涉及的具體寄存器。
第7 步:檢查每個寄存器下的詳細信息,代入值以計算波特率,然后開始實現UART。
為何重要?
當開發(fā)穩(wěn)健的、質量驅動的產品時,熟悉UART通信協(xié)議非常有優(yōu)勢。知道如何僅使用兩條線發(fā)送數據,以及如何傳輸整個數據包或有效載荷,將有助于確保數據正確無誤地發(fā)送和接收。UART 是最常用的硬件通信協(xié)議,具備相關知識可以在將來的設計中實現設計靈活性。
用例
您可以將UART 用于許多應用,例如:
● 調試:在開發(fā)過程中及早發(fā)現系統(tǒng)錯誤很重要。添加UART 便可從系統(tǒng)捕捉消息,幫助排除錯誤。
● 制造功能級追蹤:日志在制造業(yè)中非常重要。通過日志可確定功能,提醒操作員生產線上正在發(fā)生的事情。
● 客戶更新:軟件更新非常重要。完整的動態(tài)硬件和支持更新的軟件對于擁有完整系統(tǒng)至關重要。
● 測試/ 驗證:在產品離開制造過程之前進行驗證有助于為客戶提供最優(yōu)質的產品。
參考文獻:
[1] UART通信基礎[Z].Electronics Hub,2017.
[2] CAMPBELL S.UART通信基礎[Z].電路基礎.
[3] KEIM R.回到基礎:通用異步接收器/發(fā)送器[Z].關于電路的一切,2016.
[4] 何為UART協(xié)議?UART通信闡釋[Z]. Arrow.
(本文來源于《電子產品世界》雜志2021年5月期)
評論