UART 通讯协议

UARTUniversal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种异步串行通信协议,广泛应用于微控制器、计算机和其他数字设备之间的通信。它以其简单、可靠和灵活的特性,成为连接微控制器、传感器、外设以及计算机之间的桥梁 。


一、UART简介

UART的基本概念
UART协议主要用于计算机和电传打字机之间的通信,由Bell在19世纪60年代发明。它将并行输入信号转换成串行输出信号,因其简单实用的特性,已经成为一种使用非常广泛的通信协议。

UART是一种全双工的串行通信方式,能够实现点对点的数据传输。它无需时钟信号,通过预先设定的波特率进行数据的异步传输。由于其简单易用,UART被广泛应用于嵌入式系统、计算机外围设备等领域。

仅用一根数据接收线和一根数据发送线就能实现全双工通信。典型的串口通信使用3根线完成,分别是:发送线(TX)、接收线(RX)和地线(GND),通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信。

UART协议原理

  • 异步传输:UART通信采用异步传输方式,发送和接收双方不需要共享时钟信号,而是通过数据中的起始位和停止位来确定数据的开始和结束。
  • 数据格式:UART数据帧包括起始位、数据位、可选的校验位和停止位。数据位通常为8位,但可以是5-9位不等,校验位用于数据校验,可以是奇校验、偶校验或无校验。
  • 速率可调:UART通信速率(波特率)可根据需求进行调整,常见的波特率有9600、115200等。
  • 半双工/全双工:UART支持半双工和全双工通信方式 。

二、UART的工作原理

UART的通信过程主要包括以下步骤:

  1. 数据封装:发送端将并行数据封装成串行数据帧。
  2. 数据传输:通过传输线以串行方式发送数据帧。
  3. 数据接收:接收端按照相同的波特率解码串行数据帧。
  4. 数据解封装:将串行数据帧转换回并行数据供系统使用。

UART协议工作机制
在发送数据时,发送方将待发送的数据按照UART协议的数据格式进行封装,并通过UART接口发送出去。接收方则通过UART接口接收数据,并按照UART协议的数据格式进行解析,提取出有效数据。在通信过程中,发送方和接收方需要保持相同的波特率设置,以确保数据的正确传输 。

UART是异步通信协议,不依赖时钟线同步,而是依靠预先约定的波特率和数据格式。因为没有时钟信号,接收端必须能够正确地从数据流中识别起始位并锁定传输时序。

UART协议应用
UART协议在实际应用中具有广泛的应用场景,包括但不限于:

  • 微控制器与外设通信:如串口模块、GPS模块、蓝牙模块等。
  • 调试与日志输出:开发人员通常使用UART接口将调试信息或日志输出到计算机上。
  • 数据采集与传输:例如,在环境监测系统中,传感器可以通过UART接口将采集到的数据传输给微控制器或上位机进行处理和分析 。

UART通信的基本原理相对简单,数据以位(bit)为单位进行传输,每个位都有一个固定的时间长度,这个时间长度由波特率决定。UART通信通常包括三个主要部分:数据位、起始位和停止位。起始位用于通知接收端数据即将开始传输,数据位是实际要传输的信息,而停止位则用于表示数据已经传输完毕 。


三、UART数据帧格式

UART的物理层实现

UART通信协议的物理层可以通过不同的电平标准来实现,常见的有TTL、RS232和RS485等标准:

  • 基于TTL的UART通讯:使用简单的LVTTL/TTL电平进行传输,适用于板内通讯或设备调试场景。
  • 基于RS232的UART通讯:采用双极性电压信号进行物理传输,增强驱动能力,增加传输距离和可靠性。
  • 基于RS485的UART通讯:使用差分信号传输,适用于工业环境,提高传输距离和信号可靠性。

UART通常采用TTL电平(0V代表逻辑0,3.3V或5V代表逻辑1),但在一些情况下,尤其是在PC通信中,可能需要使用RS-232电平(-12V到12V)。

UART的数据帧通常由以下部分组成:

  • 起始位(Start Bit):1位,逻辑低电平,标识数据帧的开始。
  • 数据位(Data Bits):5~9位,实际传输的数据。
  • 校验位(Parity Bit):1位,可选,用于错误检测。
  • 停止位(Stop Bits):1~2位,逻辑高电平,标识数据帧的结束。

