• 正文
  • 相关推荐
申请入驻 产业图谱

STM32N6 使用 STM32CubeProgrammer 新版本进行签名的变化

09/29 17:06
605
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32N6 没有内置片上 Flash,外部 XIP 启动的固件,必须使用STM32_SigningTool_CLI.exe对原始 BIN 文件添加安全 Header 签名处理,生成 trusted 可信固件镜像,芯片才能正常加载运行。

很多开发者会遇到版本兼容陷阱:同样一份 FSBL、XIP 应用 BIN 文件,使用 STM32CubeProgrammer v2.18、v2.19 签名,下载到外部 Flash 后,板子可以正常启动;升级到 v2.21、v2.22 之后,沿用旧命令签名,烧录完成却完全无法运行,LED 无任何反应。 不是工具 BUG,而是新版本签名工具增加了强制要求的‑align命令参数。本文还原故障现象、新旧命令差异、Powershell 实际调用示例,梳理工程脚本维护注意事项。

资料获取:实战经验 | LAT1714 STM32N6使用STM32CubeProgrammer新版本进行签名的变化

1. 故障复现背景

1.1 测试环境

  • 硬件:STM32N647Z0H3Q 芯片、STM32N6570‑DK 开发板;
  • 固件库:STM32Cube_FW_N6_V1.2.0,示例工程Template_FSBL_XIP;
  • 工具版本:STM32CubeProgrammer v2.19(工作正常)、v2.22(原版命令签名固件无法启动)。

1.2 旧版可用签名命令(v2.21 之前版本)

STM32Cube_FW_N6_V1.2.0工程 readme 文档给出的原始命令,适用于 v2.19、v2.18 等旧版本。

FSBL 固件签名命令:

STM32_SigningTool_CLI.exe -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL‑trusted.bin -hv 2.3 -dump FSBL‑trusted.bin

用户 XIP 应用固件签名命令:

STM32_SigningTool_CLI.exe -bin Project.bin -nk -of 0x80000000 -t fsbl -o Project‑trusted.bin -hv 2.3 -dump Project‑trusted.bin

烧录配置:

  • FSBL‑trusted.bin 写入外部 Flash 地址:0x70000000
  • Project‑trusted.bin 写入外部 Flash 地址:0x70100000

在 development boot 模式烧录完成,切换 Flash boot;v2.19 签名镜像可以看到开发板绿色 LED 闪烁,程序正常跑起来;完全一样的 BIN 文件,直接用 v2.22 执行上面这套旧命令,板子上电无任何运行迹象。

现象迷惑点:签名工具本身执行不会报错,不会输出失败日志,生成输出文件大小也看起来正常,但是 BootROM/FSBL 找不到合法镜像,固件直接不启动。

2. 根因:v2.21 及之后版本强制要求‑align 参数

升级至STM32Cube_FW_N6_V1.3.0之后,工程 readme.html 增加明确警告:

Warning If using CubeProgrammer v2.21 version or more recent, add -align option in the command line.

从 v2.21 版本开始,STM32_SigningTool_CLI.exe行为发生变化,不再自动做 payload 对齐处理,需要手工追加‑align 参数,把有效负载对齐到 0x400 偏移STMicroele...。缺少该参数生成的镜像 Header 偏移不符合 BootROM 预期,FSBL 无法识别镜像,设备启动失败。

2.1 适配新版本的完整正确命令(v2.21、v2.22 及更新)

FSBL 固件签名(末尾增加‑align):

STM32_SigningTool_CLI.exe -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL‑trusted.bin -hv 2.3 -dump FSBL‑trusted.bin -align

XIP 应用固件签名(末尾增加‑align):

STM32_SigningTool_CLI.exe -bin Project.bin -nk -of 0x80000000 -t fsbl -o Project‑trusted.bin -hv 2.3 -dump Project‑trusted.bin -align

2.2 Windows Powershell 完整调用示例

