【学习笔记】STM32U575使用SBSFU,移植ST Cube源码
2026/7/11 8:29:38 网站建设 项目流程

这是参考STM32U585修改的工程,用于U575实验学习。
代码下载地址:git clone https://gitcode.com/u012988644/stm32u5-sbsfu-release.git
代码分支:stm32u575

调试记录

手里没有 STM32U585 板子,只有一块 NUCLEO-U575ZI-Q 评估板(STM32U575)。

阶段一:直接使用 U585 固件烧录 U575(失败)

步骤:

  1. 在 STM32CubeIDE 下依次编译 SBSFU_Boot、SBSFU_Loader、SBSFU_Appli
  2. SBSFU_Boot/STM32CubeIDE路径下打开 Git Bash,连接开发板,运行regression.sh回滚选项字节配置
  3. 运行SBSFU_UPDATE.sh烧录固件
  4. 打开串口,复位后持续触发 TAMPER 检测,循环打印日志:
[INF] TAMPER SEED [0x3fb7deba,0x7c7718e3,0x53d6d43b,0x3a978920] [INF] TAMPER Activated [INF] BANK 1 secur[INF] TAMPER SEED [0x509fe951,0x695476d2,0xe72c8c8d,0xc2208dfc] [INF] TAMPER Activated ...

原因:默认同时激活了内部和外部 tamper(TFM_TAMPER_ENABLE = ALL_TAMPER):

// SBSFU_Boot/Inc/boot_hal_cfg.h#defineNO_TAMPER(0)/*!< No tamper activated */#defineINTERNAL_TAMPER_ONLY(1)/*!< Only Internal tamper activated */#defineALL_TAMPER(2)/*!< Internal and External tamper activated */#defineTFM_TAMPER_ENABLEALL_TAMPER

MCU 变砖与恢复:

  1. 过了一会 log 停止输出,STLink 也无法连接
  2. 由于未运行hardening.sh(该脚本会锁死启动地址),仍可恢复:
    • 短接PH3(BOOT 引脚)到 VDD,按复位按钮
    • STLink 连接后,同时修改选项字RDP=0xAA并取消TZEN(TZ 关闭必须伴随 RDP 降级,需同时 Apply)
  3. MCU 恢复正常

临时绕过外部 TAMPER:

查数据手册,TAMP8 的 IN/OUT 引脚为PE5/PE4,短接这两个引脚后重新烧录,TAMPER 循环日志消失:

[INF] BANK 1 secure flash [0, 15] : OB [0, 127] [ERR] Unexpected value for secure flash protection: set wmsec1 [INF] BANK 1 flash write protection [2, 12] : OB [127, 0] [ERR] Unexpected value for write protection : set wrp1 [INF] BANK 2 flash write protection [123, 127] : OB [127, 0] [ERR] Unexpected value for write protection : set wrp2 [INF] BANK 1 secure user flash [0, 11] : OB [0, 0] [ERR] Unexpected value for secure user flash protection : set hdp1 [INF] RDPLevel 0xaa (0xbb) [ERR] Unexpected value for RDP level [INF] Programming RDP to bb [INF] Unplug/Plug jumper JP3 (IDD)

最简解法:TFM_TAMPER_ENABLE改为INTERNAL_TAMPER_ONLY重新编译烧录,直接关闭外部 tamper 检测,无需短接引脚。

  1. 根据 log 提示断开 IDD 跳线(代码内部修改了 RDP 等级,必须断电才能生效,复位无效)。断电重新上电后:
[INF] Starting bootloader OEMiROT [INF] Initializing BL2 NV area : Power down/reset not supported... [INF] BL2 NV Area Initialized : Power Down/reset supported [INF] Consistent BL2 NV Counter 0 = 0x0 [WRN] Image 0 is installed [INF] verify sig key id 0 [INF] checking public key 47 5b [INF] verifying signature hlen 20
  1. 日志未完成跳转,菜单无输出 —— 确认是未修改目标芯片型号导致的,不能偷懒。

阶段二:移植到 STM32U575(成功)

