雷竞技注册
技术文章

回归基础:通用异步接收/发送器(UART)

2016年12月20日经过罗伯特·凯

本技术概要解释了广泛使用的-我甚至可以说是无处不在的- uart通信接口的一些低级细节。

本技术概要解释了广泛使用的-我甚至可以说是无处不在的- uart通信接口的一些低级细节。

相关信息

在世界上的电气工程师和电子爱好者中,可能很少有人没有以某种方式与通用异步接收/发送器(UART)接口进行交互。雷竞技最新app在这个技术可能很快被淘汰的世界里,我们不得不把功劳归于创造这个简单的数字通信方案的人,这个方案已经存在了几十年,仍然享有巨大的普及。

笔记:“UART”这个术语相当模糊。接口的各个方面——数据位数、停止位数、逻辑级别、奇偶校验——都可以根据系统的需要进行调整。在本文中,我将重点讨论现代微控制器应用程序中常见的UART实现。

功能和特点

您可能知道,一个基本的UART系统只使用三个信号:Tx(传输串行数据)、Rx(接收串行数据)和地,就可以提供健壮的、中速的全双工通信。与其他协议如SPI和I2C.,不需要时钟信号,因为用户给UART硬件必要的时间信息。

UART图

实际上,存在时钟信号,但它不是从一个通信设备传输到另一个;相反,接收器和发射机都具有内部时钟信号,该时钟信号控制如何生成改变逻辑电平(在TX侧)并解释(在RX侧)。不出所料,如果已经为不同的数据传输频率配置了发射器和接收器,则UART通信无效。而且,内部时钟信号必须是1)相对于预期频率足够精确,并且2)通过时间和温度足够稳定。

关键术语

让我们回顾一些术语,并在此过程中,我们将介绍更多UART特征:

  • 开始位:一字节UART传输的第一个比特。表示数据线处于空闲状态。空闲状态通常是逻辑高,所以开始位是逻辑低。
    • 起始位是一个开销位;这意味着它有助于接收器和发射器之间的通信,而是不转移有意义的数据。
  • 停止位:一个字节UART传输的最后一点。其逻辑电平与信号的空闲状态相同,即逻辑高。这是另一个开销位。

UART特征图

  • 波特率:可以传送数据的近似速率(以每秒位数或bps)。更精确的定义是对应于发送数字数据所需的时间(以秒)(以秒为单位)的频率(以秒为单位)。例如,通过9600波特系统,一位需要1 /(9600 bps)≈104.2μs。该系统实际上不能每秒传输9600位的有意义的数据,因为开销位需要额外的时间,并且可能在一个字节传输之间延迟。

UART方程图

  • 校验位:一个错误检测位添加到字节的末尾。有两种类型 - “奇数奇偶校验”意味着如果数据字节包含一个,则奇偶校验位将是逻辑高的甚至逻辑高位的数目,“偶数奇偶校验”意味着如果数据字节包含一个奇怪的逻辑高比特数。这似乎违反直觉,但其思想是,奇偶校验位确保逻辑高位的数量总是偶数(对于偶数校验)或奇数(对于奇数校验)。因此,如果您使用偶数奇偶校验,并且字节有三个逻辑高位,则奇偶校验位将是逻辑高位,因此传输数据中逻辑高位的总数(即字节本身加上奇偶校验位)是偶数。
    • 通过强制逻辑高位的数目总是偶数(对于偶数奇偶校验)或奇数(对于奇数奇偶校验),奇偶校验位提供了一种粗略的错误检测机制——如果在传输过程中某个位被翻转,逻辑高位的数目将不匹配所选择的奇偶校验模式。当然,如果两个比特被翻转,这种策略就会失效,所以奇偶校验比特远非防弹的。如果你非常需要无错误的沟通,我推荐儿童权利公约

同步和采样

如果没有某种时钟机制,标准数字数据就毫无意义。下面的图表向你展示了原因:

标准数字数据UART图

典型的数据信号只是一种电压,其在逻辑低和逻辑高之间转换。如果它知道,接收器只能正确将这些逻辑状态转换为数字数据何时采样信号.这可以很容易地使用一个单独的时钟信号来完成——例如,发射机更新时钟每一个上升沿上的数据信号,然后接收机对每一个下降沿上的数据进行采样。

然而,正如“万能”这个名字所暗示的那样异步接收器/发射器“UART接口不使用时钟信号来同步TX和RX设备。那么接收器如何知道何时对发射器的数据信号进行采样?

发射机基于其时钟信号产生比特流,然后接收器的目标是使用其内部时钟信号来在每个比特周期的中间采样传入数据。在比特周期的中间进行采样不是必需的,但它是最佳的,因为更接近比特周期的开始或结束的采样使得系统对接收器和发射器之间的时钟频率差异不太稳健。

接收器序列从起始位的下降沿开始。此时会发生关键的同步过程。接收器的内部时钟完全独立于发射器的内部时钟,换句话说,第一个下降沿可以对应接收器时钟周期中的任何点:

接收机时钟周期图

为了确保接收器时钟的主动边缘可以在比特周期的中间发生,发送到接收器模块的波特率时钟的频率远高于(倍数为8或16甚至32)实际的波特率。

假设一个比特周期对应16个接收器时钟周期。在这种情况下,同步和采样可以进行如下操作:

  1. 接收过程由起始位的下降沿启动。
  2. 接收器等待8个时钟周期,以建立一个接近比特周期中间的采样点。
  3. 然后,接收器等待16个时钟周期,使其将其带到第一数据比特周期的中间。
  4. 第一个数据位被采样并存储在接收寄存器中,然后模块在采样第二个数据位之前等待另外16个时钟周期。
  5. 此过程重复,直到所有数据位都已采样并存储,然后止动位的上升沿返回到其空闲状态的UART接口。

UART图的过程

结论

本文介绍了有关您可能已成功使用多次通信协议的一些细节。It is quite possible to implement a UART interface while knowing very little about the actual behavior of the signals and hardware, but a little extra knowledge—aside from the general edification that such knowledge provides—can be helpful when your UART communication isn’t working as expected.

3评论
  • m
    Manisrinivas. 2017年3月26日

    好的文章

    喜欢的。 回复
  • j
    Joe.08 2018年1月26日

    用奇偶校验位,你只能传输7位的信息?或者我需要更新我的灰色代码或2s赞美的知识吗?

    喜欢的。 回复
    • RK37. 2018年2月06日
      奇偶校验位简单地添加到数据的末尾。如果要传输八位数据,则​​奇偶校验位将成为第九位。
      喜欢的。 回复