[STM32U5] STM32U575使用SBSFU,验证OTA和双槽模式

[复制链接]
78|4
木木guainv 发表于 2026-8-8 11:31 | 显示全部楼层 |阅读模式
一:修改 LED 引脚并通过 Loader OTA 升级
修改 LED2 引脚为 PC7:

原工程 LED2 默认引脚与 NUCLEO-U575ZI-Q 板载 LED2(绿灯,PC7)不符,在 SBSFU_Appli_NonSecure 中修改引脚定义:

// 将 LED2 引脚改为 PC7
#define LED2_Pin  GPIO_PIN_7
#define LED2_GPIO_Port GPIOC
#define LED2_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()



修改完成后重新编译 SBSFU_Appli(S + NS 子工程),生成新的签名镜像。

进入 Loader 模式:

按住开发板 User 按键(蓝色按键)不松
按下复位按钮后松开,等待串口输出 Loader 菜单:
======================================================================
=              (C) COPYRIGHT 2021 STMicroelectronics                 =
=                                                                    =
=                          LOCAL LOADER                              =
======================================================================


================ New Fw Image ============================

  Reset to trigger Installation ------------------------- 1

  Download App Image ------------------------------------ 2




通过 Ymodem 更新固件:

串口工具选择菜单项 2,进入固件下载等待状态
使用支持 Ymodem 协议的串口工具(如 Tera Term:File → Transfer → YMODEM → Send)发送编译产物中签名后的镜像文件:
SBSFU_Appli/Binary/sbsfu_app_sign.bin


注意:发送的必须是经 postbuild.sh 签名打包后的 .bin,不能直接发送原始 .elf。

传输完成后输入2,开发板自动复位,BL2 验证新镜像签名通过后跳转启动,输入2, LED2(PC7)正常亮灭了。✅
=================== Main Menu ============================

  Test Protections -------------------------------------- 1

  Toggle Secure LED ------------------------------------- 2

  Selection :



关于 MCUBOOT_PRIMARY_ONLY 与 App 菜单选项 3
App 菜单只有选项 1 和 2,选项 3(New Fw Image)被编译宏屏蔽:

// SBSFU_Appli/NonSecure/Src/main.c
#if !defined(MCUBOOT_PRIMARY_ONLY)
  printf("  New Fw Image ------------------------------------------ 3\r\n\n");
#endif




MCUBOOT_PRIMARY_ONLY 的含义
MCUBoot 支持两种 Flash 槽布局:

227736a72a464787d2.png

本工程启用了 MCUBOOT_PRIMARY_ONLY,因此:

没有 Secondary slot,节省约一半 Flash 空间
BL2 不做槽交换,启动流程更简单
App 内的固件下载功能(选项 3 及整个 fw_update_app.c)被 #if !defined(MCUBOOT_PRIMARY_ONLY) 整体编译掉
升级只能通过 Loader 模式:按住 User 键复位进入 Loader,由 Loader 直接将新固件写入 Primary slot,BL2 验证签名后启动
二:开启双槽模式,开放 App 内 OTA 升级(菜单选项 3)
背景:

原工程启用了 MCUBOOT_PRIMARY_ONLY,导致 App 菜单选项 3(New Fw Image)被编译宏整体屏蔽,只能通过 Loader 模式升级固件。注释掉该宏后切换为双槽 overwrite 模式,App 内即可直接通过 Ymodem 下载新固件。

修改 Linker/flash_layout.h:

// 注释掉 MCUBOOT_PRIMARY_ONLY,切换为双槽模式
/* #define MCUBOOT_PRIMARY_ONLY */



MCUBOOT_OVERWRITE_ONLY 保持不变,组合为双槽 overwrite 模式:

Primary slot:运行当前固件
Secondary slot:接收新固件
BL2 直接用 Secondary 覆盖 Primary,无需 swap/confirm 机制
Flash 空间变化:

去掉 MCUBOOT_PRIMARY_ONLY 后,FLASH_NS_PARTITION_SIZE 从 1.25 MB 缩减到 640 KB(需为 Secondary slot 留出空间):

// flash_layout.h
#if !defined(MCUBOOT_PRIMARY_ONLY)
#define FLASH_NS_PARTITION_SIZE  (0xA0000)  /* 640 KB,双槽各一份 */
#else
#define FLASH_NS_PARTITION_SIZE  (0x140000) /* 1.25 MB,单槽独占 */
#endif



STM32U575 Flash 共 2 MB,空间分配验证:

585686a72a4472e2f8.png

重新编译与烧录:

依次编译:SBSFU_Boot → SBSFU_Appli(S + NS)→ SBSFU_Loader

重新烧录:

regression.sh → SBSFU_UPDATE.sh


升级流程(App 内 OTA):

启动后 App 菜单新增选项 3:

=================== Main Menu ============================

  Test Protections -------------------------------------- 1

  Toggle Secure LED ------------------------------------- 2

  New Fw Image ------------------------------------------ 3

  Selection :


选择 3 进入固件下载子菜单,选择 2 通过 Ymodem 发送签名镜像,下载完成后复位,BL2 验证并覆盖安装新固件。
————————————————
版权声明:本文为CSDN博主「IIIIllllIII」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012988644/article/details/162765555

评论

不错的思路哈  发表于 2026-8-8 14:02
tpgf 发表于 2026-8-8 14:02 | 显示全部楼层
双槽是OTA安全更新的前提,需先完成闪存的物理分区规划,再实现分区管理逻辑
zhuotuzi 发表于 2026-8-11 16:52 | 显示全部楼层
SBSFU是 ST 官方适配 STM32U5 系列(U575 内置 SAES、HDP、TrustZone 安全单元)的开源启动固件
OliviaSH 发表于 2026-8-13 17:24 | 显示全部楼层
PC7引脚没问题,注意检查Loader菜单里的安装提示,确保按顺序操作。我还遇到过升级失败是闪存分区配置不对的,要检查分区表。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

227

主题

4620

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部
0