返回首页

微控制器 UART CLI:调试命令

该材料描述了用于调试微控制器固件的 UART CLI 实现。涵盖诊断硬件资源、外设、性能和内置计算器的命令。中高级开发者的示例。

MCU 中的 CLI:从 GPIO 到 CAN 和 PLL 计算器
Advertisement 728x90

# 微控制器固件调试的 UART CLI 实现

UART CLI 通过 UART 提供命令行接口,用于微控制器固件调试。其语法类似于汇编语言:命令名后跟由空格分隔的位置参数。一条命令——一行。

command_name arg1 arg2 arg3 ...

从 PC 连接时,使用 TeraTerm 并设置字节间延迟,以避免固件缓冲区溢出。控制台中首先出现绿色的系统初始化日志,类似于黑匣子飞行记录仪。初始化完成后,出现 --> 提示符,有时附带运行时间以验证时钟。

命令结构:读取命令和设置命令

命令分为读取命令(查看状态)和设置命令(更改参数)。读取命令适用于固件分析,安全可靠。

Google AdInline article slot
  • hhelp [substring] — 命令列表,按子字符串过滤。
  • TAB — 命令自动补全。
  • vi — 固件版本、编译器、git SHA256。

ll [module] 命令显示模块的日志级别,并支持 printf 风格的调试。

h
h gpio

硬件资源诊断

CLI 提供对关键子系统状态的访问:

  • freq — 核心频率。
  • clk — 子系统的已启用时钟。
  • gl — GPIO 引脚状态。
  • rm [addr] [bytes] — 按地址读取内存。
  • wm [addr] [data] — 写入内存。

针对寄存器:

Google AdInline article slot
rr timer5 0x10
nrm  # 通过 I2C 读取 NAU8814 寄存器

诊断命令列表:

| Command | 描述 |

|---------|------|

Google AdInline article slot

| 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

Advertisement 728x90

继续阅读