嵌入式测试学习第 36 天:串口日志分析、通过日志定位简单问题

串口日志分析、通过日志定位简单问题


一、串口日志是什么

串口(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: 2

4.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%新手遇到)

现象

全是乱码,看不到正常文字。

原因(按概率)

  1. 波特率不匹配(设备115200,工具9600)
  2. GND没接(干扰)
  3. 数据位/校验位不匹配

解决

  • 波特率依次试: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 = 欠压复位
  • 电源带载能力不足,硬件问题

解决

  • 更换更大功率电源
  • 增加电容滤波

六、串口日志万能分析流程

  1. 先找 ERROR/WARN/FATAL/Reset
  2. 定位报错前最后一行日志 → 问题就在这个模块
  3. 看时间戳
    • 上电就错 → 初始化问题
    • 运行一段时间错 → 内存/看门狗/稳定性
  4. 对比正常日志:差异点就是故障点
  5. 区分软硬件
    • HardFault/Watchdog → 软件
    • Brownout → 硬件电源

七、总结

  1. Watchdog Reset 是什么?

    看门狗超时复位,主线程卡死、没喂狗。

  2. 日志突然中断无报错?

    SPI/I2C总线挂死,静默死机。

  3. 串口乱码先查什么?

    波特率 → GND接线 → 数据位/校验位。

  4. Hard Fault 原因?

    野指针、数组越界、栈溢出。


相关推荐
MartinYeung51 小时前
[论文学习]LLM 情境学习资料的快速精确遗忘技术:基于 In-Context Learning 与量化 K-Means 的 ERASE 方法
学习·算法·kmeans
踏着七彩祥云的小丑2 小时前
Go学习第8天:接口 + 泛型 + 错误处理
开发语言·学习·golang·go
fanged2 小时前
高通学习12--调试工具(TODO)
学习
AI小百科2 小时前
成为FDE的系统学习路径(2026版)
人工智能·学习·ai应用
caimouse2 小时前
Reactos 第 9 章 设备驱动 — 9.9 磁盘的设备驱动堆叠
windows·嵌入式硬件
三品吉他手会点灯2 小时前
STM32F103 学习笔记-24-I2C-读写EEPROM(第4节)-STM32的I2C通讯过程
笔记·stm32·学习
振南的单片机世界2 小时前
PWM调压调速,H桥换向:直流电机四象限控制
arm开发·stm32·单片机·嵌入式硬件
又是进步的一天2 小时前
一台虚拟机学习CI流程
学习·ci/cd·云原生·容器·kubernetes·devops
深圳市晶科鑫实业有限公司2 小时前
国产TCXO温补晶振是否可以完美替代欧美日系主流型号
人工智能·stm32·单片机·物联网·51单片机·信息与通信