UART协议详解

简介

UART是(Universal Asynchronous Receiver/Transmitter),通用异步收发器的缩写。在19世纪60年代,为了解决计算机和电传打字机通信,Bell发明了 UART协议,将并行输入信号转换成串行输出信号。因为UART简单实用的特性,其已经成为一种使用非常广泛的通讯协议。我们日常接触到的串口,RS232,RS485等总线,内部使用的基本都是 UART协议 。是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。

异步通信:发送设备和接收设备不需要同步时钟信号,数据传输是异步进行的。
全双工通信:可以同时发送和接收数据,即发送和接收操作是独立的。
串行数据传输:数据按位序列化后通过单个通信线路传输。

硬件框图
在这里插入图片描述
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种串行通信协议。UART主要由以下几个部分组成:

发送器: 这部分的工作是将并行数据转换为串行数据,然后发送出去。当CPU将数据写入发送数据寄存器时,UART会开始发送数据。
接收器: 这部分的工作是接收串行数据,并将其转换为并行数据。当UART接收到数据后,它将存储在接收数据寄存器中,直到CPU读取它。
波特率发生器: 这部分用于生成时钟信号,该信号用于控制串行通信的速度。
控制寄存器: 这部分用于控制UART的操作,例如设置波特率,设置数据位数,奇偶校验等。
状态寄存器: 这部分用于存储UART的状态信息,例如是否有未读取的接收数据,是否有发送数据等。

串口连接

UART 通道有两条数据线。每个设备上都有一个 RX 引脚和一个 TX 引脚(RX 用于接收,TX 用于发送)。每个设备的 RX 引脚都连接到另一个设备的 TX 引脚。请注意,没有共享时钟线!这是通用异步接收方发送方的“异步”方面。
TX(Transmit):发送线,用于从发送设备到接收设备的数据传输。
RX(Receive):接收线,用于从接收设备到发送设备的数据传输。
在这里插入图片描述

基于TTL的UART通讯

基于TTL的UART通讯,是UART协议应用最简单的使用场景。即直接把数字I/O输出的高低电平作为实际的物理信号进行传输。在物理连接上,只需要设备共地,通过一根信号线即可完成单向的设备通讯。如果需要双向全双工,使用两根信号线即可。
在这里插入图片描述
从波形可以看出,当没有数据传输时,UART信号会一直保持在高电平(具体信号幅度由I/O的供电电压决定),数据传输时信号发生跳变,传输完成后信号重新回到空闲的高电平状态。
在这里插入图片描述

基于RS232的UART通讯

为了增强驱动能力,以增加传输距离和可靠性,RS232总线采用了双极性电压信号来进行物理传输。信号在发送/接收之前,通过电平转换芯片实现内部信号和总线信号的互相转换。连接方式和TTL电平完全相同,整个物理层只是多了一层电平转换。
在这里插入图片描述
RS232波形在空闲时为负电压,当有数据传输时,信号开始在正负电压之间跳变,传输完成后重新回到空闲的负电压状态。
在这里插入图片描述

基于RS485的UART通讯

RS485为复杂的工业环境而设计,和其它UART协议的物理层相比,RS485总线最大的特点就是使用了差分信号传输。信号在发送之前,通过RS485的收发器把单端信号转换成差分信号,再发送到总线上进行传输;同样在接收之前,总线上的差分信号通过收发器的转换变成单端信号再送给UART控制器进行接收。在RS485总线上,如果希望进行全双工的双向通讯,需要两对差分信号线(即4根信号线)。如果只进行半双工的双向通讯,则仅需要一对差分信号即可。
在这里插入图片描述
A/B端的波形为互补关系。A端波形为正向逻辑(空闲时为正电压),B端波形为反向逻辑(空闲时为负电压)。
在这里插入图片描述

协议规范

UART帧结构

在这里插入图片描述
当两个设备需要通过UART协议进行通讯时,它们需要同时约定好以下内容:

每一位信号的时间长度T(波特率= 1/T)

