UART——通用异步接收发送器

数字系统是以 1 和 0 的形式共享和存储信息。要与具有不同架构的多个设备共享此信息,我们需要一种通用的数据交换方法。这就是各种通信协议发挥作用的地方,其中之一就是通用异步接收器发送器 ( UART )。它是嵌入式电子产品中最常用的通信协议之一。它是一种串行、全双工、异步和板对板通信协议。在了解协议之前,让我们先分解一些主要关键字。

·串行通信: 对于串行通信,仅需一个或两个连接即可发送或接收数据。数据接收和传输一次一位或按顺序进行。
·并行通信: 对于并行通信,存在多条线路用于数据交换。用于传输或接收数据的线路数量称为设备的总线宽度。在下图中,您可以确定总线宽度为 8 位。所有 8 位同时传输。

UART详解

由于 UART 是一种全双工异步通信协议,因此数据的发送和接收可以同时进行。因此,我们需要单独的引脚来传输和接收数据。我们有用于传输的 TX 引脚和用于数据接收的 RX 引脚。从一个设备的 TX 端口发送的数据由另一个设备的 RX 端口接收,反之亦然。因此,设备之间的连接是 TX1 连接到 RX2,TX2 连接到 RX1 以进行通信。下图说明了如何完成 UART 协议的连接。
并行与串行通信
异步通信: 在异步通信中,设备不共享公共时钟来同步数据传输。相反,它们同意相同的传输速率并配置设备的内部时钟来捕获或传输数据。
全双工通信: 在全双工类型的通信中,存在单独的线路以同时进行发送和接收。
从下图中,您可以看到设备并行发送和接收数据。
全双工通信
现在我们已经了解了一些重要术语的基本概念,我们可以继续了解 UART 的工作原理。

UART详解

由于 UART 是一种全双工异步通信协议,因此数据的发送和接收可以同时进行。因此,我们需要单独的引脚来传输和接收数据。我们有用于传输的 TX 引脚和用于数据接收的 RX 引脚。从一个设备的 TX 端口发送的数据由另一个设备的 RX 端口接收,反之亦然。因此,设备之间的连接是 TX1 连接到 RX2,TX2 连接到 RX1 以进行通信。下图说明了如何完成 UART 协议的连接。
uart双工通信连接
首次设置 UART 硬件时最常见的错误之一是将 TX1 与 TX2 连接,将 RX1 与 RX2 连接。这种错误很难发现,而且非常令人沮丧。因此,请务必确保将一个设备的 TX 与另一个设备的 RX 连接。这里要注意的另一件重要事情是,设备的 GND 也应连接。这一点很重要,因为电子设备读取或写入有关电压差的数据(5V 或 3.3 V高电平或 1 和 0V:低电平)。要测量电压差,我们需要一个参考电压。接地可提供参考,从而防止通信时数据损坏。

连接完成后,硬件设置就结束了。让我们继续了解 UART 数据包是什么以及它里面有什么:
uart数据帧

1.同步位

有 1 个起始位和 1 或 2 个停止位。它们表示数据包的开始和结束。传输开始时,该线被拉至 0 或低电平,表示帧的开始,传输完成时再次拉至 1 或高电平。当线为 1 或高电平时,它被视为空闲,表示没有正在进行的数据传输。只有 1 位表示“开始”,但停止位可配置为 1 或2。
uart中同步的起始位和停止位

2.数据位

数据帧的这一部分是问题的核心,因为它承载着要发送给接收器的信息。该块的长度可以从 5 位到 9 位不等,具体取决于设备之间商定的配置。标准数据大小为 8 位或 1 字节。根据 UART 标准,协议遵循小端顺序,即数据从 LSB(最低有效位)发送到 MSB(最高有效位),但也可以配置为遵循大端顺序,即从 MSB 到 LSB。
uart大端数据传输

3.奇偶校验位

UART 带有错误检查机制,用于检查接收数据块的完整性。由于数据在 UART 中是逐字节发送的,因此会对每个接收字节进行错误检查。它使用奇偶校验位来执行此操作;它是在数据位之后发送的错误检查代码。奇偶校验位有两种模式:奇数或偶数。

奇校验: 为了检查数据块的完整性,程序会检查数据中存在的 1 的数量,包括校验位。发送器执行以下步骤来生成数据帧的校验位。

  1. 计算数据位中 1 的数量
  2. 如果 1 的数量为奇数,则将奇偶校验位设置为 0,否则设置为 1。此过程使块中的 1 的总数(数据位 + 奇偶校验位)为奇数。
  3. 接收方检查收到的块(包括校验位)中 1 的数量是奇数还是偶数。如果 1 的数量为奇数,则数据有效。如果 1 的数量为偶数,则数据无效。

偶校验: 偶校验检查数据中的 1 是否为奇数,而不是奇数个 1,并在发送方和接收方采用相同的方法。如果块中的 1 为奇数,则奇偶校验位设置为 1;如果块中的 1 为偶数,则奇偶校验位设置为 0。最终目标是使数据传输中的 1 数量为偶数。接收方检查块中的 1 数量(数据位 + 奇偶校验位)是否为偶数,以验证数据传输。

这是一种简单的错误检查机制,如果传输过程中有多个位损坏,该机制就会失效。它也无法识别传输过程中哪个位损坏了。

太棒了!我们已经准备好发送数据了。但是 UART 如何在没有任何公共时钟的情况下同步数据传输?这是通过称为“波特率”的配置完成的。

4.波特率

它指定以 bps(比特/秒)为单位发送数据的速度。为了进行 UART 通信,设备设置为相同的波特率。一些标准波特率为 9600、38400、115200、921600 等。反转波特率,您将获得每个位传输所需的时间。例如,
波特率
因此,波特率为 9600 时,每个位传输时间为 104.16 微秒。对于硬件而言,设备会将线路拉高或拉低 104.16 微秒。

现在您几乎了解了实现协议所需的一切。这些知识对于在出现任何奇怪行为时调试程序至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值