作者:Eric Peňa and Mary Grace Legaspi
UART或通用异步接收器-发射器是最常用的设备到设备通信协议之一。本文介绍如何按照标准过程将 UART 用作硬件通信协议。
正确配置后,UART可以使用许多不同类型的串行协议,这些协议涉及发送和接收串行数据。在串行通信中,数据使用单线或电线逐位传输。在双向通信中,我们使用两条线进行成功的串行数据传输。根据应用和系统要求,串行通信需要较少的电路和电线,从而降低了实施成本。
在本文中,我们将讨论使用 UART 时的基本原则,重点是数据包传输、标准帧协议和自定义帧协议,这些协议在实现时(尤其是在代码开发期间)是安全合规性的增值功能。在产品开发过程中,本文档还旨在分享在检查数据手册的实际使用情况时的一些基本步骤。
在文章的最后,目标是更好地理解和遵守UART标准,以最大限度地提高功能和应用,特别是在开发新产品时。
“沟通中最大的一个问题是它已经发生的错觉。
——萧伯纳
通信协议在组织设备之间的通信方面起着重要作用。它根据系统要求以不同的方式设计,并且这些协议具有设备之间商定的特定规则以实现成功的通信。
嵌入式系统、微控制器和计算机大多使用UART作为设备到设备硬件通信协议的一种形式。在可用的通信协议中,UART仅使用两根电线作为其发送端和接收端。
尽管它是一种广泛使用的硬件通信协议方法,但它并没有一直完全优化。在微控制器内部使用UART模块时,通常会忽略帧协议的正确实现。
根据定义,UART是一种硬件通信协议,它使用具有可配置速度的异步串行通信。异步意味着没有时钟信号来同步从发送设备到接收端的输出位。
图1.两个UART直接相互通信。
每个UART设备的两个信号被命名为:
发射器(发射)
接收器(接收)
每个设备的发射器和接收器线的主要目的是发送和接收用于串行通信的串行数据。
图2.带数据总线的UART。
发送UART连接到以并行形式发送数据的控制数据总线。由此,数据现在将在传输线(线)上串行地一点一点地传输到接收UART。反过来,这将把串行数据转换为接收设备的并行数据。
UART线路用作向另一个数据发送和接收数据的通信介质。请注意,UART设备具有专用于发送或接收的发送和接收引脚。
对于UART和大多数串行通信,需要在发送和接收设备上设置相同的波特率。波特率是信息传输到通信通道的速率。在串行端口上下文中,设置的波特率将用作每秒要传输的最大位数。
表1总结了我们必须了解的有关UART的知识。
电线 | 2 |
速度 | 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000, 1500000 |
传输方法 | 异步 |
最大母版数量 | 1 |
最大从属数量 | 1 |
UART接口不使用时钟信号来同步发射器和接收器设备;它异步传输数据。发射器不是时钟信号,而是基于其时钟信号生成比特流,而接收器则使用其内部时钟信号对传入数据进行采样。通过在两个设备上具有相同的波特率来管理同步点。否则可能会影响发送和接收数据的时间,从而导致数据处理过程中出现差异。波特率的允许差异高达10%,在位的时序偏离太远之前。
数据传输
在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.接收端的 UART 数据框。
第五:接收UART将串行数据转换回并行数据,并将其传输到接收端的数据总线。
图 12.接收UART到数据总线。
帧协议
UART中可用但尚未完全使用的一个关键功能是帧协议的实现。这样做的主要用途和重要性是为每个设备的安全性和保护增加值。
例如,当两个设备使用相同的UART帧协议时,有一种趋势是,当连接到同一UART而不检查配置时,设备将连接到可能导致系统故障的不同引脚。
另一方面,实现这一点可确保安全性,因为需要根据设计框架协议解析收到的信息。每个帧协议都经过专门设计,具有唯一性和安全性。
在设计帧协议时,设计人员可以为不同的设备设置所需的标头和尾部,包括CRC。在图 13 中,将两 (2) 个字节设置为标头的一部分。
第二:在内存映射下,检查UART地址。
图 13.示例 UART 帧协议。
根据示例,可以设置设备唯一的标头、尾部和 CRC。
标头 1(H1 为 0xAB)和标头 2(H2 为 0xCD)
标头是确定您是否与正确的设备通信的唯一标识符。
命令 (CMD) 选择
命令将取决于旨在创建两个设备之间通信的命令列表。
每个命令的数据长度 (DL)
数据长度将基于所选的命令。您可以根据所选命令最大化数据长度,因此数据长度会因选择而异。在这种情况下,可以调整数据长度。
数据 n(可变数据)
数据是要从设备传输的有效负载。
拖车 1(T1 为 0xE1)和拖车 2(T2 为 0xE2)
拖车是在传输结束后添加的数据。就像标头一样,它们可以被唯一标识。
循环冗余校验(CRC公式)
循环冗余检查公式是一种附加的错误检测模式,用于检测对原始数据的意外更改。发射设备的CRC值必须始终等于接收端的CRC计算。
建议通过为每个UART设备实现帧协议来增加安全性。帧协议在发送和接收设备上需要相同的配置。
UART操作
使用任何硬件通信协议时,查看数据手册和硬件参考手册是先决条件。
以下是要遵循的步骤:
首先:检查器件的数据手册接口。
图 15.微控制器内存图。
第三:检查UART端口的具体细节,如操作模式、数据位长度、奇偶校验位和停止位。数据表中的示例UART端口详细信息:UART端口
示例MCU提供全双工UART端口,该端口与PC标准UART完全兼容。UART 端口为其他外设或主机提供简化的 UART 接口,支持串行数据的全双工、DMA 和异步传输。UART 端口包括对 5 到 8 个数据位的支持,以及无奇偶校验、偶数奇偶校验或奇偶校验。帧终止一个半或两个停止位。
第四:检查UART操作细节,包括波特率计算。波特率使用以下示例公式进行配置。此公式因微控制器而异。
UART 操作的示例详细信息:
5 至 8 个数据位
1、2 或 1 和 1/2 停止位
无,偶数或奇偶校验
可编程过采样率 4、8、16、32
波特率 = PCLK/((M + N/2048) × 2OSR + 2×
哪里
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
第五:对于波特率,请务必检查要使用的外设时钟(PCLK)。在本例中,有一个 26 MHz PCLK 和 16 MHz PCLK 可用。请注意,OSR、DIV、DIVM 和 DIVN 因设备而异。
波特率 | 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配置的详细寄存器。查看计算波特率的参数,例如UART_LCR2、UART_DIV和UART_FBR。表4将引出一个特定的寄存器来覆盖。
名字 | 描述 |
UART_DIV | 波特率分频器 |
UART_FIBR | 分数波特率 |
UART_LCR2 | 二线控制 |
第七:在每个寄存器下,检查详细信息并替换值以计算波特率,然后开始实施UART。
为什么它很重要?
在开发稳健、质量驱动的产品时,熟悉UART通信协议是有利的。了解如何仅使用两条线发送数据,以及如何传输整个数据包或有效载荷,将有助于确保数据传输和接收无误。由于UART是最常用的硬件通信协议,因此这些知识可以在未来的设计中实现设计灵活性。
使用案例
您可以将UART用于许多应用程序,例如:
调试:在开发过程中及早检测系统错误非常重要。在这种情况下,添加 UART 可以通过从系统捕获消息来帮助。
制造功能级跟踪:日志在制造中非常重要。它们通过提醒操作员生产线上发生的情况来确定功能。
客户或客户端更新:软件更新非常重要。拥有完整的动态硬件和支持更新的软件对于拥有完整的系统非常重要。
测试/验证:在产品离开制造过程之前对其进行验证有助于向客户提供最优质的产品。
审核编辑:郭婷
-
接收器
+关注
关注
14文章
2456浏览量
71789 -
发射器
+关注
关注
6文章
842浏览量
53391 -
uart
+关注
关注
22文章
1227浏览量
101161
发布评论请先 登录
相关推荐
评论