物理层信号特性:RS-232、TTL/CMOS 与眼图分析

做 UART 调试,第一关就是物理层。说白了,信号从芯片管脚出来,到对面芯片管脚收进去,中间这段路最容易出幺蛾子。我见过太多工程师拿着逻辑分析仪抓了半天波形,最后发现是电平标准搞错了——这种坑,踩一次就记住了。

RS-232 电平标准

RS-232 是串口通信的老祖宗。它用 ±3V ~ ±15V 来代表逻辑电平。具体来说:

  • 逻辑 1(MARK):-3V ~ -15V
  • 逻辑 0(SPACE):+3V ~ +15V
  • 过渡区:-3V ~ +3V,这个区间信号状态不确定

我记得刚入行时,拿万用表量 RS-232 的 TX 引脚,测到 -9V 左右,心里还嘀咕“这电压怎么是负的”。后来才明白,RS-232 的设计初衷是为了抗干扰——用正负电压摆幅来对抗长线传输的噪声。

实用技巧: 用示波器看 RS-232 信号时,注意把探头的地线夹在信号地(GND)上,别夹在机壳地上。我吃过这个亏,波形全是毛刺。

TTL/CMOS 电平标准

现在的嵌入式系统,绝大多数用 TTL 或 CMOS 电平。跟 RS-232 完全反着来:

标准 逻辑 0 逻辑 1 典型 VCC
TTL 0V ~ 0.8V 2.0V ~ 5.0V 5V
CMOS 0V ~ 0.3×VCC 0.7×VCC ~ VCC 3.3V / 5V
LVTTL 0V ~ 0.4V 2.4V ~ 3.3V 3.3V

你想想看,如果 A 设备用 5V TTL 输出,B 设备用 3.3V CMOS 输入,直接连会怎样?大概率烧坏 B 设备的输入引脚。我有个项目就是这样,STM32 的串口接了个 5V 的 GPS 模块,结果 STM32 的 RX 脚直接冒烟了。

警告: 不同电平标准互连时,必须加电平转换芯片(如 MAX3232、TXS0108E)或电阻分压。别指望“3.3V 能识别 5V 信号”这种侥幸心理。

信号畸变与眼图分析

信号畸变,说白了就是波形走样了。常见原因有:

  • 反射:阻抗不匹配,信号在线上来回弹
  • 串扰:相邻信号线互相干扰
  • 衰减:线太长,信号幅度越来越小
  • 抖动:时钟不稳定,边沿位置飘忽不定

眼图是分析信号质量的利器。把多次采样的波形叠加在一起,看起来像一只眼睛。眼睛睁得越大,信号质量越好。

眼图关键指标:
  • 眼高:信号幅度余量,至少 > 200mV
  • 眼宽:采样窗口宽度,至少 > 0.6 个码元周期
  • 抖动:边沿的随机偏移,越小越好
  • 过冲/下冲:信号超出正常电平的幅度,应 < 10%

我曾经调一个 115200bps 的 UART,通信时好时坏。用示波器看眼图,发现眼高只有 150mV,眼宽不到半个码元周期。查了半天,原来是 PCB 走线太长,而且没做阻抗匹配。加了个 33Ω 的串联电阻后,眼图立马打开了。

UART 物理层故障分类与排查流程 物理层故障 电平不匹配 线序错误 信号畸变 RS-232 vs TTL 互连 需电平转换芯片 TX/RX 接反 交叉连接或直连 反射/串扰/衰减 用眼图分析 MAX3232 / TXS0108E 电阻分压 用万用表测通断 交换 TX/RX 测试 加串联电阻 缩短走线长度 排查顺序建议 先查电平 → 再查线序 → 最后看信号质量

常见物理层故障

电平不匹配

这是最常遇到的问题。5V 设备接 3.3V 设备,或者 RS-232 设备直接接 TTL 设备。症状很明显:要么完全收不到数据,要么收到一堆乱码。

快速判断方法: 用万用表测空闲时的 TX 引脚电压。如果是负电压(-5V ~ -12V),那就是 RS-232 电平;如果是正电压(3.3V 或 5V),那就是 TTL/CMOS 电平。

线序错误

UART 的 TX 和 RX 必须交叉连接。A 设备的 TX 接 B 设备的 RX,A 设备的 RX 接 B 设备的 TX。很多人想当然地“TX 接 TX,RX 接 RX”,结果通信失败。

我有个血的教训:调试一块 4G 模块时,怎么都发不出 AT 指令。折腾了两小时,最后发现是杜邦线插反了。从那以后,我每次接线都会用万用表确认一遍 TX 和 RX 的对应关系。

信号畸变

信号畸变通常表现为:

  • 波形上升沿/下降沿变缓
  • 有过冲或振铃
  • 码元宽度不一致
  • 误码率随波特率升高而急剧增加

解决信号畸变,我一般按这个顺序排查:

  1. 检查线缆长度,UART 在 115200bps 下建议不超过 1.5 米
  2. 在 TX 端串联 22Ω ~ 100Ω 电阻,抑制过冲
  3. 检查地线连接是否可靠,地线环路会产生共模噪声
  4. 用示波器看眼图,量化信号质量
眼图判读口诀:
眼睛睁得大,信号质量佳。
眼睛眯成线,误码在眼前。
过冲像尖刺,反射没消除。
抖动像毛刺,时钟有问题。

嗯,物理层这部分就这些。记住一句话:信号在线上走,跟人在路上走一样——路况不好,车就跑不快。先把物理层搞干净了,再谈协议解码的事。