当安装路径为C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammerV222,Powershell 脚本需要带引号处理带空格路径:

&"C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammerV222\bin\STM32_SigningTool_CLI.exe" -bin FSBL.bin -nk -of 0x80000000 -t fsbl -o FSBL‑trusted.bin -hv 2.3 -dump FSBL‑trusted.bin -align

使用追加‑align参数重新生成 trusted 镜像,烧录到对应外部 Flash 地址,切换 Flash boot,开发板绿色 LED 恢复闪烁,系统正常启动。

3. 工程落地风险点与排查清单

3.1 版本对应关系速查表

STM32CubeProgrammer 版本 是否需要‑align 参数
v2.20 及更早(v2.18 /v2.19) 不需要‑align,加上反而也可兼容运行
v2.21、v2.22 以及更高版本 必须添加‑align 参数,否则固件无法启动

补充:旧版本工具命令行加上‑align 参数不会带来负面影响,项目构建脚本直接统一带上‑align,可做到新旧工具版本兼容,降低后续升级踩坑概率。

3.2 高频踩坑场景

  1. 本地环境工具升级,但 post‑build 编译脚本没有同步更新 CubeIDE 工程、Jenkins CI 自动化脚本沿用从 V1.2.0 复制出来的旧 bat/cmd 脚本,电脑升级 CubeProgrammer 到 v2.22 之后,持续生成无法启动镜像;工具本身返回 0 成功码,很难第一时间定位。
  2. 开发机与 CI 服务器工具版本不一致 本地电脑是 v2.19 签名可以跑;服务器环境更新到 v2.22,产出固件样机无法启动,复现问题困难。
  3. 只修改了应用工程签名,忘记修改 FSBL 签名命令 FSBL 和 Application 两个 BIN 都要使用带‑align 的完整命令,只改其中一个,依然启动失败。

3.3 故障排查步骤

  1. 确认当前 STM32CubeProgrammer 完整版本号;
  2. v2.21 及以上版本,检查脚本内两条签名命令(FSBL、Project)是否都已经追加‑align;
  3. 不要只看工具返回 errorlevel=0,必须硬件上电验证启动行为;
  4. 参考新版 CubeFW 包内 readme 文档,核对命令行模板。

4. 小结

  1. STM32N6 XIP‑FSBL 方案,STM32_SigningTool_CLI.exe签名行为随 STM32CubeProgrammer 大版本发生变更;v2.21 及更新版本必须增加‑align参数,缺少参数工具不会报错,但生成镜像无法被 BootROM 识别,设备无法启动。
  2. FSBL 二进制、用户应用 Project 二进制,两条签名命令都需要追加‑align参数,不能遗漏任意一方。
  3. 建议 CI、post‑build 脚本直接统一写入‑align选项,实现向下兼容,后续工具升级不会再次出现启动故障。
  4. 不能仅凭命令行返回码判断镜像有效性,STM32N6 签名输出结果必须经过实际硬件上电验证。

5. FAQ

Q:我用 v2.22 工具,旧命令没有‑align,命令执行没有报错,为什么板子不跑?

A:从 v2.21 开始工具不再自动做 payload 对齐,生成镜像 Header 偏移不满足 BootROM 要求;CLI 返回成功,但镜像本身不符合硬件启动条件,这是该问题最容易迷惑人的地方。

Q:在 v2.19 旧版本工具上,命令强行加上‑align 参数会不会出问题?

A:LAT1714 实测,旧版本工具识别该参数,镜像可以正常启动;因此构建脚本统一带上‑align 是推荐的兼容写法。

Q:只有应用固件要加‑align,FSBL 可以不加吗?

A:FSBL 和应用镜像都需要做对齐,两条签名命令都必须带上‑align 参数。

免责声明:本文全部内容基于 ST 官方 LAT1714 文档,实际项目命令行、固件部署请以 ST 官方 readme、UM2543 手册为准。

相关推荐