在 MCU 上部署模型
本指南介绍将 TensorFlow Lite Micro(TFLM)模型集成到 Q2390 / IQ2390 MCU 固件中以进行推理延迟基准测试的完整工作流程。目标平台
| 项目 | 详情 |
|---|---|
| 开发板 | Q2390 / IQ2390 |
| MCU CPU | RISC-V SiFive E6 |
| 操作系统 | Zephyr RTOS 4.3.0 |
| 工具链 | SDLLVM Clang 21.1.4 |
| RAM | 共 3 MB(所有代码和数据均加载到 RAM 中,不使用 XIP flash) |
| 调试接口 | 通过 RISC-V JTAG 连接的 Lauterbach T32 |
应用开发工作流程
┌──────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│ │ │ │ │ │
│ 1. Model │ │ 2. TFLM Runtime │ │ 3. Flashing & │
│ Preparation │────────►│ Integration │────────►│ Validation │
│ │ │ │ │ │
├──────────────────────┤ ├───────────────────────┤ ├───────────────────────┤
│ • Build Keras CNN │ │ • Clone tflite-micro │ │ • adb push .mbn │
│ • Export int8 TFLite │ │ • Wire LLVM libc++ │ │ • Verify remoteproc │
│ • Quantize inputs │ │ • Create infer module │ │ state = running │
│ • Flatten with xxd │ │ • Wire main.c + CMake │ │ • T32: read latency │
│ │ │ • Build firmware │ │ (g_tfli_avg_us µs) │
└──────────────────────┘ └───────────────────────┘ └───────────────────────┘
HOST HOST ON-DEVICE
xxd 步骤会将第 1 阶段生成的模型和输入二进制文件转换为 C 数组(model_data.cpp、input_data.cpp),这些数组在第 2 阶段中直接编译进固件。
先决条件
主机
| 要求 | 用途 |
|---|---|
| Linux 主机(Ubuntu 22.04) | 主要主机环境,所有构建和模型准备步骤均在 Linux 上运行 |
| Python 3.x | 为示例应用导出模型并生成输入 |
| MCU 固件工作区(已克隆、配置并编译) | 编译 Zephyr 固件 |
xxd(标准 Unix 工具) | 将模型和输入二进制文件展平为 C 数组 |
adb(Android Debug Bridge) | 将固件二进制文件刷写到目标硬件 |
| Lauterbach T32 软件 | 通过 JTAG 读取推理结果和 RAM 控制台输出 |
目标硬件
| 要求 | 用途 |
|---|---|
| Q2390 / IQ2390 开发板 | 运行 TFLM 固件的目标 MCU。确保 MCU 已启动并正常运行 |
| Lauterbach T32 JTAG 探针 | 已连接到开发板 |
| 与主机的 USB 连接 | adb 刷写固件时需要 |
本指南包含的阶段
| 阶段 | 描述 |
|---|---|
| 1. 模型准备 | 构建参考 1D-CNN 模型,导出为 int8 TFLite,并生成可用于 MCU 的 C 字节数组 |
| 2. TFLM 运行时集成 | 克隆 TFLM,接入 C++ 工具链,创建推理模块,并将其注册到固件中 |
| 3. 刷写与验证 | 将固件刷写到目标设备,验证 LPAI 子系统正在运行,并通过 T32 读取推理延迟 |