数据帧格式示意图:

+----------+----------+----------+----------+
| 起始位 | 数据位 | 校验位 | 停止位 |
+----------+----------+----------+----------+

UART的协议层
UART协议层主要规定了逻辑信号的协议规范以及通信过程,包括起始位、数据位、校验位和停止位。

波特率
波特率是UART协议中非常重要的概念,表示单位时间内(1秒)可表示的bit位个数。例如,波特率为115200的UART波形表示1秒可容纳115200个bit位。
波特率是UART通信的核心参数,表示每秒钟传输的比特数。发送端和接收端必须使用相同的波特率才能正确解码数据。如果波特率不匹配,即使差异很小,也可能导致数据错误或丢失。

很多人容易混淆波特率和通信速度。波特率只表示每秒传输的比特数,而通信速度涉及数据位、起始位、停止位、校验位等因素。因此,即使波特率相同,实际有效的数据传输速度可能会不同。

空闲位
设备之间不传输数据时以持续的高电平表示空闲。空闲位持续时间越长,两个数据帧间隔也越长。

起始位
UART数据传输线通常在不传输数据时保持在高电平电平。开始传输时发送UART在一个时钟周期内将传输线从高电平拉低到低电平。

数据位
数据位包含正在传输的实际数据,使用奇偶校验位是5-8位,不使用最多可以是9位。
数据位的长度通常可以是5、6、7、8或9位。大多数情况下使用8位,但某些应用可能需要更短或更长的数据位。发送端和接收端的数据位长度必须匹配。
在大多数情况下,数据以最低有效位优先方式发送。

校验位
奇偶校验位是接收UART判断传输期间是否有任何数据更改的方式。接收UART读取数据帧后,它将对值为1的数进行技术,并且检查总数是偶数还是奇数,是否与数据相匹配。
校验位用于错误检测,常见的配置包括无校验、偶校验、奇校验。使用校验位可以增加数据传输的可靠性,但在一些应用中可能会被省略。发送端和接收端的校验配置必须一致,否则会导致数据错误。

停止位
向数据包的结尾发出信号,发送UART将数据传输线从低电压驱动到高电压至少两位的时间。
停止位的数量可以是1或2位。多一个停止位可以增加接收端处理数据的时间,但同时会降低通信效率。不同的设备可能要求不同数量的停止位,因此配置时需特别注意。


四、UART通信流程图

UART通信的基本流程:

1. 发送端流程
数据准备
数据封装
数据发送
2. 接收端流程
数据接收
数据解封装
数据处理

五、UART通信原理图

基本的UART通信电路:

发送端                         接收端
┌───────────┐             ┌───────────┐
│   UART_TX ├───信号线───▶│   UART_RX │
└───────────┘             └───────────┘

带电平转换的UART通信电路:

发送端                  电平转换器                   接收端
┌───────────┐         ┌───────────┐         ┌───────────┐
│   UART_TX ├───▶   │   MAX232  ├───▶   │   UART_RX │
└───────────┘         └───────────┘         └───────────┘

六、总结 & 应用 & 优缺点

UART是一种简单而高效的串行通信协议,适用于点对点的异步数据传输。通过本文的介绍,相信您已经对UART的工作原理、数据帧格式和通信流程有了全面的了解。在实际应用中,只需正确配置UART的参数并遵循通信流程,即可实现稳定可靠的数据传输。

应用
UART协议因其简单性和灵活性,被广泛应用于各种通信场景。例如,单片机的RX/TX端口互相连接,实现基于TTL电平的UART通讯。此外,UART协议也是许多其他传输协议的基础,如DMX512、LIN、MIDI以及Modbus等。

UART的优缺点
优点

  1. 仅使用两根线。
  2. 异步通信,无需时钟信号。
  3. 具有奇偶校验位以允许进行错误检查。

缺点

  1. 数据帧的大小最大为9位。
  2. 不支持多个从属系统或多个系统。
  3. 每个UART的波特率必须在彼此的10%之内。

请添加图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