整条链路回顾
开箱与环境搭建。 e2studio + FSP 的组合本身很顺,麻烦在这块板子不在默认 BSP 列表里,得先 clone 官方的 cpk_examples 仓库,把 CMSIS Pack 导进去才认得出 CPK_RA8D1。MIPI 屏那一套 GLCDC + DSI + D-PHY 的时序参数手动配根本推不出来,最后老实用官方例程当底座。加上快递把拓展板的屏幕压碎了,前期基本是在跟环境和硬件较劲。
数据采集。 这块最典型的坑是 Arduino 接口的 SDA/SCL 位接到了 RA8D1 上根本没有 IIC 复用能力的 PA14/PA15,两个硬件 IIC 通道的可用引脚又被 SDRAM、摄像头、OSPI、MIPI 一层层占掉,最后只剩 I3C 排针引出的 P511/P512 能用(当普通 I2C 走,改开漏输出)。MPU6050 挂上去,按键触发采集,边采边打 CSV,原始值在片上就转成整数工程单位,避开浮点。静止、拿起、晃动三个动作各采 50 组。
模型训练。 两层一维卷积 + BatchNorm + 全连接的轻网络,输入 6 轴 × 300 时间点,全局平均池化后出三类 logits。三个动作信号区分度本来就高,训练很快收敛,测试集准确率稳定在 0.96~1.0。
端侧部署。 这一篇坑最密:
BatchNorm 折叠——推理期 BN 退化成逐通道仿射,和前面的卷积合成一个线性变换,折完 fp32 无损(最大误差 1.9e-6)。
归一化折叠的 fp32/int8 分岔——fp32 路线把归一化折进权重,设备喂原始值最省事;但 int8 的 per-tensor 量化要求整张量数值范围接近,陀螺的 50 万和加速度的 4000 塞一起,加速度直接被量化台阶碾平,准确率从 100% 掉到 75%。所以两条路线折叠策略正好相反:int8 得把归一化留在设备端,让六个通道都落在 $[-1,1]$。
框架的隐式改图——TFLite 没有原生 Conv1D,转换器把它映射成 $H=1$ 的 CONV_2D,前后垫 EXPAND_DIMS/RESHAPE。这次数值逐条一致是虚惊,但也印证了框架路线"每次格式转换都是在赌它对了"。
FSP 版本冲突——mipi 例程底座是 FSP 5.3.0,TFLM 只有 6.5.0 的包,CMSIS-NN 从 4.x 到 7.x 的函数签名全变了。只能把 BSP 的 FSP 升到 6.5.0,同时把 C++11 改成 C++17。跨三个大版本升级,是整个工程里风险最高的一步。
最终产物 imu_net_int8.tflite 8752 字节,板上单次推理约 18ms,三个动作都能准确识别。
LVGL 显示。 桌宠动图量化成 8bpp 调色板 + 逐帧 RLE,三组合计 926KB。这一篇的坑集中在:
FreeRTOS 陷阱——LVGL 的 LV_USE_OS 默认是 LV_OS_FREERTOS,而工程是不是 RTOS 工程在建工程那一步就定死了,Components 里勾 FreeRTOS 只拷内核源码、不生成端口层和配置头。裸机工程补不出来,只能把 LV_USE_OS 改成 LV_OS_NONE。
222 宽度的对齐——屏是 H0233S001,222×480,Macro Line 要求 64 字节对齐,而 $222 \times 2 = 444$ 不是 64 的倍数。正确组合是缓冲宽度 224、输出宽度 222,即 .hsize=222、.hstride=224。
阻塞改非阻塞——原来的 IMU 采集是死等 3 秒采满 300 样本,动画一帧才 120ms,堵 3 秒就是 25 帧空白直接卡死。改成环形缓冲 + 滑动窗口,全塞进主循环,攒够 50 个新样本(0.5 秒)才摊平推理一次。
堆炸——裸机 + Dave2D 默认 4KB 堆第一次绘制就 BFSR 0x82(精确总线故障),改到 64KB 才够。
动作切换定了条防抖规则:非待机动作立刻打断当前播放,回待机要等当前动作把遍数播完,播完回到分类器当下想要的状态
这块板子的整体印象
RA8D1 的定位很清楚:Cortex-M85 + Helium + 2D 绘图引擎 + SDRAM 控制器,就是奔着图形和端侧 ML 去的。CoreMark 3000+ 的算力跑 tinyML 推理绰绰有余,18ms 一次分类几乎没感觉;SDRAM 帧缓冲加双缓冲让 LVGL 跑得很稳。这些硬实力没得挑。
不太顺手的地方也集中在"外围搭配"上:这块拓展板可自由支配的 IO 被高速外设占得所剩无几。另外官方例程虽然能当底座,但 FSP 版本和 TFLM 包之间的错配需要自己升级化解,这一步对新手有一定劝退。
最终效果
新拓展板到位后补上完整演示,手势 → 动画的联动跑得很干净:静止时待机,晃动切委屈,拿起化蝴蝶,屏上表情跟着手上动作走,18ms 的推理延迟在观感上完全无感。
至此,从开箱、环境搭建,到 IMU 采集、模型训练、tinyML端侧部署,再到 LVGL 图形联动,整条链路全部跑通,测评收官。
最后要特别感谢瑞萨(RA)的工作人员。开箱时拓展板的屏幕在快递途中被压碎了,反馈之后 RA 很快就补发了一块新的拓展板过来,让这次测评能够完整跑通并做出最终演示
系列传送门:
第一篇《开箱+开发环境搭建》:https://forum.eepw.com.cn/thread/401605/1
第二篇《IMU动作识别的数据采集与模型训练》:https://forum.eepw.com.cn/thread/401629/1
第三篇《TFLM端侧部署》:https://forum.eepw.com.cn/thread/401635/1
第四篇《LVGL显示动画》:https://forum.eepw.com.cn/thread/401641/1
我要赚赏金
