UART协议

本篇博文主要介绍UART通信协议特性,包括衍生出的TTL、RS232、RS485总线电平标准。

UART全称通用异步收发传输器(Universal Asynchronous Receiver Transmitter),简称串口,通常用做调试端口。UART结构简单,将其划分为物理层、传输层进行分析。

物理层

物理层仅需要两根线直连,通常主控芯片内部都有此外设,无需额外芯片配置。

  • TX:发送端
  • RX:接收端
image can't load. UART物理层

通常来说,两个设备间尽量共GND/VCC,否则可能出现电源域不同导致通信不通。

两根线分别进行传输,可实现异步全双工通信。

TTL

若两款开发板使用杜邦线直连uart口,即使用TTL电平,逻辑电平定义如下。

电源 5V 3.3V
0 2.4V-5V 2.0V-3.3V
1 0V-0.4V 0V-0.8V

RS232

若想扩展传输距离,则与早期的设计思路一致,使用DB9接口连接两个通讯设备。DB9即9pin接口,相较于TTL直连,增加6个用于确定状态的控制信号。DTE为数据终端设备(计算机、路由)、DCE为数据通讯设备(调制解调)。

序号 名称 符号 方向 说明
1 载波检测 DCD DTE->DCE Data Carrier Detect,DTE告知对方是否收到载波信号
2 接收数据 RXD DTE<-DCE Receive Data,DTE接收数据
3 发送数据 TXD DTE->DCE Transmit Data,DTE发送数据
4 DTE就绪 DTR DTE->DCE Data Terminal Ready,DTE告知对方本机是否就绪
5 GND 共地
6 DCE就绪 DSR DTE<-DCE Data Set Ready,DCE告知对方本机是否就绪
7 请求发送 RTS DTE->DCE Request To Send,DTE请求DCE发送
8 允许发送 CTS DTE<-DCE Clear To Send,DCE回应RTS请求
9 响铃指示 RI DTE<-DCE Ring Indicator,DCE告知对方线路接通

无论公头母头的线,关键脚为2、3、5脚。某些设备DB9接口会保留此3引脚,但将其余引脚用作其他用途。

RS232的电平标准区别于TTL,需要做电平转换,如MAX3232:

  • 逻辑1:-5V~-15V
  • 逻辑0:+5V~+15V

RS485

传输层

帧结构

无论TTL、RS232、RS485电平,其底层通信协议均为UART协议,将待发送/接收数据转换为串行bit收发。串口收发基于帧结构(实际上大多数通信协议都是基于帧结构的),UART帧的基本结构如下:

image can't load. UART帧结构
  • 空闲位:高电平,固有
  • 起始位:低电平,固有
  • 数据位:5-8bit,可配置
  • 校验位:奇偶校验,可配置
  • 停止位:高电平,1/1.5/2bit,可配置

为避免异步收发双端时钟不同步有偏差导致累计误差,UART串口通信值允许最多发送1字节。

常用帧结构配置为:8bit+无校验+1停止位。

位收发

确定帧结构之后,需要规定双方如何在时钟不同步的情况下接受到相同的数据。

双方约定传输波特率,以此确定传输单个bit所需要的时间。

波特率baudrate:Bps,每秒通信信道传输的码元数,单个码元可由多个bit组成,例如00、01、10码元均为2bit。

比特率bitrate:bps,每秒通信信道传输的位数。

对于串口,波特率和比特率数值相同,但需注意定义不同。

在确定波特率后,通常由收发端主控芯片对tx、rx信号进行滤波/过采样等各种处理,得到最终传输数据。

————————— End —————————

片云天共远,永夜月同孤。