新闻中心

EEPW首页>模拟技术>设计应用> UART:了解通用异步接收器或发送器的硬件通信协议

UART:了解通用异步接收器或发送器的硬件通信协议

作者:Eric Pena,Mary Grace Legaspi (ADI消费者软件工程部门 设计与布局团队,菲律宾甲米地) 时间:2021-07-30 来源:电子产品世界 收藏
编者按:UART,即通用异步接收器或发送器,是最常用的设备间通信协议之一。本文将UART用作硬件通信协议应遵循的标准步骤进行说明。

作者简介:Eric Peňa,高级固件工程师。2019年4月加入ADI公司。毕业于马尼拉亚当森大学,获计算机工程学士学位。Eric之前曾在Technology Enabler Designer担任固件工程师,还曾在Fujitsu Ten Solutions担任系统工程师。联系方式:eric.pena@analog.com。

本文引用地址://m.amcfsurvey.com/article/202107/427250.htm

Mary Grace Legaspi,固件工程师。2018年9月加入ADI公司。毕业于塔拉克州立大学,获电子工程学士学位。目前正在攻读菲律宾大学管理硕士学位。联系方式:mary.legaspi@analog.com。

摘要:正确配置后,可以配合许多不同类型的涉及发送和接收串行数据的串行协议工作。在串行通信中,数据通过单条线路或导线逐位传输。在双向通信中,我们使用两根导线来进行连续的串行数据传输。根据应用和系统要求,串行通信需要的电路和导线较少,可降低实现成本。

本文将讨论使用的基本原则,重点是数据包传输、标准帧协议和定制帧协议;定制帧协议将是安全合规性方面的增值特性,尤其是在代码开发期间。在产品开发过程中,本文还旨在分享一些基本步骤,以检查数据表的实际使用。

最后,本文的目标是帮助更好地理解和遵循标准,以便最大程度地发挥其能力和应用优势,特别是在开发新产品时。


“沟通最大的问题在于,人们想当然地认为已经沟通了。”

——乔治·萧伯纳

在组织设备之间的通信时扮演着重要角色。它基于系统要求而以不同方式进行设计。此类协议具有特定的规则,为实现成功通信,不同设备都遵循该规则。嵌入式系统、微控制器和计算机大多将UART 作为设备间的一种形式。在可用中,UART 的发送和接收端仅使用两条线。尽管它是一种广泛使用的通信方法,但它并非在所有时候都是完全优化的。在微控制器内部使用UART 模块时,通常会忽略帧协议的适当实现。根据定义,UART 是一种通信协议,以可配置的速度使用异步串行通信。异步意味着没有时钟信号来同步从发送设备进入接收端的输出位[1-2]

1628563284836376.png

图1 两个UART彼此直接通信

接口

每个UART 设备的两个信号分别命名为:发送器(Tx),接收器(Rx)(如图1)。

每个设备的发送器和接收器线的主要作用是用于串行通信的串行数据的发送和接收。

1628563072532887.png

图2 带数据总线的UART

发送UART 连接到以并行形式发送数据的控制数据总线。然后,数据将在传输线路(导线)上一位一位地串行传输到接收UART。反过来,对于接收设备,串行数据会被转换为并行数据。UART 线用作发送和接收数据的通信介质。请注意,UART 设备具有专门用于发送或接收的发送和接收引脚。对于UART 和大多数串行通信,发送和接收设备需要将波特率设置为相同的值。波特率是指信息传输到信道的速率。对于串行端口,设定的波特率将用作每秒传输的最大位数。

表1 总结了关于UART 必须了解的几点[3-4]

1628563169261292.png

UART 接口不使用时钟信号来同步发送器和接收器设备,而是以异步方式传输数据。发送器根据其时钟信号生成的位流取代了时钟信号,接收器使用其内部时钟信号对输入数据进行采样。同步点是通过两个设备的相同波特率来管理的。如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。允许的波特率差异最大值为10%,超过此值,位的时序就会脱节。

数据传输

在UART 中,传输模式为数据包形式。连接发送器和接收器的机制包括串行数据包的创建和物理硬件线路的控制。数据包由起始位、数据帧、奇偶校验位和停止位组成。

1628563348571679.png

图3 UART数据包

起始位

当不传输数据时,UART 数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。当接收UART 检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。

1628563411310364.png

图4 起始位

数据帧

数据帧包含所传输的实际数据。如果使用奇偶校验位,数据帧长度可以是5~8 位。如果不使用奇偶校验位,数据帧长度可以是9 位。在大多数情况下,数据以最低有效位优先方式发送。

1628563468315060.png

图5 数据帧

奇偶校验

奇偶性描述数字是偶数还是奇数。通过奇偶校验位,接收UART 判断传输期间是否有数据发生改变。电磁辐射、不一致的波特率或长距离数据传输都可能改变数据位。接收UART 读取数据帧后,将计数值为1 的位,检查总数是偶数还是奇数。如果奇偶校验位为0(偶数奇偶校验),则数据帧中的1 或逻辑高位总计应为偶数。如果奇偶校验位为1(奇数奇偶校验),则数据帧中的1 或逻辑高位总计应为奇数。当奇偶校验位与数据匹配时,UART 认为传输未出错。但是,如果奇偶校验位为0,而总和为奇数,或者奇偶校验位为1,而总和为偶数,则UART 认为数据帧中的位已改变。