修改芯片型号(STM32CubeIDE):

  • PropertiesC/C++ BuildSettingsBuild Steps→ Pre-build steps:将STM32U585xx改为STM32U575xx
  • PropertiesC/C++ GeneralPaths and SymbolsSymbols(GNU C):同样替换编译宏

SBSFU_Boot 移植:

问题 1:STM32U585 有 CRYP 外设(CRYP_HandleTypeDef),STM32U575 只有 AES 外设(AES_HandleTypeDef

修改config-boot.h,禁用硬件加速:

/* STM32U575 has no CRYP peripheral (only AES), disable HW accel *//* #define BL2_HW_ACCEL_ENABLE */

效果:MBEDTLS_AES_ALTMBEDTLS_ECDSA_VERIFY_ALTMBEDTLS_ECP_ALT均不启用,aes_alt.c不参与编译,改用MBEDTLS_HMAC_DRBG_C(软件 DRBG)。

问题 2:STM32U575 无 SAES 外设,RCC_PeriphCLKInitTypeDef中无SaesClockSelection字段

修改stm32u5xx_hal_msp.c,加条件编译:

#ifdefined(SAES).SaesClockSelection=0,#endif/* defined(SAES) */

Boot 工程编译通过。✅

SBSFU_Loader 移植:

问题:编译 Secure 分区报错,缺少partition_stm32u575xx.h

partition_stm32u585xx.h复制为partition_stm32u575xx.h,修改文件头 include guard 即可(内容完全基于region_defs.h宏,无需其他改动)。Appli 工程同步处理。

Loader 工程 S/NS 全部编译通过。✅

SBSFU_Appli 移植:

问题:缺少链接脚本STM32U575AIIX_FLASH.ld

STM32U585AIIX_FLASH.ld复制为STM32U575AIIX_FLASH.ld(内容同样基于region_defs.h宏,无需修改),S 和 NS 子工程均需添加。

Appli 工程 S/NS 全部编译通过。✅

烧录与启动:

依次执行regression.shSBSFU_UPDATE.sh,开机成功,串口输出:

[INF] TAMPER Activated [INF] BANK 1 secure flash [0, 15] : OB [0, 127] [ERR] Unexpected value for secure flash protection: set wmsec1 [INF] BANK 1 flash write protection [2, 12] : OB [127, 0] [ERR] Unexpected value for write protection : set wrp1 [INF] BANK 2 flash write protection [123, 127] : OB [127, 0] [ERR] Unexpected value for write protection : set wrp2 [INF] BANK 1 secure user flash [0, 11] : OB [0, 0] [ERR] Unexpected value for secure user flash protection : set hdp1 [INF] RDPLevel 0xaa (0xbb) [ERR] Unexpected value for RDP level [INF] Programming RDP to bb [INF] Unplug/Plug jumper JP3 (IDD) [INF] Flash operation: Op=0x0, Area=0x0, Address=0x0 [INF] Starting bootloader OEMiROT [INF] Initializing BL2 NV area : Power down/reset not supported... [INF] Init BL2 NV Header area: Done [INF] Initializing BL2 NV Counters [INF] Init BL2 NV counters to 0 : Done [INF] BL2 NV Area Initialized : Power Down/reset supported [INF] Checking BL2 NV area [INF] Checking BL2 NV area header [INF] Checking BL2 NV Counter consistency [INF] Consistent BL2 NV Counter 0 = 0x0 [WRN] Image 0 is installed [INF] Starting validation of primary slot(s) [INF] verify counter 0 1000000 0 [INF] counter 0 : ok [INF] verify sig key id 0 [INF] checking public key 46 5b [INF] verifying signature hlen 20 [INF] signature OK [INF] Counter 0 set to 0x1000000 [INF] Bootloader chainload address offset: 0x1a000 [INF] Jumping to the first image slot
====================================================================== = (C) COPYRIGHT 2021 STMicroelectronics = = = = User App #A = ====================================================================== =================== Main Menu ============================ Test Protections -------------------------------------- 1 Toggle Secure LED ------------------------------------- 2 Selection :

启动成功,应用菜单正常输出。✅

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询