设备接上电脑、系统里出现一个 COM 口,并不意味着它“使用 RS-232 协议”。工程现场常把 UART、RS-232、RS-485 和 USB 虚拟串口混为一谈,结果是线缆、电平、拓扑和软件协议同时排错,越查越乱。
本文先建立分层模型。读完后,你应该能回答:设备两端的电气接口是什么、字节怎样传输、谁定义一帧消息,以及上位机究竟在操作哪一层。
1. 先把四个名字放回各自层次
| 名称 | 主要解决的问题 | 典型位置 |
|---|---|---|
| UART | 字节如何串行化,波特率、数据位、校验位、停止位如何组织 | MCU 外设或串口控制器 |
| RS-232 | 单端电气信号、连接器与点对点连接 | 仪器、调试口、旧式 PC 串口 |
| RS-485 | 差分电气信号与多节点总线能力 | 工业现场总线、远距离设备链路 |
| USB CDC ACM / 厂商驱动 | USB 设备如何向主机呈现串口式接口 | USB 转串口芯片、设备 USB 口 |
UART 不是线缆标准,RS-485 也不是完整应用协议。它们约定字符传输或电气信号层面的机制;命令字、长度、CRC、地址和应答规则仍由 Modbus RTU 或厂商协议定义——上层协议的具体形态见本系列《设备通信与协议编程(七):Modbus RTU/TCP》,隔离厂商差异的分层做法见《设备软件架构与控制模型(二):硬件抽象层与设备适配器》。
2. UART 帧不是应用协议帧
常见的 115200 8N1 表示:
- 名义波特率为 115200;
- 每个字符含 8 个数据位;
- 无校验位(None);
- 1 个停止位。
若再计入 1 个起始位,一个 8N1 字符通常在线路上占 10 bit。因此 115200 bit/s 的理论上限约为 11520 byte/s,尚未扣除应用协议头、校验、应答间隔和系统调度延迟。波特率不等于有效载荷吞吐率。
“UART 帧”描述一个字符的起止与校验;“应用协议帧”可能由几十个 UART 字符组成。上位机解析消息边界时,不能把一次驱动回调或一次 Read 当成一帧。
3. RS-232:点对点、单端、全双工
RS-232 通常以发送、接收和信号地构成点对点链路。它使用相对于信号地的单端电压,不能把 MCU 的 3.3 V TTL UART 引脚直接接到 RS-232 接口;中间需要匹配的电平转换器。
常见误区有三个:
- DB9 只是常见连接器,针脚定义仍要查设备手册;不能只看插头形状。
- “能收到乱码”往往说明路径已部分连通,应继续核对波特率、数据位、校验和地线。
- RTS/CTS、DTR/DSR 等握手线是否使用取决于双方设计;软件打开硬件流控前要确认实际接线。
4. RS-485:差分总线不是自动多机协议
RS-485 通过两根线之间的差分电压传输信号,抗共模干扰能力更适合工业环境。常见的两线制链路是半双工:同一时刻只有一个方向驱动总线;四线制可实现全双工,但设备和布线都必须支持。
多节点能力只说明多个收发器可以挂在总线上,不会自动解决以下问题:
- 节点地址如何分配;
- 谁可以发言,如何避免冲突;
- 应答超时与重试规则;
- 帧边界、端序和校验算法。
这些都属于更高层协议。工程上还要按收发器、线缆长度和速率设计终端匹配、偏置与接地,不能机械地在每个节点都并联终端电阻。
5. USB 虚拟串口:软件像串口,链路不是 UART
USB CDC ACM 或 USB 转串口驱动可以在操作系统中暴露 COMx、/dev/ttyACM* 或 /dev/ttyUSB*。应用仍能使用串口 API,但底层数据经 USB 事务和驱动缓冲传输。
因此:
- “波特率”可能被设备真实采用,也可能只是驱动传给设备的配置提示;
- 拔插会使设备节点消失并重新枚举,端口名不一定稳定;
- USB 包边界、串口
Read返回边界和应用消息边界互不等价; - VID/PID 只能识别产品类型,多个同型号设备还需序列号或物理端口路径区分。
6. 排错时沿层次向上走
推荐按下面顺序定位:
- 物理与电气层:接口类型、电平、A/B 极性、地线、终端和供电是否正确。
- 系统与驱动层:设备是否枚举、驱动是否加载、端口是否被其他进程占用。
- 字符层:波特率、数据位、校验位、停止位、流控是否一致。
- 协议层:地址、命令、长度、端序、转义、校验和超时是否匹配。
- 业务层:设备当前状态是否允许该命令,参数是否越界。
先用逻辑分析仪、示波器或串口分析工具确认线上确实有字节,再讨论 JSON、CRC 或业务状态,能显著缩短排错路径。
7. 选型边界
| 场景 | 更自然的选择 |
|---|---|
| 板内 MCU 与外设 | UART、SPI 或 I²C,取决于距离、速率和布线 |
| 单台仪器、短距离维护口 | RS-232 或 USB 虚拟串口 |
| 多节点、较长距离、强干扰环境 | RS-485 加明确的上层协议 |
| 高带宽图像、持续大数据 | USB、GigE Vision 等,不应强行套串口 |
| 多轴硬实时同步 | CANopen、EtherCAT 等工业网络,而非普通串口轮询 |
选择接口时不要只比较标称速率,还要评估确定性、隔离、连接器可靠性、驱动维护、诊断能力和设备生命周期。
8. 小结
UART 定义字符传输,RS-232/RS-485 主要定义电气接口,USB 虚拟串口提供操作系统抽象,真正的消息语义属于应用协议。把这几层分开,是后续编写串口接收循环、二进制帧解析器和故障恢复逻辑的前提。