串口乱码,你第一个想到换线?我用协议分析仪抓到真凶

Peter 于 2026-09-04 发布

串口乱码,你第一个想到换线?我用协议分析仪抓到真凶

别信声明,信测量。

一、新板子到手,满屏乱码

我是一名做Memory training 的工程师,日常就是跟 MRC、内存初始化、POST log 打交道。做Memory bring-up 的人都知道一件事:串口 debug log 是第一条要打通的路——MRC 训练结果、SPD、时序,全都要靠它看。串口乱了,training 后面全都调不动。

最近刚刚拿到LPDDR5新的板子,到手第一件事接串口看 POST log。结果满屏乱码。

供应商说:”波特率设的是3000000。”

我低头看看手边的串口线,标称上限 1M——好,破案了,线不行。3M 的数据,1M 的线哪扛得住。于是换线、换FTDI 模块、换电脑,折腾一圈,还是乱码

这时候我才停下来想:从头到尾,我一直在(猜是线的问题),却从没过线上到底发生了什么。

二、换线是在猜,抓波形是在测

普通串口终端(PuTTY / minicom)是个”死”工具:你设多少波特率,它就按多少解码。设错了,它吐乱码,还不告诉你为什么错。

协议分析仪不一样:它把 TX 线上的电平按时间戳高频采下来,再按你指定的协议去解析。比终端高明两点:

  1. 能测真实位宽——波特率设错了,也能从波形看出”一个 bit 到底多宽”,反推出真实的波特率
  2. 留证据——波形存下来能反复看,不用靠”我记得当时是乱的”。

于是我把协议分析仪接到了板子的串口 TX 上(旁路监听,接 TX + GND 即可)。 图 01:协议分析仪接线

三、从接线到抓取,一步不少

1. 通道设置:把信号线映射到分析仪通道,这里是 Channel 0 = UART TX。 图 02:通道设置

2. 协议选择:选 UART(异步串口),配波特率、数据位、停止位、校验位。 图 03:协议选择

3. 抓取:上电触发,把开机整段串口波形采下来。 图 04:抓取

4. 解析:结果出来了——还是乱码图 05:串口工具抓到的乱码

四、乱码本身揭示了真相

看到乱码,第一反应是”果然线不行”。但这次多了个心眼:协议分析仪测出的真实位宽,跟3000000 对得上吗?

对不上。

那一刻才反应过来一件事:供应商口头说的”3M”,和板子上固件实际配置的波特率,未必是同一个数。 我一直默认”声明 = 实际”,但固件到底写的是多少,得信波形,不能信口头。

【动图:波特率不匹配 → 采样错位 → 乱码 —— 见 图 06:波特率不匹配 这张图是全文题图——它画出了一个没人画过的问题:波特率不对,为什么一定乱码。 上层是真实比特流(每个 bit 等宽),下层是一个按错误波特率跳动的采样点;随着时间推移,采样点一点点滑进相邻 bit,读出来的 0/1 全错位。就像两个节拍器不同步,你按自己的拍子去抄对方的舞步,越跳越乱。

五、新 BIOS 对齐后,一次抓到完整 log

拿到新一版 BIOS,重新抓取。这一次,协议分析仪吐出了完整可读的 POST debug log图 07:协议分析 图 08:最终完整可读的 POST log

我这里确认到的是——波特率对齐后链路就通了,而不是靠换线解决的。

六、意外收获:顺手抓到 STM32 的 log

学会用协议分析仪之后,我顺手试了试板子上的 STM32 单片机——居然也把它的 log 抓下来了图 09:STM32Log 这是意外收获:协议分析仪不只是一把”查波特率”的钥匙,它是板上任何一路 UART 都能读的通用工具。这份技能不限于 BIOS 串口,对 bring-up 里任何一颗带串口的小芯片都适用。

七、下次遇到串口乱码,按这个顺序来

步骤 动作 目的
1 先别换线,先确认”波特率到底是多少” 换线是猜,测波特率才是查
2 上协议分析仪,抓 TX 波形 拿到真实位宽 → 反推真实波特率
3 用测出的波特率去解析 而不是用”别人说的”波特率
4 还乱,再怀疑线 / 信号完整性 把线放到最后怀疑,别放第一

一句话收尾:别信声明,信测量。 串口乱码十有八九不是线坏了,是”你以为的波特率”和”实际的波特率”对不上——而协议分析仪,是唯一能让这两个数见光的东西。

这个原则其实和我做Memory training 的习惯是通的:内存时序也一样,Setup 里写的配置是”声明”,MRC 实际训练出来的值才是”测量”——我 debug 内存时读的永远是后者。