【学习笔记】STM32U575使用SBSFU,验证OTA和双槽模式
2026/7/12 18:30:14 网站建设 项目流程

代码拉取:git clone https://gitcode.com/u012988644/stm32u5-sbsfu-release.git

一:修改 LED 引脚并通过 Loader OTA 升级

修改 LED2 引脚为 PC7:

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

// 将 LED2 引脚改为 PC7#defineLED2_PinGPIO_PIN_7#defineLED2_GPIO_PortGPIOC#defineLED2_CLK_ENABLE()__HAL_RCC_GPIOC_CLK_ENABLE()

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

进入 Loader 模式:

  1. 按住开发板 User 按键(蓝色按键)不松
  2. 按下复位按钮后松开,等待串口输出 Loader 菜单:
====================================================================== = (C) COPYRIGHT 2021 STMicroelectronics = = = = LOCAL LOADER = ====================================================================== ================ New Fw Image ============================ Reset to trigger Installation ------------------------- 1 Download App Image ------------------------------------ 2

通过 Ymodem 更新固件:

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

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

  1. 传输完成后输入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 槽布局:

模式Flash 布局升级方式
默认(双槽)Primary slot(运行) + Secondary slot(暂存)App 内下载到 Secondary,BL2 负责 swap/overwrite 到 Primary
MCUBOOT_PRIMARY_ONLY(单槽)只有 Primary slot直接写入 Primary,无槽交换

本工程启用了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)#defineFLASH_NS_PARTITION_SIZE(0xA0000)/* 640 KB,双槽各一份 */#else#defineFLASH_NS_PARTITION_SIZE(0x140000)/* 1.25 MB,单槽独占 */#endif

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

区域大小
BL2~128 KB
Loader~40 KB
Primary slot(S 24KB + NS 640KB)664 KB
Secondary slot(S 24KB + NS 640KB)664 KB
合计~1496 KB ✅

重新编译与烧录:

依次编译: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 验证并覆盖安装新固件。

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

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

立即咨询