我是靠谱客的博主 神勇汉堡,最近开发中收集的这篇文章主要介绍通用异步接收器/发送器(UART)——发送与接收,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

图1.带数据总线的UART

UART代表通用异步接收器/发送器。它不是像SPI和I2C这样的通信协议,而是微控制器中的物理电路或独立的IC。UART的主要目的是发送和接收串行数据。关于UART最好的一点是其仅使用两条线在设备之间传输数据。

图2.两个UART彼此直接通信 

UART异步传输数据意味着没有时钟信号使发送UART的输出位与接收UART采样位同步。发送UART取代了时钟信号,将开始位和停止位添加到正在传输的数据包中。这些位定义了数据包的开始和结束,因此接收UART知道何时开始读取这些位。当接收UART检测到起始位时,它将开始以称为波特率的特定频率读取输入位。波特率是数据传输速度的度量,以每秒的比特位(bps)表示。两个UART必须以大约相同的波特率工作。在位的时序变得太远之前,发送和接收UART之间的波特率只能相差约10%。另外,还必须将两个UART配置为发送和接收相同的数据包结构。

数据传输

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

图3.UART数据包

起始位

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

图4.起始位

数据帧

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

图5.数据帧

奇偶校验

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

图6.奇偶校验位

停止位

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

图7.停止位

UART传输步骤

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

图8.数据总线至发送UART

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

图9.Tx侧的UART数据帧

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

图10.UART传输

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

图11.Rx侧的UART数据帧

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

图12.接收UART至数据总线

帧协议

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

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

图13.UART帧协议示例

报头1(H1为0xAB)和报头2(H2为0xCD)

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

命令(CMD)选择

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

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

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

数据n(可变数据)

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

报尾1(T1为0xE1)和报尾2(T2为0xE2)

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

循环冗余校验(CRC公式)

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

建议为每个UART设备实现帧协议来增加安全性。帧协议要求发送和接收设备使用相同的配置。

最后

以上就是神勇汉堡为你收集整理的通用异步接收器/发送器(UART)——发送与接收的全部内容,希望文章能够帮你解决通用异步接收器/发送器(UART)——发送与接收所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部