# 微控制器固件调试的 UART CLI 实现
UART CLI 通过 UART 提供命令行接口,用于微控制器固件调试。其语法类似于汇编语言:命令名后跟由空格分隔的位置参数。一条命令——一行。
command_name arg1 arg2 arg3 ...
从 PC 连接时,使用 TeraTerm 并设置字节间延迟,以避免固件缓冲区溢出。控制台中首先出现绿色的系统初始化日志,类似于黑匣子飞行记录仪。初始化完成后,出现 --> 提示符,有时附带运行时间以验证时钟。
命令结构:读取命令和设置命令
命令分为读取命令(查看状态)和设置命令(更改参数)。读取命令适用于固件分析,安全可靠。
- h 或 help [substring] — 命令列表,按子字符串过滤。
- TAB — 命令自动补全。
- vi — 固件版本、编译器、git SHA256。
ll [module] 命令显示模块的日志级别,并支持 printf 风格的调试。
h
h gpio
硬件资源诊断
CLI 提供对关键子系统状态的访问:
- freq — 核心频率。
- clk — 子系统的已启用时钟。
- gl — GPIO 引脚状态。
- rm [addr] [bytes] — 按地址读取内存。
- wm [addr] [data] — 写入内存。
针对寄存器:
rr timer5 0x10
nrm # 通过 I2C 读取 NAU8814 寄存器
诊断命令列表:
| Command | 描述 |
|---------|------|
| fd | 闪存诊断 |
| pwd | PWM 设置 |
| lmd | LED 状态 |
| intd | 中断 |
| cdf | CAN 过滤器 |
| trd | 定时器 |
| cd | 每个核心的栈填充级别 |
网络和外设接口
- i2cs — 扫描 I2C 总线,显示设备地址(DS3231、EEPROM)。
- cs [can_num] [id] [hex_data] — 发送 CAN 数据包。
- ll can debug — 接收到的 CAN 数据包日志。
repeat [cmd] N P 命令重复执行命令 N 次,周期为 P 毫秒——适用于压力测试。
性能和任务监控
- scd — 超级循环诊断:while(1) 迭代次数/秒、平均持续时间。
- 任务调度器:按 ID 查看和禁用,无需重新构建。
- nvram — 读写 NVRAM 以重新配置。
MCU 和 PC 上的超级循环示例:
![scd on MCU]
reboot — 核心重启。
内置计算器和实用工具
CLI 将设备转变为计算工具:
- Base64、RLE、AES256 解码。
- SHA256、CRC16 哈希。
- GNSS 距离、向量角度。
- 线性方程、PLL 系数(clock_pll_calc 220000000)。
- bd val1 val2 — 32 位寄存器的位差异。
- 按标记计算电容值。
- cfim — 按掩码的实际 CAN ID。
电压分压器示例:
calc_vdiv R1=1000 R2=1000 Vin=3.3
按子字符串运行单元测试:test i2c。
关键点
- 调试版本中,UART CLI 对于启动和调试至关重要。
- 不像 SWD/JTAG 那样在电源重连时挂起。
- 支持 UART、stdin/stdout 等协议。
- 通过 CLI 进行固件更新和校准。
- 命令数量根据闪存大小调整。
实现细节
CLI 是固件模块的层次结构。它解析命令并路由到相应组件。在 Windows 上,它是一个类似于 BusyBox 的控制台应用程序,用于受控条件下的调试。60 秒超时或按 Esc 后自动退出。
— Editorial Team
暂无评论。