STM32H5 的 STiROT(ST 集成式安全启动与固件更新模块)可免开发 bootloader 实现安全需求,但其 STiROT_Appli_TrustZone 例程(含 Secure/Non-Secure 双工程)无法直接启动 —— 核心原因是默认配置适配全安全的 STiROT_Appli,需修改环境变量、安全配置文件并重新生成 OBK 密钥文件,3 步即可实现正常启动。
资料获取:开发经验 | LAT1556 如何从STiROT启动STiROT_Appli_TrustZone
1. 核心背景:为什么 STiROT_Appli_TrustZone 启动失败?
1.1 STiROT 的核心价值
STiROT 为 STM32H5 提供现成的安全启动和固件更新能力,用户无需自主开发 bootloader,仅需聚焦应用程序开发。STM32CubeH5 提供两个核心例程:
- STiROT_Appli:全安全(Full Secure)单工程,默认配置就绪,可直接运行;
- STiROT_Appli_TrustZone:安全(Secure)+ 非安全(Non-Secure)双工程,Flash 布局、安全配置与全安全版本不同。
1.2 启动失败的关键诱因
- 共享配置冲突:两个例程共享 ROT_Provisioning 目录下的环境配置(env.bat)和安全配置(STiROT_Config.xml),默认指向 STiROT_Appli;
- Flash 布局差异:TrustZone 版本需划分安全区和非安全区,默认烧录脚本与全安全版本不兼容;
- 缺少专属 OBK 文件:TrustZone 版本需匹配安全 / 非安全架构的 OBK(密钥配置文件),默认 OBK 为全安全版本生成。
2. 核心差异:STiROT_Appli vs STiROT_Appli_TrustZone
| 对比维度 | STiROT_Appli | STiROT_Appli_TrustZone |
|---|---|---|
| 工程架构 | 单工程(全安全) | 双工程(Secure+Non-Secure) |
| Flash 布局 | 单一安全区 | 安全区 + 非安全区划分 |
| 配置依赖 | 默认 env.bat、STiROT_Config.xml | 需修改配置指向双工程架构 |
| OBK 文件要求 | 通用全安全 OBK | 需专属 OBK 适配双工程密钥配置 |
3. 分步解决方案:3 步实现正常启动
前提环境
- 硬件:STM32H573I-DK 开发板;
- 软件:STM32CubeH5 v1.5.0、STM32CubeProgrammer v2.17.0、STM32CubeIDE 1.16.1(其他版本兼容,开发板为关键依赖)。
3.1 第一步:修改 env.bat,指定 TrustZone 应用路径
核心目的:让 provisioning 脚本识别并适配 STiROT_Appli_TrustZone 工程。
- 操作路径:打开 STM32CubeH5 的 ROT_Provisioning 目录:
STM32CubeRepositorySTM32Cube_FW_H5_V1.5.0ProjectsSTM32H573I-DKROT_Provisioningenv.bat - 修改内容:注释全安全应用路径,启用 TrustZone 应用路径:
- 保存后关闭文件,确保脚本指向双工程架构的应用。
3.2 第二步:修改 STiROT_Config.xml,关闭全安全模式
核心目的:告知 STiROT 当前固件为 Secure/Non-Secure 双工程,而非全安全固件。
- 操作路径:打开安全配置文件:
STM32CubeRepositorySTM32Cube_FW_H5_V1.5.0ProjectsSTM32H573I-DKROT_ProvisioningSTiROTConfigSTiROT_Config.xml - 修改内容:将 “Is the firmware full secure” 的值从 0x01(全安全)改为 0x00(安全 + 非安全):
- 保存文件,完成安全架构适配。
3.3 第三步:重新生成 OBK 密钥文件,适配双工程
核心目的:OBK(密钥配置文件)是 STiROT 的安全认证核心,需重新生成适配 TrustZone 架构的密钥。
- 操作步骤:
- 打开 STM32CubeProgrammer,启动内置的
STM32TrustedPackageCreator工具; - 选择「OBKey」标签页,点击「Select XML」,导入第二步修改后的
STiROT_Config.xml; - 点击「Generate OBKey」,生成适配 TrustZone 的 OBK 文件(自动覆盖原文件);
- 若提示 “DA_Config.obk” 相关警告,需同步更新
ROT_ProvisioningDAConfigDA_Config.xml,重新生成调试认证证书(默认密钥仅用于开发,产品需自行生成专属密钥)。
- 打开 STM32CubeProgrammer,启动内置的
4. 启动验证与关键操作
4.1 运行 provisioning 脚本
- 打开 CMD,进入路径:
STM32CubeRepositorySTM32Cube_FW_H5_V1.5.0ProjectsSTM32H573I-DKROT_ProvisioningSTiROT; - 运行
provisioning.bat,按提示依次回车:- 产品状态选择「OPEN」(开发阶段调试用);
- 按提示切换开发板 BOOT0 拨码(先拨到 SYSTEM,完成烧录后拨回 FLASH);
- 脚本执行成功后,会自动更新烧录脚本、Option Bytes 和工程的.icf 链接文件(适配 Secure/Non-Secure 分区)。
4.2 固件生成与验证
- 用 STM32CubeIDE 打开 STiROT_Appli_TrustZone 的 Secure 和 Non-Secure 工程,分别编译生成固件;
- 开发板上电后,打开串口终端,若看到 “Start BootLoader” 及应用启动日志,说明启动成功。
5. 关键注意事项
- 工具兼容性:STM32CubeH5≥v1.5.0、STM32CubeProgrammer≥v2.17.0 即可,其他版本无需强制匹配;
- 密钥安全:默认密钥仅用于开发,产品阶段需在 TrustedPackageCreator 中重新生成专属密钥,避免安全风险;
- 产品状态:开发阶段选「OPEN」,量产阶段需切换为「TZ-CLOSED」或「LOCKED」,增强安全性;
- 拨码设置:STM32H573I-DK 的 BOOT0 拨码(SW1)需按脚本提示切换,否则无法完成 OBK 烧录。
STiROT_Appli_TrustZone 启动失败的核心是 “配置未适配双工程架构”,关键解决思路是:让 STiROT 识别 TrustZone 应用路径→关闭全安全配置→生成适配双工程的安全密钥。3 步操作聚焦 “配置适配” 和 “安全认证”,无需修改应用代码,即可快速实现 Secure/Non-Secure 双工程的安全启动。
90