找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 0
打印 上一主题 下一主题
收起左侧

边缘AI 在WCH CH585M上部署TFLite Micro

[复制链接]
跳转到指定楼层
楼主
CH585M TFLite Micro sin Demo
TensorFlow Lite Micro 移植到 WCH CH585M 跑 sin 函数拟合 demo。

想象一下:一个几块钱的 MCU,不需要网络、不需要 Linux、不需要 MPU,就能本地运行神经网络——关键词唤醒、手势识别、振动异常检测、传感器数据拟合。设备端推理意味着零延迟、离线可用、数据不出设备、功耗低到可以用电池跑几年

这就是 TensorFlow Lite Micro(TFLM)要做的事。它是 TensorFlow Lite 的微控制器分支,目标是在只有几十 KB RAM、几百 KB Flash 的芯片上跑 AI 推理。它把底层依赖压缩到了极致:无操作系统、无动态内存、无文件系统,纯静态 arena 分配。

WCH CH585M 是一颗只要几块钱的 RISC-V 芯片——448KB Flash、128KB RAM,带 BLE。如果能在它上面跑 TFLM,就意味着一大批低成本 RISC-V 设备都有了边缘 AI 的可能性。


硬件
项目说明
MCUWCH CH585M(RISC-V RV32IMC,448KB Flash,128KB RAM)
串口UART0 — PA14 (TX) / PA15 (RX) @ 115200
工具链MRS2 IDE + RISC-V GCC 12.2.0


串口接线
  1. USB-TTL CH585M
  2. ------- ------
  3. RX ← PA14 (TX)
  4. TX → PA15 (RX)
  5. GND — GND
复制代码


工程结构
  1. CH585M_TFLite_sin/
  2. ├── src/main.cc # demo 主程序
  3. ├── model_data.h # sin 模型 (2.3KB, 嵌入为 C 数组)
  4. ├── tflite_port/ # 平台抽象层(3 个文件)
  5. │ ├── debug_log.cc # DebugLog 输出
  6. │ ├── system_setup.cc # 初始化(空,在 main 完成)
  7. │ └── micro_time.cc # 计时器
  8. ├── tensorflow/ # TFLite Micro 核心(create_tflm_tree.py 生成)
  9. ├── third_party/ # 第三方头文件(create_tflm_tree.py 生成)
  10. ├── Startup/ # 启动代码
  11. ├── StdPeriphDriver/ # CH58x HAL 驱动
  12. ├── RVMSIS/ # RISC-V CMSIS 头文件
  13. ├── Ld/Link.ld # 链接脚本
  14. └── Makefile # 命令行构建(可选)
复制代码
tensorflow/third_party/ 由 TFLite Micro 官方脚本 create_tflm_tree.py 在 Linux/Codespace 上生成,无需手动复制文件。



模型信息
属性
输入1× float32 (x)
输出1× float32 (sin(x))
算子FullyConnected → Tanh → Reshape
大小2,380 bytes


内存占用
  1.    text data bss dec hex
  2.   71916 844 8240 81000 13c68
复制代码
区域大小使用率
Flash (448KB)~72KB16%
RAM (128KB)~9KB7%
8KB bss 中主要包含 tensor_arena 静态内存池。--gc-sections 自动丢弃了 120+ 个未用算子的代码。



构建

MRS IDE(推荐)
  • 打开 MRS2 → 刷新工程
  • 点击 Build
  • 烧录到 CH585M


命令行
  1. $env:Path='C:\MounRiver\MounRiver_Studio2\resources\app\resources\win32\components\WCH\Toolchain\RISC-V Embedded GCC12\bin;C:\mingw64\bin;' + $env:Path
  2. mingw32-make -j8 all
复制代码


移植要点
TFLite Micro 移植只需实现 3 个平台抽象函数 + 配置编译选项:

函数文件说明
DebugLog()tflite_port/debug_log.ccprintf 已重定向到 UART
InitializeTarget()tflite_port/system_setup.cc空实现,时钟在 main 初始化
GetCurrentTimeTicks()tflite_port/micro_time.ccprofiling 使用
编译选项要点:
  1. -std=gnu++17
  2. -fno-exceptions -fno-rtti -fno-threadsafe-statics
  3. -DTF_LITE_STATIC_MEMORY # 禁用动态内存
  4. -DTF_LITE_USE_GLOBAL_CMATH_FUNCTIONS # 嵌入式 C++ math
  5. -DDEBUG=0 # printf → UART0
复制代码

输出




项目下载
CH585M_TFLite_sin-master.zip (1.15 MB, 下载次数: 0)
github.com/createskyblue/CH585M_TFLite_sin

评分

参与人数 2黑币 +80 收起 理由
wpppmlah + 30 绝世好帖!
admin + 50 共享资料的奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表