UART协议
本篇博文主要介绍UART通信协议特性,包括衍生出的TTL、RS232、RS485总线电平标准。
UART全称通用异步收发传输器(Universal Asynchronous Receiver Transmitter),简称串口,通常用做调试端口。UART结构简单,将其划分为物理层、传输层进行分析。
物理层
物理层仅需要两根线直连,通常主控芯片内部都有此外设,无需额外芯片配置。
- TX:发送端
- RX:接收端
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帧的基本结构如下:
UART帧结构
- 空闲位:高电平,固有
- 起始位:低电平,固有
- 数据位:5-8bit,可配置
- 校验位:奇偶校验,可配置
- 停止位:高电平,1/1.5/2bit,可配置
为避免异步收发双端时钟不同步有偏差导致累计误差,UART串口通信值允许最多发送1字节。
常用帧结构配置为:8bit+无校验+1停止位。
位收发
确定帧结构之后,需要规定双方如何在时钟不同步的情况下接受到相同的数据。
双方约定传输波特率,以此确定传输单个bit所需要的时间。
波特率baudrate:Bps,每秒通信信道传输的码元数,单个码元可由多个bit组成,例如00、01、10码元均为2bit。
比特率bitrate:bps,每秒通信信道传输的位数。
对于串口,波特率和比特率数值相同,但需注意定义不同。
在确定波特率后,通常由收发端主控芯片对tx、rx信号进行滤波/过采样等各种处理,得到最终传输数据。
————————— End —————————
片云天共远,永夜月同孤。