一:修改 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 槽布局:
本工程启用了 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,空间分配验证:
重新编译与烧录:
依次编译: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
|
评论
|