1628563574762508.png

图6 奇偶校验位

停止位

为了表示数据包结束,发送UART 将数据传输线从低电压驱动到高电压并保持1 到2 位时间。

1628563634582174.png

图7 停止位

UART传输步骤

第1 步:发送UART 从数据总线并行接收数据。

1628563702508126.png

图8 数据总线至发送UART

第2 步:发送UART 将起始位、奇偶校验位和停止位添加到数据帧。

1628563854122520.png

图9 Tx侧的UART数据帧

第3 步:从起始位到结束位,整个数据包以串行方式从发送UART 送至接收UART。接收UART 以预配置的波特率对数据线进行采样。

1628563904954840.png

图10 UART传输

第4 步:接收UART 丢弃数据帧中的起始位、奇偶校验位和停止位。

1628563967595719.png

图11 Rx侧的UART数据帧

第5 步:接收UART 将串行数据转换回并行数据,并将其传输到接收端的数据总线。

1628564015404222.png

图12 接收UART至数据总线

帧协议

UART 的一个关键特性是帧协议的实现,但还没有被充分使用。其主要用途和重要性是为每台设备提供安全和保护方面的增值。例如,当两个设备使用相同的UART 帧协议时,有可能在没有检查配置的情况下连接到同一个UART,设备会连接到不同的引脚,这可能导致系统故障。

另一方面,实现帧协议可确保安全性,因为需要根据设计帧协议解析接收到的信息。每个帧协议都经过专门设计,以确保唯一性和安全性。在设计帧协议时,设计人员可以给不同设备设置期望的报头和报尾(包括CRC)。在图13 中,2 个字节被设置为报头的一部分。

1628564083112836.png

图13 UART帧协议示例

根据示例,您可以给您的设备设置独有的报头、报尾和CRC。

报头1(H1 为0×AB)和报头2(H2 为0×CD)

报头是确定您是否在与正确的设备通信的唯一标识符。

命令(CMD) 选择

命令将取决于用于创建两个设备之间通信的命令列表。

每个命令的数据长度(DL)

数据长度将取决于所选的命令。您可以根据所选的命令来使数据长度最大化,因此它会随选择而变化。

在这种情况下,数据长度可以调整。

数据n(可变数据)

数据是要从设备传输的有效载荷。

报尾1(T1 为0×E1)和报尾2(T2 为0×E2)

报尾是在传输结束后添加的数据。就像报头一样,报尾也可以唯一标识符。

循环冗余校验(CRC 公式)

循环冗余校验公式是一种附加的错误检测模式,用于检测原始数据是否发生意外更改。发送设备的CRC 值必须始终等于接收器端的CRC 计算值。

建议为每个UART 设备实现帧协议来增加安全性。

帧协议要求发送和接收设备使用相同的配置。

UART工作原理

使用任何硬件通信协议时,首先必须检查数据手册和硬件参考手册。以下是要遵循的步骤:

第1 步:检查设备的数据手册接口。

1628564265748260.png

图14 微控制器数据手册

第2 步:在存储器映射下面检查UART 地址。

1628564321701143.png

图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 随设备而异。

1628564515900201.png

第6 步:下一部分是检查UART 配置的详细寄存器。了解计算波特率时的参数,例如UART_LCR2、UART_DIV 和UART_FBR。表4 要列出所涉及的具体寄存器。

1628564577231262.png

第7 步:检查每个寄存器下的详细信息,代入值以计算波特率,然后开始实现UART。

为何重要?

当开发稳健的、质量驱动的产品时,熟悉UART通信协议非常有优势。知道如何仅使用两条线发送数据,以及如何传输整个数据包或有效载荷,将有助于确保数据正确无误地发送和接收。UART 是最常用的硬件通信协议,具备相关知识可以在将来的设计中实现设计灵活性。

用例

您可以将UART 用于许多应用,例如:

● 调试:在开发过程中及早发现系统错误很重要。添加UART 便可从系统捕捉消息,帮助排除错误。

● 制造功能级追踪:日志在制造业中非常重要。通过日志可确定功能,提醒操作员生产线上正在发生的事情。

● 客户更新:软件更新非常重要。完整的动态硬件和支持更新的软件对于拥有完整系统至关重要。

● 测试/ 验证:在产品离开制造过程之前进行验证有助于为客户提供最优质的产品。

参考文献:

[1] UART通信基础[Z].Electronics Hub,2017.

[2] CAMPBELL S.UART通信基础[Z].电路基础.

[3] KEIM R.回到基础:通用异步接收器/发送器[Z].关于电路的一切,2016.

[4] 何为UART协议?UART通信阐释[Z]. Arrow.

(本文来源于《电子产品世界》杂志2021年5月期)



评论


相关推荐

技术专区

关闭