AN5056 是 ST 官方针对X-CUBE-SBSFU扩展包的硬核集成指南,聚焦安全启动 + 安全固件更新方案的移植、配置、调试、优化全流程,解决开发者从评估板迁移到自定义硬件、按需裁剪功能、对接用户应用的核心问题。本文以实战视角完整拆解集成要点,直接落地量产级安全固件方案。
资料获取:【应用笔记】AN5056 X-CUBE-SBSFU STM32Cube扩展包集成指南
1. SBSFU 集成核心基础
X-CUBE-SBSFU 是 STM32 的可信根 + 安全升级一站式方案,复位优先运行安全启动,校验固件合法性;安全更新支持加密传输、验签安装、防回滚、断电续更STMicroelectronics。
- 两种运行模式
- 单槽(1_Image):最大化用户固件空间,无回滚、仅支持本地更新
- 双槽(2_Images):活动槽 + 下载槽 + 交换区,支持 OTA、断电恢复、自动回滚
- 三种加密方案
- ECDSA 验签 + AES-CBC 加密(默认)
- ECDSA 验签 + 明文固件
- AES-GCM 一体加密验签
- 安全底座:RDP 读保护、WRP 写保护、PCROP 只读执行、MPU 内存隔离、防火墙 FWALL、防篡改 Tamper
2. 跨板移植全流程(最常用核心步骤)
移植是 AN5056 的核心章节,按硬件适配→内存映射→双核适配三步完成:
2.1 硬件适配
修改 4 个底层文件即可适配自定义板卡:
- UART 引脚:sfu_low_level.h/c(Ymodem 下载通信)
- Flash 接口:单 / 双存储区驱动配置
- 按键 / GPIO:app_hw.h(触发更新按键)
- 安全引脚:Tamper、DAP 调试端口配置
- STSAFE-A110:I2C 通信配置(高阶安全方案)
2.2 内存映射(最关键)
三个工程(SECoreBin/SBSFU/UserApp)共享链接文件,严格遵守约束:
- SBSFU 区:安全引擎、向量表、可信代码
- 插槽区:活动槽、下载槽、交换区
- 对齐规则:插槽按扇区对齐;交换区≥最大扇区;双槽大小为交换区倍数
- 双 Bank 器件:防火墙代码放 Bank1,数据放 Bank2,确保切换后仍受保护
- 向量表偏移:L4/L0/WB/F4 为 512 字节,H7/F7 为 1024 字节,G0 为 2048 字节,G4 为 4096 字节
2.3 双核适配(H7 系列)
- CM7 运行 SBSFU,默认禁用 CM4
- 用户应用校验通过后,由 CM7 触发 CM4 启动
- 选项字节取消 BCM4 位,禁用双核自动启动
3. SBSFU 核心配置
3.1 功能配置
- 裁剪本地加载器:禁用 SECBOOT_USE_LOCAL_LOADER,节省 Flash
- 开启多镜像:最多 3 组活动 / 下载槽,适配协议栈 + 用户应用复合系统
- 镜像验证:ENABLE_IMAGE_STATE_HANDLING,新固件自检失败自动回滚
3.2 加密方案切换
通过宏SECBOOT_CRYPTO_SCHEME指定,同步修改 se_crypto_config.h 与 app_sfu.h,保持一致。
3.3 安全配置开关(app_sfu.h)
量产必须开启:
- SFU_WRP_PROTECT_ENABLE:写保护
- SFU_RDP_PROTECT_ENABLE:读保护(必开 RDP2)
- SFU_PCROP_PROTECT_ENABLE:代码只读保护
- SFU_FWALL_PROTECT_ENABLE:防火墙隔离
- SFU_DAP_PROTECT_ENABLE:禁用调试端口
3.4 开发 / 生产模式切换
- 开发:关闭所有安全 IP、开启 Verbose、允许调试
- 生产:开启全部保护、关闭调试日志、激活 RDP2、锁定选项字节
4. 加密密钥生成与替换
AN5056 提供标准化密钥流程,杜绝明文泄露:
- AES 对称密钥:替换 OEM_KEY_COMPANY1_key_AES_xxx.bin,编译自动生成 se_key.s
- ECDSA 非对称密钥:替换 ECCKEY1.txt,公钥嵌入设备,私钥留存服务器
- STM32WB:密钥通过 FUS 服务写入 M0 + 安全存储,使用 CubeProgrammer 配置
- KMS 模式:密钥存入安全隔区,通过 PKCS#11 接口调用,不暴露明文
- STSAFE-A110:配对密钥 + 证书链烧录安全元件,EAL5 + 硬件级防护
5. 调试技巧(避坑必备)
- 编译器优化:调试阶段降低优化级别,避免变量被优化导致断点失效
- 内存映射调整:开启 Verbose 后缩小插槽空间,防止区域重叠
- SECoreBin 调试:IDE 加载符号文件,定位安全引擎执行问题
- 保护排查:用 CubeProgrammer 检查 WRP/PCROP 配置,确认保护生效
- 日志开关:SFU_VERBOSE_DEBUG_MODE 输出启动流程,快速定位卡死点
6. 定制化优化(按需裁剪)
6.1 内存优化
- 单槽模式:用户空间翻倍
- 禁用调试日志:节省约 9KB
- 关闭本地加载器:节省约 3KB
- 对称加密 AES-GCM:减小代码体积
6.2 功能优化
- 防火墙内中断管理:低延迟外设响应
- 精简校验流程:缩短启动时间(无物理攻击场景)
6.3 外部 Flash 适配
- OTFDEC 器件:AES-CTR 加密,运行时动态解密
- 无 OTFDEC:使用 SFU_NO_SWAP,下载槽保持加密
7. 用户应用适配(必改要点)
- 链接地址:向量表置于活动槽起始 + 偏移地址,与映射一致
- 向量表重定向:SystemInit 中修改 VTOR,指向新位置
- 固件长度:bin 文件按 16 字节对齐,满足 AES 加密要求
- 数据存储:避开 SBSFU / 插槽 / 交换区,使用空白 Flash 扇区
- 升级触发:双槽模式可替换 UART 为 BLE/WiFi,实现无线 OTA
- 固件版本:postbuild 脚本指定版本号,防回滚生效
- 镜像验证:首次启动调用 SE_APP_Validate,确认固件合法
8. 量产配置要点
- 必开 RDP Level2,实现最高防护,禁止外部读取 Flash
- 锁定选项字节,不可修改保护配置
- 烧录 SBSFU 后,再通过安全方式刷入用户应用
- 密钥统一管理,服务器与设备密钥一一对应
- 全量测试:掉电升级、版本回滚、物理攻击防护
AN5056 是 X-CUBE-SBSFU 从演示工程到量产产品的核心集成手册,覆盖移植、配置、密钥、调试、优化、适配全环节。遵循本文流程,可快速将安全启动与安全固件更新落地到自定义 STM32 硬件,实现防篡改、防破解、零风险升级的量产级安全能力,覆盖工业、物联网、消费电子全场景。
168