
引言1 [1 H# P. g& b- p 本文档介绍了 STM32WB 系列微控制器可用的固件升级服务(FUS)。这些服务由位于嵌入式 Flash 存储器安全部分中的 ST 代码提供,可供通过用户 Flash 存储器在 Cortex®-M4 上运行的任何代码使用,也可以通过嵌入式 Bootloader 指令(也在 Cortex®-M4 上运行)使用。 1 概述 本文档适用于基于 Arm®的 STM32WB 系列器件。 0 n: y4 I- v$ a) g 提示 Arm 是 Arm Limited(或其子公司)在美国和/或其他地区的注册商标。2 @! g( k C5 E! p0 V+ h( u. U, H; n# z) h . z% Q( _+ v- s& G: f 1.1 固件升级服务定义% I- u! e& s# a* u- t FUS(固件升级服务)是在 STM32WB Cortex®-M0+上运行的固件,并提供以下功能: 1. 安装、升级或删除 STM32WB Cortex®-M0+无线协议栈: – 仅由 ST 加密和签名 – 或者,如果需要,客户还可以进行额外的双重签名2 m, h; z& u, W/ | 2. FUS 自我升级:# f- t% b3 p1 B. Y2 Q – 仅由 ST 加密和签名 – 或者,如果需要,客户还可以进行额外的双重签名 3. 客户验证密钥管理: – 用于对映像进行双重签名0 L$ m$ [1 q3 C. r' l0 g3 h# R – 安装、更新和锁定客户验证密钥 4. 用户密钥管理: – 存储客户密钥 ◦ 主密钥8 R' Z, C0 I$ P: q9 x, W2 e! P3 D+ D ◦ 简单的明文密钥: W# L9 G N! ^! k, n) m0 m: D" a ◦ 加密密钥(通过主密钥) ◦ 在安全区域中,只能通过 Cortex®-M0+代码来访问。, H4 @! X8 Y" p$ J: V" E9 A – 以安全模式(Cortex®-M4 无法访问密钥)将存储的密钥(简单或加密)写入 AES1(高级加密标准)。, K: D% E) q5 J6 X3 U1 p – 锁定存储的密钥,以防其在下一次系统复位之前被使用3 [7 N w; z( ~# _( p1 s) |0 w – 从 AES 中卸载之前加载的密钥,以防被其他应用程序使用 – 密钥宽度:128 或 256 位 – 最多 100 个用户密钥(通过主密钥或明文密钥加密)和 1 个用户主密钥 5. 与 Cortex®-M4(用户代码或 Bootloader)通信: – 通过 IPCC 指令和响应模式(与无线协议栈模式相同); M0 I5 n9 X/ y9 ?5 p$ ^# _* w – STM32WBBootloader 已支持的指令(在 ROM 中)- X/ ?9 F0 F8 p5 e# S 1.2 FUS 版本管理和识别& ?* L- N' L$ j/ ]! W 用户需要读取 SRAM2a 中的共享表内存来识别 FUS 版本,详见第 1.6 节 共享表存储器使用情况和第 6.1 节 共享表的使用。 IPCCDBA 选项字节指定的 SRAM2a 中的第一个字是“器件信息表”地址。该表(如表 5. 器件信息表所描述)在偏移0xC 处包含 FUS 版本,版本信息以四个字节编码。通常情况下,如果 IPCCDBA=0x0000,且@0x20030000 包含0x20030024,则 FUS 版本为@0x20030030。+ J- `3 C5 a% j- ]% Z; z- y FUS 映像的安装遵循映像(二进制版本)说明中规定的条件。 . p1 r9 z( y" |7 C7 G, ~ ![]() ' \* {$ z* r, c. j" Z3 u 1.3 如何激活 FUS FUS 在 Cortex®-M0+上以及专用于 FUS 和无线协议栈的受保护 Flash 存储区上运行。有两种可能的情况:' Z' o2 K* w9 C' P0 j ( G3 ^! n& p5 c" k+ m: a' q ![]() 1 S$ X& L( Y: X* G5 A : w. P: U) F! z 为检查 FUS 是否正在运行,可使用以下选项: • 发送一条 FUS_GET_STATE 指令,并检查返回的状态。如果为 FUS_STATE_NOT_RUNNING,则 FUS 未运行。 • 检查 SBRV 选项字节值: – 如果是 0x3D800(用于 FUS V0.5.3)或 0x3D000(用于 FUS V1.x.z),则 FUS 必须运行 – 如果与 0x3D800(用于 FUS V0.5.3)或 0x3D000(用于 FUS V1.x.z)不同,则 FUS 不运行 • 发送无线协议栈指令: – 如果得到确认,则 FUS 未运行 – 如果未得到确认,则 FUS 正在运行: N8 t! ]; u7 `8 X, c2 u. _ • 读取共享表信息:! K! b# P3 w. p# U& \9 H1 X* X – 读取 IPCCDBA(在选项字节中),以获取 SRAM2a 中的共享表起始地址 – 获取器件信息表地址8 F* {2 {9 T* Y: ]$ Y( C) ~ – 读取“最后的 FUS 激活状态”字段 ◦ 0x04 意味着无线协议栈一定正在运行 ◦ 其他值意味着 FUS 一定正在运行1 D' ^! Q% i# ^( \2 t 1.4 存储器映射* \5 _6 W( c H FUS 在 Flash 存储器中有一个专用空间,该空间取决于 FUS 大小。它还使用 SRAM2a 和 SRAM2b 中的专用空间以及 SRAM2a(共享表)中的共享空间。由选项字节定义 Flash 存储器 SRAM2a 和 SRAM2b 中的专用空间大小。. o% b4 T$ S# S9 V' ?8 ^! p% m7 H 若需更多信息,请参见产品参考手册。4 ] c0 i: k% a4 o 与无线协议栈(如果安装)共享专用 Flash 存储器和 SRAM 区域。但在给定时间,只能在 Cortex®-M0+上运行FUS 或无线协议栈。) |: Z+ Q# _6 g! J+ N0 { 8 Q* }0 @# M: q# B8 e3 Q ![]() / x3 }; B( N7 P/ ]% g2 G ![]() 1.5 FUS 资源使用情况3 Z6 b l* o* t, W' u) R, G% [- v" m FUS 仅配置/使用表 3 中列出的资源。 在使能 Cortex®-M0+之前,必须通过 Cortex®-M4 应用程序来配置 RCC(复位和时钟控制)、Flash 存储器、PWR(电源控制)以及 STM32 正常操作所需的所有必要组件(这在启动时由系统 Bootloader 自动完成)。; x* \) x1 t2 _$ X& O $ V$ |3 q& d* s, Y6 X$ l ![]() 1.6 共享表存储器使用情况! L# |' Q8 t9 v( C9 c7 I. L9 t 通信数据缓冲区由查找表指向,其地址由选项字节决定:IPCCDBA(IPCC 邮箱数据缓冲区基址)。该地址提供了缓冲区表指针的基址:如构建无线应用(AN5289)中所述。' k3 `+ k' F2 J 如果 IPCCDBA 指向一个不适合所有表指针的地址(即(SRAM2a_END_ADDRESS -SharedTable_BaseAddress)< SizeOf(SharedTable)),则 FUS 必须完全放弃使用共享表,因为 FUS 无法进行通信和发出指令。 用户应用程序必须正确设置共享表基址,否则,它必须停止 FUS 服务初始化。 ![]() 5 G) X$ q: H9 @: n FUS 仅使用两个表:2 ?1 T! j3 S6 |* r$ h, U5 W9 B$ E6 J" H • 器件信息表:该表允许在启动时提供从 FUS 到 Cortex®-M4 用户应用程序(或 JTAG)的有用信息(启动时由FUS 写入的内容)。 • 系统表:该表允许在 FUS 和 Cortex®-M4 用户应用程序之间交换指令和响应。 3 W: G" S# y4 U- e0 w* u6 |6 X 9 @! E% r" e0 Y' x7 Y |
AN5185_DM00513965_ZHV4.pdf
下载1.67 MB, 下载次数: 5
【NUCLEO-WB09KE评测】+3.蓝牙广播
Nucleo-STM32WB09KE测评-蓝牙调试并使用OLED显示数据
【NUCLEO-WB09KE评测】创建BLE工程和开启调试信息
【NUCLEO-WB09KE评测】+2.串口打印
【NUCLEO-WB09KE评测】+5.实现标准电量服务
【NUCLEO-WB09KE评测】BLE例程HeartRate及工具探索
STM32WB系列MCU低功耗测试
Nucleo-STM32WB09KE测评--IIC传感器读取
【NUCLEO-WB09KE评测】+4.蓝牙控制LED
【NUCLEO-WB09KE评测】+1.点灯