STM32N6 作为 AI 原生 MCU,其功耗表现直接影响边缘智能设备的续航能力。本文基于 ST 官方x-cube-n6-ai-power-measurement软件包,详解使用STLINK-V3PWR实现 STM32N6 全场景功耗测量的方法,核心优势是 “覆盖 nA 到 500mA 动态范围、±0.5% 测量精度、软件自动化分析”,可精准捕获摄像头、NPU 推理等关键阶段的功耗数据。
资料获取:STM32N6功耗测量方法
1. 核心测量工具与硬件配置
1.1 核心硬件清单
- 被测设备:STM32N6570-DK 开发板(集成 Neural-ART NPU、CSI 接口)
- 测量工具:STLINK-V3PWR(电压 1.6-3.6V、电流几 nA-500mA、50kHz 带宽、1.6MHz 采样率)
- 辅助工具:USB 数据线(供电 + 串口通信)、杜邦线(硬件修改)
1.2 硬件关键配置(必做步骤)
(1)开发板硬件修改
STM32N6-DK 默认 5V 供电,需断开原有供电链路,改为 STLINK-V3PWR 供电 VDDCore(核心供电域,含 CPU、NPU、RAM 等):
- 移除开发板上的电阻 R23、R24 和电容 C27,断开 5V 与外部 SMPS 的连接。
- 将 STLINK-V3PWR 的 OUT 引脚连接至开发板的 I_SENS_EXT_N(CN2-2 引脚),为外部 SMPS 供电(SMPS 效率参考 0.87)。
(2)引脚连接表(精准对应)
| STLINK-V3PWR 引脚 | STM32N6-DK 引脚 | 功能 |
|---|---|---|
| OUT | CN2-2(I_SENS_EXT_N) | 为 VDDCore 供电 |
| GND | CN2-8(GND) | 电源地 |
| TGI | CN4-1(PG5) | 触发功耗测量开始 / 停止 |
| TVCC | CN2-12(I_SENS_VDDIO_N) | 检测 VDDIO 电压 |
| GND | CN2-7(GND) | 信号地 |
2. 软件配置:固件与 Python 脚本
2.1 固件代码(核心流程)
烧录官方x-cube-n6-ai-power-measurement固件,核心逻辑是按阶段触发测量并记录时间戳:
while(1) {
waitForUserTrigger(); // 等待用户按键触发
startStlinkPwr(); // 启动STLINK-V3PWR,开始测量
cameraInit(); // 摄像头初始化
cameraCapture(); // 捕获图像(低功耗模式等待帧数据)
cameraDeInit(); // 释放摄像头资源
nn_inference(); // NPU神经网络推理(高功耗阶段)
postProcessing(); // 后处理
sendTimestamp(); // 串口发送时间戳数据
deInitIPs(); // 关闭外设,结束测量
}
- 关键函数:
cameraCapture()中启用低功耗时钟,通过HAL_PreEnterSLEEPMode()降低等待阶段功耗,确保测量真实性。 - 时间戳记录:
pwr_timestamp_log()记录各阶段起始 / 结束时间,用于后续功耗与时间关联分析。
2.2 Python 脚本配置(自动化分析)
(1)环境搭建
- 安装 Python 3.x,进入
Utilities/pwr_scripts目录。 - 执行命令安装依赖:
pip install -r requirements.txt。
(2)核心配置文件(example_configuration.yml)
需配置 STLINK-V3PWR 和开发板串口信息:
devices:
- type: stlink_pwr_ctrl
name: VDDCORE
vdd: 3.3 # 供电电压
efficiency: 0.87 # SMPS效率
serial: 003800243432511939383236 # STLINK-V3PWR序列号
- type: stlink_com_ctrl
baud_rate: 115200 # 串口波特率
serial: 003A00433331511234333834 # 开发板STLINK序列号
(3)关键 Python 指令
| 功能 | 指令 | 说明 |
|---|---|---|
| STLINK-V3PWR 上电 | python capture.py power -c my_config.yml on |
启动测量工具供电 |
| 捕获功耗数据 | python capture.py capture -c my_config.yml -w capture_full.csv |
保存数据到 CSV 文件 |
| 生成分析报告 | python full_sequence_power.py capture_full.csv |
输出各阶段功耗统计 |
| 图形化显示结果 | python capture.py display -r capture_full.csv |
生成功耗时序图表 |
3. 完整测量流程(6 步落地)
- 硬件搭建:按引脚连接表连接 STLINK-V3PWR 与开发板,完成开发板硬件修改。
- 固件烧录:将官方功耗测量固件烧录到 STM32N6-DK。
- 工具上电:执行 Python 上电指令,启动 STLINK-V3PWR 供电。
- 启动捕获:执行捕获指令,等待脚本就绪。
- 触发测量:按下开发板 USER 按键,触发固件中的测量流程(摄像头→NPU 推理→后处理)。
- 结果分析:执行报告生成和图形化指令,查看各阶段功耗数据。
4. 测量结果解读
4.1 分析报告(核心输出)
报告将按阶段输出功耗详情,示例如下:
1: 2393.54μJ in 19.97ms for camera started (119.86mW)
2: 4257.77μJ in 53.04ms for wait frame (80.27mW)
3: 28662.80μJ in 141.98ms for NOR flash init (201.9mW)
4: 180.60μJ in 1.20ms for nn_buffer copy (150.50mW)
5: 8068.1μJ in 30.46ms for nn inference (264.87mW) # NPU高功耗阶段
6: 12.04μJ in 0.08ms for post processing (150.50mW)
总功耗:34547.8μJ in 247.2ms(平均139.7mW)
4.2 图形化显示
通过display指令生成功耗时序图,可直观观察各阶段功耗波动,快速定位高功耗模块(如 NPU 推理阶段功耗最高)。
5. 总结与关键注意事项
STM32N6 功耗测量的核心是 “精准控制供电链路 + 分阶段捕获 + 自动化分析”,STLINK-V3PWR 的宽动态范围和高精度的确保了从低功耗待机到高功耗 NPU 推理的全场景覆盖。关键注意事项:
- 必须按要求修改开发板硬件,否则会导致供电冲突。
- SMPS 效率需按实际使用的芯片手册调整(官方 DK 板默认 0.87)。
- 测量前需确保固件中低功耗模式配置正确,避免额外功耗干扰结果。
阅读全文
1295