10. 3. 刷写与验证
本阶段介绍如何将 MCU 固件刷写到 Shikra CS2390 上,并验证模型推理已成功执行。10.3.1 刷写固件
构建会在build/ms/bin/shikra.lpaicp.test 下生成两个固件二进制文件。
10.3.2. 验证 LPAI 子系统正在运行
设备启动后,检查remoteproc 驱动是否已成功加载 LPAI 固件:
state 文件的内容应为 running,name 文件应标识 LPAI 内核(例如 soccp)。任何其他状态(例如 offline、crashed)都表示加载失败,请查看 dmesg | grep -i remoteproc 了解详细信息。
10.3.3. T32 分析
Shikra LPAICP MCU 没有 UART,所有控制台输出都写入 RAM 控制台(ram_console_buf)。调试和结果读取通过 RISC-V JTAG 上的 Lauterbach T32 完成。TFLM 推理框架会将所有结果写入 volatile 全局变量,T32 可随时读取这些变量,无需设置断点。
10.3.3.1. 获取 RAM 控制台地址
ram_console_buf 地址在每次构建后都会变化。请从 ELF 文件中获取:
0xb45a7a8e。请使用您自己构建中的地址更新 CMM 脚本。
10.3.3.2. T32 CMM 脚本
更新&elf 路径和 ram_console_buf 地址以匹配您的构建,然后在 T32 中运行该脚本。
10.3.4. T32 全局变量参考
10.3.5. 解读结果
10.3.5.1. 有效性检查
在报告结果之前,务必验证:g_tfli_status 不为零,请参阅第 2 阶段,第 2.5.2.1 节中的错误表以确定根本原因。
10.3.5.2. 延迟
核心指标是g_tfli_avg_us(TFLI_ITERS 次迭代的平均推理延迟,单位为微秒)。
交叉验证:g_tfli_avg_ticks / 19.2 MHz = g_tfli_avg_us(在舍入误差范围内)。
g_tfli_cpu_mhz 给出根据 RISC-V mcycle 和 QTMR 时间戳推算出的有效 CPU 频率,可用于确认 CPU 是否以预期的时钟频率运行。
10.3.5.3. Arena 大小设置
如果g_tfli_arena_used 接近 g_tfli_arena_size,请增大 inc/tflite_infer.h 中的 TFLI_ARENA_KB。有关确定最小安全值的步骤,请参阅 第 2 阶段,第 2.5.2.1 节。
10.3.5.4. RAM 控制台输出
RAM 控制台会捕获启动和推理期间写入的printk() 输出。成功运行后,您应看到类似以下内容的行:
TFLI[N] 行是每个批次的延迟摘要。argmax 是嵌入输入样本的预测类别。
