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

STM32H5 STiROT启动STiROT_Appli_TrustZone:解决双工程启动难题

12/22 14:02
90
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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 应用路径:
    :: 原配置(适配STiROT_Appli)
    :: set stirot_boot_path_project=Applications/ROT/STiROT_Appli
    :: 新配置(适配STiROT_Appli_TrustZone)
    set stirot_boot_path_project=Applications/ROT/STiROT_Appli_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(安全 + 非安全):
    <!-- 原配置 -->
    <Bool>
      <Name>Is the firmware full secure</Name>
      <Value>0x01</Value>
      <Width>1</Width>
      <Default>0x01</Default>
      <True>0x01</True>
      <False>0x00</False>
      <Tooltip>Tick the box if the firmware is full secure</Tooltip>
      <Dependency>Secure</Dependency>
    </Bool>
    
    <!-- 修改后配置 -->
    <Bool>
      <Name>Is the firmware full secure</Name>
      <Value>0x00</Value>  <!-- 关键修改:关闭全安全 -->
      <Width>1</Width>
      <Default>0x01</Default>
      <True>0x01</True>
      <False>0x00</False>
      <Tooltip>Tick the box if the firmware is full secure</Tooltip>
      <Dependency>Secure</Dependency>
    </Bool>
    
  • 保存文件,完成安全架构适配。

3.3 第三步:重新生成 OBK 密钥文件,适配双工程

核心目的:OBK(密钥配置文件)是 STiROT 的安全认证核心,需重新生成适配 TrustZone 架构的密钥。

  • 操作步骤:
    1. 打开 STM32CubeProgrammer,启动内置的STM32TrustedPackageCreator工具;
    2. 选择「OBKey」标签页,点击「Select XML」,导入第二步修改后的STiROT_Config.xml
    3. 点击「Generate OBKey」,生成适配 TrustZone 的 OBK 文件(自动覆盖原文件);
    4. 若提示 “DA_Config.obk” 相关警告,需同步更新ROT_ProvisioningDAConfigDA_Config.xml,重新生成调试认证证书(默认密钥仅用于开发,产品需自行生成专属密钥)。

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. 关键注意事项

  1. 工具兼容性:STM32CubeH5≥v1.5.0、STM32CubeProgrammer≥v2.17.0 即可,其他版本无需强制匹配;
  2. 密钥安全:默认密钥仅用于开发,产品阶段需在 TrustedPackageCreator 中重新生成专属密钥,避免安全风险;
  3. 产品状态:开发阶段选「OPEN」,量产阶段需切换为「TZ-CLOSED」或「LOCKED」,增强安全性;
  4. 拨码设置:STM32H573I-DK 的 BOOT0 拨码(SW1)需按脚本提示切换,否则无法完成 OBK 烧录。

STiROT_Appli_TrustZone 启动失败的核心是 “配置未适配双工程架构”,关键解决思路是:让 STiROT 识别 TrustZone 应用路径→关闭全安全配置→生成适配双工程的安全密钥。3 步操作聚焦 “配置适配” 和 “安全认证”,无需修改应用代码,即可快速实现 Secure/Non-Secure 双工程的安全启动。

相关推荐