当前位置: 首页 > news >正文

【学习笔记】STM32U575使用SBSFU,移植ST Cube源码

这是参考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 :

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

http://www.jsqmd.com/news/1166326/

相关文章:

  • 2026春晚AI刷屏后,我找到真正可落地的大模型API解决方案 | 词元之河(TokenRiver.ai)全拆解
  • 【VS2026】_WIN32_WINNT 宏版本列表
  • RuoYi-Cloud-Plus 2.5.1 权限与数据层深度解析:Sa-Token + Mybatis-Plus 实现 3 种数据权限控制
  • 高压隔离系统设计:ISOM8710与MKV58F1M0VLQ24应用指南
  • Unity Input System 入门指南:从核心概念到实战应用
  • 亲身到店探访天津萧邦官方售后服务中心|最新电话及地址(2026年7月最新) - 萧邦中国官方服务中心
  • 国有投资集团忙闲不均破解:北京华恒智信定岗定编案例
  • UE4逆向实战:UFT工具自动化定位GNames与GObjects地址全攻略
  • OpenClaw不是硬件:本地智能体框架的轻量化部署指南
  • ChatGPT API调用成本失控?实时Token计算器+预算预警系统搭建实录(附AWS Lambda无服务器部署方案)
  • 英雄联盟玩家的终极效率工具:告别繁琐操作,专注游戏本身
  • 免费风扇控制终极指南:用FanControl彻底解决电脑噪音和散热难题
  • 2026葫芦岛黄金回收白银回收铂金回收靠谱临街实体公安备案支持到店核验门店联系方式推荐
  • 直流负载管理系统优化:G6D-ASI继电器与PIC18LF45K40 MCU实践
  • AI工具效率提升与工作流重构:避免任务膨胀的实战指南
  • 腾讯减持快手转向AI投资:技术布局与开发者机遇分析
  • RAG 超级教程:从原理到实战,用向量+重排模型搭出又准又省钱的 AI 问答
  • 为什么92%的开发者在ChatGPT API调用中漏掉这3个Headers?——HTTP协议层深度优化指南
  • 紧急预警!ChatGPT免费用户正面临“渐进式功能阉割”——依据OpenAI Terms v4.27与最新CDN路由日志的72小时实证分析
  • 宝珀中国官方售后服务中心|地址与客户服务热线权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • 告别Excel手工导入:基于Luban与Jenkins的Unity配置表自动化管线实践
  • 2026年半封闭丝杆模组选这3家,实用不踩坑!
  • 雅典官方服务项目及价格查询|服务热线及全部维修详细地址权威信息通告(2026年7月最新) - 亨得利官方服务中心
  • 互联网大厂 Java 求职者面试:如何应对复杂问题的挑战
  • 工业级高精度ADC与STM32信号采集系统设计
  • ArcGIS Pro 3.1 符号化实战:从单一符号到热点图的5种方法对比
  • 喜马拉雅音频下载器:5步解锁VIP音频永久保存方案
  • C++控制台游戏开发实战:从零实现《和平精英》文字版
  • 2026年7月最新天梭南京江宁万达广场维修保养服务电话 - 天梭服务中心
  • Agent 插件体系:用工厂模式构建可插拔的 Agent 工具注册与发现机制