
引言' n% z8 }* L0 b0 N, o4 B& o ; J5 B& h0 I- q- J: @ X-CUBE-SBSFU安全启动和安全固件更新解决方案允许使用新固件版本更新STM32微控制器内置程序、添加新功能并更正潜在问题。更新过程以安全方式执行,以防止未经授权的更新以及访问设备上的机密数据。 安全启动(可信根服务)是一种不可变代码,总是在系统复位后执行。它检查STM32静态保护、激活STM32运行时保护措施,然后在每次执行前验证应用程序代码的真实性和完整性,以确保无效或恶意代码不能运行。 安全固件更新应用程序通过使用Ymodem协议的UART接口接收固件镜像。它会在安装代码之前检查其真实性和完整性。固件更新可更新整个固件镜像,或者部分镜像。示例代码可灵活配置,可配置使用对你或非对称加密方案,采用明文或密文方案。工程以两种方案提供: • 单插槽配置,以使固件镜像尺寸最大化" r; c. S; Z) Y* D • 双插槽配置,以确保安全镜像安装,并启用物联网器件中常用的OTA固件更新功能。3 ~' @, b: ^2 s 对于具有多个固件(如协议栈、中间件和用户应用程序)的复杂系统,固件镜像配置最多可扩展到三个固件镜像。. `4 k( m/ s* A- d6 F. b8 v 安全密钥管理服务通过PKCS #11 API(基于KEY ID的API)向用户应用程序提供加密服务,这些API在受保护和隔离的环境中执行。用户应用程序密钥存储在受保护和隔离的环境中,以便进行安全更新:真实性检查、数据解密和数据完整性检查。* g. H6 t, c. _* K7 k- o STSAFE-A110是一种防篡改安全元件(通过硬件通用标准EAL5+认证),用于托管X509证书和密钥,并在安全启动和安全固件更新过程中执行用于固件镜像身份确认的验证。# Y9 M S' X3 O X-CUBE-SBSFU用户手册(UM2262)讲解X-CUBE-SBSFU入门知识并详细介绍SBSFU功能。该应用笔记描述了如何调整X-CUBE-SBSFU并将其与用户应用程序集成;它回答了诸如以下问题: • 如何将X-CUBE-SBSFU移植到另一块板? • 如何根据用户的需求微调X-CUBE-SBSFU配置?' { g) K/ y" b • 如何生成新的固件加密密钥? • 如何调试X-CUBE-SBSFU? • 如何调整SBSFU?$ z: O9 R; w& c; Y8 o5 s • 如何调整用户的应用程序?" S& s6 Y8 G+ K 注: 在该应用笔记中,使用IAR嵌入式Workbench® IDE作为示例,为项目配置提供指南。安全启动和安全固件更新应用程序被称为SBSFU。 注: 在名称为1_Image 的示例中对单插槽配置进行了演示。8 m& h" J. l+ W9 @ v+ k1 L 在名为2_Images 的示例中对双插槽配置进行了演示。 1 概述 表 1和表 2给出了相关缩略语和术语的定义,帮助您更好地理解本文档。6 U- w1 I/ O: T& T ' }* G4 t# m7 x9 c6 G N H4 h, u5 W5 N ![]() ' F' @6 M9 l6 C2 L" G( r$ p5 W X-CUBE-SBSFU安全启动和安全固件更新扩展包可在基于Arm®(a) Cortex®-M处理器的STM32 32位微控制器上运行。8 x/ d) q# L( J }$ X 3.移植X-CUBE-SBSFU到另一块板上 X-CUBE-SBSFU补充了STM32Cube™软件技术,使不同STM32微控制器之间更易移植。它附带一组在给定的STM32板上实现的示例,可作为有用的起点将X-CUBE-SBSFU移植到另一块STM32板。本文档中将NUCLEO-L476RG和NUCLEO-L432KC板作为示例。 3.1 硬件适配1 m6 [/ k) D$ b2 ]' I" m 需要进行一些更改,以使X-CUBE-SBSFU适应另一块板:( m3 g. T7 o7 H; q# [2 Y2 D/ j5 u 1. GPIO配置,用于与主机PC进行UART通信(在sfu_low_level.h文件中) 2. Flash配置:NUCLEO-L432KC 给出了单存储区Flash接口的例子,而NUCLEO-L476RG则基于双存储区(在sfu_low_level.c文件中) 3. 按钮配置:NUCLEO-L476RG给出了基于按钮的例子,而NUCLEO-L432KC使用GPIO模拟虚拟按钮(在app_hw.h文件中)3 p, z9 N: Y3 z# H3 o- H: B: _" R 4. Tamper GPIO引脚配置(在sfu_low_level_security.h文件中)/ j# H) O$ T: N' e( ]' U n 5. DAP - 调试端口配置(在sfu_low_level_security.h文件中) 6. I2C总线配置,用于与STSAFE-A110进行通信(在B-L4S5I-IOT01A\Applications\2_Images_STSAFE\2_Images_SECoreBin的stsafea_service_interface.c文件中)。图 1显示SBSFU项目结构,以及期望移植更改的文件位置。: J/ n# j9 s) _. L- @3 B6 t S 3 J2 p; p4 ~3 ?; ?' w( Y! P$ b ![]() _6 U' u. P: [$ _% l 3.2 内存映射定义( b# V. n# B% i0 y5 H9 {1 J 正如X-CUBE-SBSFU用户手册(参见[10])中所强调,一个关键因素是器件闪存内所有元素的布局: • 安全引擎:受保护的环境,以管理所有关键数据和操作。. r1 e. {9 Q. E: ^2 W • SBSFU:安全启动和安全固件更新流程 \4 `9 G5 T' T • 活动插槽:该插槽包含了活动固件(带固件的固件头文件) • 下载插槽:此插槽用于存储下载的固件(带加密固件的固件头文件),以便在下次重启时安装 • 交换区:用来在安装过程中交换活动插槽和下载插槽的内容的Flash存储区 图 2通过NUCLEO-L476RG示例讲解闪存映射。 $ s0 @% S8 x# U9 y$ L ![]() 三个项目(SECoreBin、SBSFU、UserApp)共享的链接器文件定义在Linker_Common文件夹中分组,如图 3中所示:6 z& d( j/ o' J# e5 x3 J& G • mapping_fwimg.icf:包含固件镜像定义,比如活动插槽、下载插槽以及交换区 • Mapping_sbsfu.icf:contains:包含SBSFU定义,例如SE_Code_region、SE_Key_region、以及SE_IF_region) c8 Y' h% K. k. ^2 | • Mapping_export.h:从mapping_sbsfu.icf和mapping_fwimg.icf:从mapping_sbsfu.icf和mapping_fwimg.icf 导出符号到SBSFU应用程序$ U/ l$ e1 `4 N) F; l( y 当添加更多代码后,每个区域可能要做相应的扩展,或者转移到另一个位置,这些都是允许的,只要最终的设置满足应用的安全需求。 ![]() , n3 x4 f. J4 s* b% u( g 安全外设配置(RDP、WRP、PCROP、FWALL、安全用户存储区(如果当前型号拥有))是基于SBSFU链接符号自动计算的;但是MPU配置不一样,因为存在以下约束: • 每个MPU区域的基址必须是MPU区域大小的倍数。 • 每个MPU区域可以划分为8个子区域,以调整大小。 图 4中说明了具有MPU隔离的映射约束。 ; ?& g. W4 k3 }; |2 N$ O( ^ ![]() * m6 ~! `2 Q5 A9 z 另一个典型用例是激活插槽区域的MPU配置,以授权执行用户应用程序。图 5演示如何遵守NUCLEO-L073RZ上的MPU约束 ![]() . I/ O3 w! k! [& W2 g3 j& G' i 完整版请查看:附件' O% C; n) o" t2 [ # U7 h" w5 e0 E0 s6 S # \0 o X% t# n7 v |
X-CUBE-SBSFU STM32Cube扩展包集成指南.pdf
下载2.87 MB, 下载次数: 3
新版STM32Cube for Visual Studio Code开发体验
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用
经验分享常被误解的开、关总中断
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32C0测评】Nucleo-C092开发板使用PWM控制板载LED呼吸灯
【STM32C0测评】Nucleo-C092板卡外部中断控制板载LED灯
不错