硬件选型基础:MCU vs MPU、算力需求评估、内存与存储考量、功耗预算分析

好,咱们进入正题。硬件选型这事儿,说白了就是给算法找个合适的“家”。选错了,后面全白干。我见过太多项目,算法在PC上跑得飞起,一上嵌入式设备就卡成PPT。嗯,今天咱们就把这层窗户纸捅破。

MCU vs MPU:到底选哪个?

很多刚入行的朋友会纠结这个问题。我个人的习惯是,先看任务复杂度,再看功耗预算。

MCU(微控制器),你可以把它想象成一个“专车司机”——活儿单一,但效率极高。它把CPU、内存、Flash都集成在一个芯片里,启动快,功耗低,几毫瓦就能干活。适合做传感器数据采集、简单的关键词唤醒、状态机控制这类任务。

MPU(微处理器),更像一辆“公交车”——能拉很多人,但需要外部挂载DDR内存、eMMC存储。它跑Linux系统,能处理复杂的视觉任务、多路音频流。代价呢?功耗轻松上瓦级,启动也要好几秒。

我举个例子。之前有个智能门锁项目,客户要求人脸识别。一开始他们选了MPU方案,结果电池撑不过一周。后来换成MCU加NPU(神经网络处理器)的组合,功耗降了80%。你看,选型不是选最强的,而是选最合适的。

核心判断标准:

  • 任务是否需要运行Linux?需要 → MPU;不需要 → MCU
  • 模型大小是否超过1MB?超过 → 考虑MPU或带外部Flash的MCU
  • 系统是否要求<1秒冷启动?是 → MCU

算力需求评估:别被“TOPS”忽悠了

算力评估是选型里最容易踩坑的地方。厂商喜欢宣传“1TOPS算力”,但实际跑模型时,你会发现利用率可能只有30%。为什么会这样?因为TOPS是理论峰值,实际受限于内存带宽、数据搬运效率。

我建议你这样做:

  1. 先跑一次基准测试。把你最终要用的模型,在目标芯片上跑一遍。别信仿真数据,信实测。
  2. 留出30%余量。算力用到70%就差不多了,再高系统响应会变慢。我曾经有个项目,算力用到95%,结果一有中断进来,推理就超时。
  3. 关注MAC(乘加运算)利用率。很多MCU的MAC单元利用率不到50%,因为数据加载跟不上计算速度。选型时看看芯片的SRAM大小和总线位宽。

一个小技巧: 用公式估算最低算力需求:

所需算力 (GOPS) = 模型MACs (G) × 帧率 (FPS) × 1.3 (余量系数)

比如一个模型有0.5G MACs,要跑30FPS,那至少需要 0.5×30×1.3 = 19.5 GOPS。

内存与存储考量:别让数据“堵车”

内存是TinyML的命门。MCU的SRAM通常只有几百KB,而一个MobileNetV2模型就要3.5MB参数。怎么办?

我的经验是分三步走:

  • 第一步:模型量化。从FP32降到INT8,模型体积直接缩水4倍。我做过一个手势识别项目,量化后模型从2MB降到500KB,精度只掉了0.3%。
  • 第二步:内存复用。推理时,输入、中间特征图、输出可以共用一块内存。别傻傻地每个层都申请新空间。TensorFlow Lite Micro就是这么干的。
  • 第三步:外部存储。如果模型实在塞不进Flash,就用SPI Flash或PSRAM。注意,从外部Flash读数据很慢,最好用DMA(直接内存访问)来搬运,别让CPU干等。
存储类型 典型容量 读取速度 适用场景
内部Flash 256KB - 2MB ~50MB/s 存放模型权重和代码
内部SRAM 64KB - 512KB ~200MB/s 运行时数据、中间结果
外部SPI Flash 4MB - 64MB ~10MB/s 存放大型模型或日志
外部PSRAM 2MB - 16MB ~40MB/s 需要大内存的推理任务

注意: 外部存储的功耗比内部高一个数量级。如果电池供电,尽量把模型塞进内部Flash。我曾经为了省成本用外部Flash,结果待机电流从10μA飙到200μA,电池寿命直接砍半。

功耗预算分析:从“能用”到“耐用”

功耗这事儿,得从系统级来看。别只看芯片手册上的“典型功耗”,那是在理想条件下测的。

我一般这样算:

  1. 确定工作模式。设备一天工作几次?每次多久?比如一个温湿度传感器,可能每小时工作10秒,其余时间休眠。
  2. 分项测量。用电流探头分别测:休眠电流、激活电流、推理电流、通信电流。注意,Wi-Fi/BLE通信的峰值电流可能比推理还高。
  3. 计算平均功耗。公式很简单:平均功耗 = (工作时间×工作电流 + 休眠时间×休眠电流) / 总时间。

举个例子。一个电池容量为1000mAh的设备,如果平均电流是1mA,那理论续航是1000小时。但实际要考虑电池自放电、温度影响,通常打个八折。

避坑指南:

  • 别忽略“唤醒功耗”。从休眠到激活的瞬间,电流可能飙升到几十mA,持续几毫秒。如果唤醒频繁,这部分功耗不可忽视。
  • 选MCU时,看看有没有“保留SRAM的深度休眠”模式。有些芯片休眠时能保留32KB SRAM,这样你就不用每次醒来都重新加载模型。
  • 如果使用MPU,考虑“异步电源域”。把CPU核心、外设、内存分别供电,不用时关掉对应的电源域。

好了,硬件选型的基础就这些。说白了,就是算清楚三笔账:算力账、内存账、功耗账。账算明白了,芯片自然就选出来了。下一章咱们聊聊具体的开发板怎么挑,到时候我会分享一些我踩过的坑,嗯,都是真金白银换来的教训。