嵌入式测试学习第 36 天:串口日志分析、通过日志定位简单问题
串口日志分析、通过日志定位简单问题
- 一、串口日志是什么
- 二、串口工具与接线
- 2.1 常用工具
- 2.2 串口接线(必须正确,否则无日志/乱码)
- 2.3 串口参数(必须一致)
- 三、日志等级(一眼判断严重程度)
- 四、正常启动日志
- 4.1 正常日志示例(ESP32/STM32通用)
- 4.2 正常日志特征
- 五、真实工作案例
- 案例1:设备反复自动重启 → 看门狗复位(最高发)
- 现象
- 日志内容
- 分析
- 原因
- 解决
- 案例2:日志突然中断、设备死机(静默死机)
- 现象
- 日志内容
- 分析
- 原因
- 解决
- 案例3:串口乱码(90%新手遇到)
- 现象
- 原因(按概率)
- 解决
- 案例4:WiFi连接失败(密码错误/认证超时)
- 现象
- 日志内容
- 分析
- 解决
- 案例5:文件系统损坏,开机失败
- 现象
- 日志内容
- 分析
- 原因
- 解决
- 案例6:长期运行内存泄漏 → 越跑越卡最后死机
- 现象
- 日志内容
- 分析
- 解决
- 案例7:Hard Fault(硬件异常/指针错误)
- 现象
- 日志内容
- 分析
- 解决
- 案例8:欠压重启(电源硬件问题)
- 现象
- 日志内容
- 分析
- 解决
- 六、串口日志万能分析流程
- 七、总结
一、串口日志是什么
串口(UART)是嵌入式设备最基础、最稳定、最便宜的调试接口。
设备上电、启动、初始化、运行、报错、死机、重启,所有底层行为都会打印串口日志。
测试工程师90%的问题都靠串口日志定位:
- 设备反复重启
- 开机失败
- WiFi/蓝牙连不上
- 运行越久越卡
- 死机无响应
- 乱码
- 文件系统损坏
二、串口工具与接线
2.1 常用工具
Windows:SSCOM、XCOM、串口调试助手
Linux/Mac:minicom、screen、SSCOM for Linux
下面用**SSCOM(最常用)**真实界面演示:
2.2 串口接线(必须正确,否则无日志/乱码)
USB转TTL → 设备
- GND ↔ GND(必须接!否则乱码)
- TX ↔ RX
- RX ↔ TX
- 5V/3.3V 不要接!会烧板
2.3 串口参数(必须一致)
- 波特率:115200(最常见),其次 9600、38400
- 数据位:8
- 停止位:1
- 校验位:None
- 流控:None
三、日志等级(一眼判断严重程度)
所有嵌入式日志都分等级:
| 等级 | 标识 | 含义 | 测试处理 |
|---|---|---|---|
| DEBUG | [DEBUG] | 调试信息,量产关闭 | 不用管 |
| INFO | [INFO] | 正常运行 | 正常 |
| WARN | [WARN] | 警告,潜在问题 | 必须记录 |
| ERROR | [ERROR] | 功能失败 | 严重,必须修 |
| FATAL | [FATAL] | 死机/崩溃 | 最高优先级 |
四、正常启动日志
4.1 正常日志示例(ESP32/STM32通用)
日志内容:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) [INFO] Bootloader V2.0.1 start [INFO] Chip: ESP32-WROOM-32, 4MB Flash [INFO] System clock: 240MHz [INFO] UART init 115200 OK [INFO] GPIO/I2C/SPI init OK [INFO] WiFi init success [INFO] BLE init success [INFO] File system mount OK [INFO] Main task started [INFO] Heartbeat: 1 [INFO] Heartbeat: 24.2 正常日志特征
- 无ERROR/WARN/FATAL
- 所有外设初始化 OK
- 持续打印心跳(Heartbeat)
- 不会反复从头启动(无自动重启)
五、真实工作案例
案例1:设备反复自动重启 → 看门狗复位(最高发)
现象
运行几分钟自动重启,循环往复。
日志内容
[INFO] Heartbeat: 120 [INFO] I2C read sensor... [FATAL] Watchdog Reset! [INFO] Bootloader start...分析
- Watchdog Reset= 看门狗超时复位
- 卡死在I2C read sensor→ 主线程卡住,没喂狗
原因
- I2C设备无应答,程序死等
- 长任务阻塞,喂狗代码没执行
解决
- I2C加超时机制
- 长循环里定期喂狗
案例2:日志突然中断、设备死机(静默死机)
现象
日志停住,按键/网络无响应,只能断电重启。
日志内容
[INFO] SPI Flash write start [INFO] Write addr: 0x08000000 [INFO] Writing data... <<< 日志停在这里,无输出 >>>分析
- 卡在SPI Flash write→ SPI总线挂死
- 无报错、无重启 →静默死机
原因
- Flash硬件损坏
- SPI时序错误
- 写Flash时未关中断导致死锁
解决
- 换Flash测试
- 加SPI读写超时
- 写Flash前关闭中断
案例3:串口乱码(90%新手遇到)
现象
全是乱码,看不到正常文字。
原因(按概率)
- 波特率不匹配(设备115200,工具9600)
- GND没接(干扰)
- 数据位/校验位不匹配
解决
- 波特率依次试:115200 → 9600 → 38400
- 固定8N1
- 必须接GND
案例4:WiFi连接失败(密码错误/认证超时)
现象
能搜到WiFi,但连不上。
日志内容
[INFO] WiFi scan OK, found 8 APs [INFO] Connect SSID: OfficeWiFi [ERROR] Password check fail [ERROR] Auth timeout, disconnect分析
- Password check fail→ 密码错误
- Auth timeout→ 路由器WPA3,设备只支持WPA2
解决
- 核对密码
- 路由器改为WPA2-PSK
- 靠近路由器(RSSI > -70dBm)
案例5:文件系统损坏,开机失败
现象
反复开关机后,开机卡在启动界面,配置丢失。
日志内容
[INFO] Mount /fatfs... [ERROR] FATFS mount failed [WARN] Flash partition corrupted [INFO] Enter recovery mode分析
- FATFS mount failed→ 文件系统挂载失败
- Flash partition corrupted→ 分区损坏
原因
- 异常断电(写数据时突然掉电)
- Flash坏块
解决
- 格式化文件系统
- 重新烧录固件
- 增加掉电保护机制
案例6:长期运行内存泄漏 → 越跑越卡最后死机
现象
刚上电正常,几小时后卡顿,最后死机重启。
日志内容
[INFO] Malloc 1024 OK [INFO] Malloc 1024 OK ...(重复上千次) [ERROR] Malloc fail! No free RAM [WARN] System memory: 99% used分析
- Malloc fail→ 内存耗尽
- 只 malloc 不 free →内存泄漏
解决
- 找到未释放内存,加 free
- 改用静态数组,减少动态内存
案例7:Hard Fault(硬件异常/指针错误)
现象
突然崩溃重启,日志报 Hard Fault。
日志内容
Guru Meditation Error: Core 0 panic'ed (StoreProhibited) PC: 0x400d1234, PS: 0x00060d30 Backtrace: 0x400d1234:0x3ffbe5a0分析
- Hard Fault= 指针错误、栈溢出、非法访问内存
- C语言常见:野指针、数组越界、栈溢出
解决
- 查代码指针操作
- 增大栈大小
- 检查数组边界
案例8:欠压重启(电源硬件问题)
现象
一开继电器/电机就重启,空载正常。
日志内容
[FATAL] Brownout Reset: Voltage drop detected System voltage: 2.9V, Threshold: 3.3V分析
- Brownout Reset= 欠压复位
- 电源带载能力不足,硬件问题
解决
- 更换更大功率电源
- 增加电容滤波
六、串口日志万能分析流程
- 先找 ERROR/WARN/FATAL/Reset
- 定位报错前最后一行日志→ 问题就在这个模块
- 看时间戳:
- 上电就错 → 初始化问题
- 运行一段时间错 → 内存/看门狗/稳定性
- 对比正常日志:差异点就是故障点
- 区分软硬件:
- HardFault/Watchdog → 软件
- Brownout → 硬件电源
七、总结
Watchdog Reset 是什么?
看门狗超时复位,主线程卡死、没喂狗。日志突然中断无报错?
SPI/I2C总线挂死,静默死机。串口乱码先查什么?
波特率 → GND接线 → 数据位/校验位。Hard Fault 原因?
野指针、数组越界、栈溢出。
