1. STM32N6边缘AI产品架构总览
STM32N6 是 ST 推出的面向边缘 AI 的高性能 MCU 系列,其核心价值在于把“感知—推理—决策—执行”这条链路压缩到一颗芯片内完成。与“MCU 采集 + 云端推理”或“MCU + 外挂 NPU”的方案相比,STM32N6 在片内集成了 Neural-ART 加速器(NPU)、大容量片上 SRAM、MIPI CSI-2 摄像头接口与 H.264 硬件编码器,使产品可以在本地完成图像采集、神经网络推理和结果输出,而不必把原始图像上传到云端。理解它的架构,关键不是记住外设清单,而是看清“数据从哪来、在哪里被处理、算力与内存如何匹配、最终以什么形式输出”这条完整链路。
一、从需求到部署的完整链路
一个典型的 STM32N6 边缘 AI 产品,其链路可以拆成五个阶段。第一阶段是需求定义:明确输入模态(图像、音频还是传感器时序)、目标类别数、可接受的延迟与功耗、以及是否需要联网。第二阶段是模型选型与量化:在 PC 端用 TensorFlow Lite 或 ONNX 训练并导出模型,再通过 ST Edge AI Core 工具链转换为 INT8 量化模型,生成可在 NPU 上运行的 .bin 与 C 代码。第三阶段是硬件与内存规划:确定摄像头分辨率、帧率、模型输入尺寸,并据此估算激活值与权重占用,决定哪些张量放在 NPU 专用内存、哪些放在 AXI SRAM。第四阶段是固件集成:把模型、前后处理、外设驱动和 RTOS 任务组织成流水线。第五阶段是部署与验证:在真实光照、真实目标下测精度、延迟和功耗,并据此迭代。
这条链路有一个容易被忽视的特点:它不是单向的。部署阶段测出的延迟超标,往往要回到模型量化阶段降低输入分辨率;精度不达标,可能要回到需求阶段重新确认类别定义。因此架构设计从一开始就要为“回退”留出余量。
二、关键组件与数据流
STM32N6 的架构可以按数据流方向理解。最前端是传感器接口:MIPI CSI-2 接摄像头,I2S/SAI 接数字麦克风,ADC 接模拟传感器。数据进入后,由 DMA 与 DCMIPP(图像处理流水线)完成裁剪、缩放、色彩转换,把原始帧整理成模型需要的输入张量。随后数据被送入 Neural-ART NPU,NPU 从专用 SRAM 读取权重与激活值,执行卷积、矩阵乘等算子。推理结果由 CPU(Cortex-M55)读取,做后处理(如 NMS、阈值判断),再通过 GPIO、UART、CAN 或以太网输出控制信号或上报结果。若需要视频留证,H.264 编码器可把原始帧压缩后写入外部 Flash 或通过 USB 传出。
这里的关键约束是内存带宽与容量。NPU 的算力再高,如果激活值放不下、或权重读取带宽不足,实际帧率就会掉下来。STM32N6 提供多块 SRAM(AXI SRAM、AHB SRAM 等),设计时必须把“每帧激活值大小 × 并发帧数”算清楚,再决定缓冲区数量。
三、设计约束的实际含义
约束不是纸面指标,而是会直接改变架构决策。以“算力约束”为例:假设模型单帧需要 2.4 GMAC,目标帧率 30 fps,则 NPU 需提供约 72 GMAC/s 的有效算力。STM32N6 的 NPU 峰值算力远高于此,但有效算力受内存带宽限制,实际可能只有峰值的 40%~60%。因此选型时不能只看峰值,而要用工具链跑出的实测 cycle 数反推。
“内存约束”更常见。以 320×320×3 的 INT8 输入为例,单帧输入约 300 KB;若模型中间层最大激活值为 512 KB,双缓冲就需要 1 MB 以上。STM32N6 的片上 SRAM 总量有限,必须把权重放外部 Flash、激活值放片内,并让 DCMIPP 直接写入 NPU 可访问的区域,减少一次拷贝。
“实时性约束”则决定流水线结构。若采集 33 ms、预处理 8 ms、推理 25 ms、后处理 5 ms,串行执行约 71 ms,满足 100 ms 要求;但若推理涨到 40 ms,就必须把采集与推理做成双缓冲流水线,让第 N 帧推理与第 N+1 帧采集重叠,把端到端延迟压回 80 ms 以内。
四、一个可参考的架构决策顺序
实际项目中,建议按以下顺序推进,避免返工:
- 定输入:确定传感器类型、分辨率、帧率,算出原始数据率。
- 定模型:选择或训练模型,用 ST Edge AI Core 量化,记录单帧 MAC 数与峰值激活值。
- 定内存:按“权重放外部、激活放片内、帧缓冲双份”的原则分配 SRAM,验证不溢出。
- 定流水线:根据各阶段耗时决定串行还是双缓冲,确定任务优先级与中断分工。
- 定验证:在真实场景下测精度、延迟、功耗,记录回退触发条件。
这五步不是一次性完成的,而是每轮迭代都要重新核对。尤其当模型从 224×224 换到 320×320 时,激活值可能翻倍,内存规划必须重做。把这条链路和约束想清楚,后续的模型部署、外设配置和功耗优化才有稳定的基础。