串口-UART
UART是Universal Asynchronous Receiver-Transmitter通用异步收发器的缩写。
信号及连接
UART设备有两种DCE(Data Communication Equipment)和 DTE(Data Terminal Equipment)。路由器、Modem或者通讯模块一般为DCE,而打印机、计算机等终端一般为DTE。DCE和DTE、DCE和DCE、DTE和DTE之间都可以连接,但需要注意其信号定义及信号流向。
以常见的DCE和DTE连接为例,UART信号定义如下表所示1)。
8线、4线、2线(不包括GND线)的连接图如下。无需硬件流控(RTS CTS),用2线连接,需要硬件流控则用4线或8线连接。
硬件流控的流程如下2):
- 发送数据:发送器首先将RTS置为有效以通知接收器它有数据要发送,然后等待接收器将CTS置为有效。一旦RTS和CTS均置为有效,发送器就开始发送数据。发送器从LSb开始每次发送一位。发送器发送完成后,会立即发送停止信号并将RTS置为无效。只要接收器将CTS置为无效,发送器就会暂停发送。
- 接收数据:当接收器检测到发送器已将RTS信号置为有效时,会通过将CTS信号置为有效进行响应。当接收器检测到起始位后,会开始读取线路中传入的数据,然后将该数据存入移位寄存器中。当移位寄存器已满时,接收器会将数据推入FIFO寄存器中。接收器所连接的系统后续会负责清空FIFO寄存器。如果FIFO和移位寄存器均已满,接收器会将CTS置为无效,以便为系统留出更多的时间来读取寄存器,从而避免丢失数据。
DCE | DTE | 特性 | 信号方向 | ||||
名称 | 描述 | 输入输出 | 名称 | 描述 | 输入输出 | ||
UART_RX | 数据接收端 | DI | TXD | 数据发送端 | DO | DTE 发送串行数据,DCE接收 | DTE→DCE |
UART_TX | 数据发送端 | DO | RXD | 数据接收端 | DI | DCE发送,DTE 接收串行数据 | DCE→DTE |
UART_CTS | 清除发送 | DI | RTS | 请求发送 | DO | DTE通知 DCE 请求发送,DCE切换到接收 | DTE→DCE |
UART_RTS | 请求发送 | DO | CTS | 清除发送 | DI | DCE通知 DTE 请求发送,DTE切换到接收 | DCE→DTE |
UART_DTR | DTE就绪 | DI | DTR | DTE就绪 | DO | DTE准备就绪,通知DCE | DTE→DCE |
UART_DSR | DCE就绪 | DO | DSR | DCE就绪 | DI | DCE通知DTE 准备就绪 | DCE→DTE |
UART_DCD | 载波检测 | DO | DCD | 载波检测 | DI | DCE通知DTE,数据链路已连接 | DCE→DTE |
UART_RING | 振铃指示 | DO | RING | 振铃指示 | DI | DCE通知 DTE 有远程呼叫或短信息 | DCE→DTE |
硬件设计注意事项
上拉电阻
UART起始位(Start bit)为高电平拉低到低电平,即空闲时需要保持高电平。
一般在Tx和Rx线上都加一个上拉电阻,以保证空闲状态的高电平,避免起始位识别错误3)。
来自UART的电流倒灌
当两个通讯的UART设备,一个设备断电,另一个设备仍在工作,则工作设备Tx或Rx等线上的电流,可能倒灌进未工作设备导致异常。可以通过加二极管或电压转换芯片等来隔离4)。
电平转换
- TTL 1.8/3.3/5V之间的电平转换:用三极管(400KHz以下)、MOS管(1MHz以下)搭建转换电路,或直接用转换芯片(参考 Voltage Translation Buying Guide)
- TTL和RS232之间的电平转换:MAX3221等芯片
- TTL和RS485之间的电平转换:MAX485等芯片
协议
UART协议帧结构如下,详见DreamSourceLab:UART协议分析 > 2.协议规范。
当两个设备需要通过UART协议进行通讯时,它们需要同时约定好以下内容:
- 每一位信号的时间长度T(波特率 = 1/T,最大波特率921600)
- 帧结构中每一项的具体位数
- 是否有校验位,以及校验位的机制(奇/偶/..)
不同物理层的实现
常用的物理层有:TTL/CMOS电平1.8V/3.3V/5.0、RS232(单端)、RS485(差分),电平差异如下图,具体差异见DreamSourceLab:UART协议分析 > 1.2.不同的物理层实现。
测试
串口的测试有两种仪器,逻辑分析仪和示波器,软件工程师看协议推荐用逻辑分析仪,硬件工程师看信号推荐用示波器。
具体详见DreamSourceLab:UART协议分析 > 3.1. 示波器vs逻辑分析仪。
逻辑分析仪测试详见DreamSourceLab:UART协议分析 > 3. 使用逻辑分析仪分析UART通讯。
UART通讯中的信号错误,详见TI:UART Protocol Overview。
终端工具
Tera Term
Tera Term是一个免费且开源的SSH和Telnet客户端,它被广泛用于各种操作系统。
Tera Term的主要功能:
- SSH和Telnet支持:Tera Term支持安全外壳(SSH)和Telnet协议,允许用户安全地连接到远程服务器。
- 键盘宏:Tera Term允许用户创建和使用键盘宏,这可以自动化重复性任务并提高效率。
- 脚本支持:Tera Term支持脚本功能,允许用户创建和运行自定义脚本,以进一步自动化任务和扩展Tera Term的功能。
- 日志记录:Tera Term具有内置的日志记录功能,允许用户记录会话和调试连接问题。
- 会话管理:Tera Term允许用户管理多个会话,方便地在不同的远程服务器之间切换。
- 可自定义性:Tera Term高度可自定义,允许用户更改界面、创建自定义菜单和添加插件。
Tera Term的介绍详见Tera Term:功能强大的SSH和Telnet客户端
Tera Term下载地址SOURCEFORGE: Tera Term
评论