3. UART 电气特性:从标准到电平转换

UART 作为一种异步串行通信协议,其物理层的电气特性直接决定了通信的可靠性、传输距离以及硬件接口的兼容性。本章将深入剖析 RS-232 标准、TTL 电平、逻辑电平转换以及常见的接口引脚定义,为后续的驱动开发打下坚实的硬件基础。

3.1 RS-232 标准与 TTL 电平

在嵌入式系统中,UART 核心逻辑(如 SoC 内部)通常使用 TTL(晶体管-晶体管逻辑)电平,而远距离通信或与 PC 机串口连接时,则采用 RS-232 标准。两者在电压范围、逻辑定义和传输距离上存在显著差异。

核心差异速览: TTL 电平是 0V ~ 3.3V/5V 的单端信号,逻辑 1 为高电平,逻辑 0 为低电平;RS-232 标准则使用 ±3V ~ ±15V 的差分信号,逻辑 1 为负电压(-3V ~ -15V),逻辑 0 为正电压(+3V ~ +15V)。
特性 TTL 电平 (3.3V/5V) RS-232 标准
逻辑 1 (Mark) 2.0V ~ 3.3V/5V -3V ~ -15V
逻辑 0 (Space) 0V ~ 0.8V +3V ~ +15V
电压摆幅 3.3V 或 5V 6V ~ 30V
传输距离 < 1.5 米(板级通信) 15 米 ~ 30 米(标准线缆)
抗干扰能力 弱 强(高电压摆幅)
典型应用 SoC 内部、传感器、MCU 间通信 PC 串口、工业设备、调制解调器
驱动开发提示: 在调试 UART 驱动时,务必确认 SoC 的 UART 引脚是 TTL 电平还是已经过 RS-232 转换。直接连接 TTL 电平到 RS-232 接口会损坏芯片。

3.2 逻辑电平转换:桥接两个世界

为了让 TTL 设备(如 ARM 开发板)与 RS-232 设备(如 PC 串口)通信,必须使用 电平转换芯片(如 MAX232、SP3232)。这些芯片内部包含电荷泵,能将 TTL 的 0~3.3V 转换为 RS-232 所需的 ±10V 左右电压。

TTL 到 RS-232 电平转换原理图 TTL 设备 (SoC / MCU) 0V / 3.3V 电平转换器 (MAX232 / SP3232) 电荷泵升压 TTL ↔ RS-232 RS-232 设备 (PC / 工业设备) ±10V TX / RX TX / RX 电平转换芯片是 UART 跨电压域通信的核心桥梁
硬件设计警告: 切勿将 TTL 电平的 TX/RX 直接连接到 RS-232 接口。TTL 的高电平(3.3V)在 RS-232 标准下被视为逻辑 0,且电压过低无法驱动远距离线缆。反之,RS-232 的 ±10V 信号会烧毁 TTL 输入引脚。

3.3 常见接口引脚定义

UART 通信至少需要 TX(发送)、RX(接收) 和 GND(地线) 三根线。对于需要流控的场景,还会引入 RTS(请求发送) 和 CTS(清除发送) 等硬件握手信号。

3.3.1 核心引脚功能

引脚名称 全称 方向(以 DTE 为例) 功能描述
TX Transmit Data 输出 发送串行数据。空闲时为逻辑 1(高电平)。
RX Receive Data 输入 接收串行数据。空闲时保持逻辑 1。
GND Ground - 信号地,为 TX/RX 提供参考零电位。必须连接。
RTS Request to Send 输出 DTE 请求发送数据。当 DTE 准备好接收时,置为有效(逻辑 0)。
CTS Clear to Send 输入 DCE 允许发送。当 DCE 准备好接收时,置为有效(逻辑 0)。
驱动开发要点: 在 Linux 内核中,UART 端口结构体 uart_port 的 mctrl 字段用于管理 RTS/CTS 等调制解调器控制信号。驱动通过 uart_update_mctrl() 函数来更新这些信号的状态。

3.3.2 硬件流控(RTS/CTS)工作流程

硬件流控通过 RTS 和 CTS 引脚实现“请求-允许”机制,防止接收端数据溢出。以下是一个典型的交互流程:

  1. 接收端准备就绪: 接收端(如 SoC)将 RTS 置为有效(逻辑 0),表示“我可以接收数据”。
  2. 发送端检测 CTS: 发送端(如 PC)检测到 CTS 引脚为有效(逻辑 0),开始发送数据。
  3. 接收端缓冲区满: 当接收端内部 FIFO 或缓冲区接近满时,将 RTS 置为无效(逻辑 1),表示“请暂停发送”。
  4. 发送端暂停: 发送端检测到 CTS 无效,立即停止发送,直到 CTS 再次有效。
RTS/CTS 硬件流控时序图 发送端 (DTE) PC / 主设备 检测 CTS 引脚 接收端 (DCE) SoC / 从设备 控制 RTS 引脚 TX 数据流 RTS 流控信号 硬件流控关键点 1. RTS 有效 (低电平) → 接收端就绪 2. CTS 有效 (低电平) → 发送端开始发送

3.4 常见接口连接方式

根据是否使用流控,UART 接口的连接方式分为以下两种典型场景:

  • 三线制(无流控): 仅连接 TX、RX、GND。适用于低速、短距离、通信双方处理能力充足的场景。这是嵌入式开发中最常用的调试接口。
  • 五线制(硬件流控): 连接 TX、RX、GND、RTS、CTS。适用于高速传输或接收端处理能力有限的场景,如蓝牙模块、高速工业总线。
驱动配置示例: 在 Linux 设备树中,通过 uart-has-rtscts 属性来启用硬件流控。驱动初始化时会根据该属性配置 UART 控制器的自动流控逻辑。
/* 设备树节点示例 */
&uart3 {
    status = "okay";
    pinctrl-0 = &uart3_pins;  /* TX, RX, RTS, CTS */
    uart-has-rtscts;           /* 启用硬件流控 */
};

3.5 本章小结