帧结构中每一项的具体位数

是否有校验位,以及校验位的机制(奇/偶/…)

在这里插入图片描述

波特率

数据传输速率,以比特每秒(bps)为单位。

波特率是UART协议,或者说所有异步串行协议,非常重要的一个概念,即单位时间内(1秒)可表示的bit位个数,或者也可以表述为bit位宽的倒数。例如一个波特率为115200的UART波形表示1秒可容纳115200个bit位,也就是说每一位bit数据占大约8.68uS的时长。
在这里插入图片描述

UART等异步串行协议,为了简化信号物理连接,降低通讯成本,一般只有一根信号线,无法同时传输数据和时钟信号。收/发设备为了正确解析波形就需要在相同的波特率设置下。而相同的波形使用不同的波特率获取的信息可能会完全不同。对于接收设备来讲,只有起始位可以作为一帧数据的同步点,其它数据都是通过波特率来确定具体的取样位置。

空闲位

设备之间不传输数据时以持续的高电平表示空闲。空闲位持续时间越长,两个数据帧间隔也越长,单位时间传输的数据就越少。
在这里插入图片描述

起始位

数据帧的开始,通常为0。
UART接收端会一直检测信号线上的电平变化,开始传输数据时,发送端将信号线从高电平拉到低电平结束空闲状态,并保持一个bit位的时长。接收器检测到高低电平转换时,开始接收信号。
在这里插入图片描述

数据位

传输的数据本身,常见的数据位长度有7位、8位等
数据位包含传输的实际数据,如果使用了奇偶校验,那么数据位长为5~8 bits,如果没有使用奇偶校验,则位长为5~9 bits。在一般情况下,数据位为8 bits,数据首先从最低有效位开始发送,高位在后。
在这里插入图片描述

校验位

用于错误检测,可以是奇校验、偶校验或无校验,常见为奇偶校验。
校验位可以用来提高传输的可靠性。如果信号在传输过程中因为干扰而导致某些位置的电平产生错误,通过计算接收的数据和校验位是否匹配即可判断数据是否有传输错误,从而给应用层提供有效信息来决定接受/丢弃对应的数据。
在这里插入图片描述

停止位

停止位表示一帧数据的结束,实际信号是一段时间的高电平。停止位的时间长短可以设置为1、1.5或者2bits的停止位。大部分情况使用1bit的停止位。

因为UART是一个异步协议,每一帧的开头可以用跳变沿来同步,但是停止位只能通过波特率来计算相对位置,如果在停止位的位置识别到一个低电平,则会产生帧错误。在通讯过程中,为了减少波特率的误差导致的问题,可以设置不同的停止位长度来适配。
在这里插入图片描述

优点与缺点

优点:
简单性: UART通信只需要两根线(TX和RX),简化了硬件设计。
无需时钟信号: UART是异步通信,不需要共享时钟信号,这使得两个设备可以独立运行。
奇偶校验位: 提供基本的错误检测机制,有助于确保数据的完整性。
灵活性: 数据帧的结构(包括数据位、停止位和奇偶校验位)可以根据需要进行配置。
广泛的支持: UART有广泛的文档支持,并且被广泛应用于各种设备和平台。
易于实现: UART接口易于在微控制器和计算机系统中实现。
缺点:
数据传输速率限制: UART的最大波特率受限于物理硬件和信号质量,通常低于其他同步通信协议如SPI或I2C。
不支持多主或多从设备: UART通常用于点对点通信,不支持多主设备或多从设备配置。
波特率匹配: 发送和接收设备的波特率必须精确匹配,否则通信可能会失败。
数据帧大小限制: UART的数据帧通常限制为最多9位,这限制了单个传输的数据量。
错误检测有限: 虽然有奇偶校验,但对于更复杂的错误检测和纠正机制,UART可能不够用。
电磁干扰: 由于UART使用长串行通信,它可能更易受到电磁干扰,特别是在较长的通信距离上。

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值