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):
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设备,一个设备断电,另一个设备仍在工作,则工作设备Tx或Rx等线上的电流,可能倒灌进未工作设备导致异常。可以通过加二极管或电压转换芯片等来隔离4)。
UART协议帧结构如下,详见DreamSourceLab:UART协议分析 > 2.协议规范。
当两个设备需要通过UART协议进行通讯时,它们需要同时约定好以下内容:
常用的物理层有: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是一个免费且开源的SSH和Telnet客户端,它被广泛用于各种操作系统。
Tera Term的主要功能:
Tera Term的介绍详见Tera Term:功能强大的SSH和Telnet客户端
Tera Term下载地址SOURCEFORGE: Tera Term