Bootloader 是存储在预留闪存中的程序,负责初始化设备、更新固件映像,并可执行完整性检查。Silicon Labs 于 2017 年推出的 Gecko Bootloader 是一个可通过 Simplicity Studio IDE 配置的代码库,可与 EFM32 和 EFR32 Series 1 及更新的各类协议栈配合使用。GSDK 4.0 起,Gecko Bootloader 进一步重构为基于组件(Component)的设计,进一步提升了灵活性与可维护性。Documentation Index
Fetch the complete documentation index at: https://mintlify.com/dsyx/docs.silabs.com_zh/llms.txt
Use this file to discover all available pages before exploring further.
引导加载的两种模式
Silicon Labs 网络设备使用两种不同的 Bootloader 模式执行固件更新。Standalone Bootloader
通过外部通信接口(UART/SPI)直接接收并写入固件映像,整个过程为单阶段,无需应用程序参与。适用于串行连接的设备和 NCP(Network Co-Processor)。
Application Bootloader
由正在运行的应用程序先将新映像下载到下载空间(Download Space),Bootloader 再验证并将其复制到主闪存。支持 OTA 和外部/内部存储两种变体。
Standalone Bootloader 详解
Standalone Bootloader 是使用外部通信接口获取 Application 映像的程序。固件更新是一个单阶段过程,新的固件映像直接覆盖现有的应用程序代码,无需应用程序本身参与。通常,应用程序与 Bootloader 交互的唯一时机是请求重新引导到 Bootloader。Application Bootloader 详解
Application Bootloader 在应用程序下载完更新映像文件后开始固件更新过程。下载空间(Download Space)通常是:- 外部存储器:EEPROM 或 dataflash
- 内部闪存:芯片内部闪存的一部分(本地存储变体)
由于 Application Bootloader 不参与映像的获取,下载错误不会影响正在运行的映像。下载过程可随时重新开始或暂停,并可在更新前验证映像的完整性。
Gecko Bootloader 架构
Gecko Bootloader 由三个核心组件构成:Core(核心)
Core(核心)
包含两个 Bootloader 阶段的主要功能,负责写入内部主闪存、执行 Bootloader 更新以及重置到应用程序。
Driver(驱动)
Driver(驱动)
不同的引导加载应用场景需要不同的硬件驱动程序,供 Bootloader 其他组件调用,如 UART、SPI、内部/外部闪存驱动。
Component/Plugin(组件/插件)
Component/Plugin(组件/插件)
所有可选或可配置的 Main Bootloader 功能均以组件(GSDK 4.0+)或插件(旧版本)实现,包括 UART/SPI 通信、SPI 闪存、内部闪存及加密操作等。
两阶段设计
Series 1 设备
Series 2 设备
在 Series 2 设备上,First Stage Bootloader 被 SE(Secure Engine,安全引擎) 取代,Gecko Bootloader 仅包含 Main Bootloader。SE 分为以下类型:| 缩写 | 说明 |
|---|---|
| HSE | Hardware Secure Engine(硬件安全引擎),含或不含 Secure Vault |
| VSE | Virtual Secure Engine(虚拟安全引擎) |
| SE | Secure Engine(泛指 HSE 或 VSE) |
Gecko Bootloader 核心特性
- 现场可更新
- Secure Boot
- 签名的 GBL 文件
- 加密的 GBL 文件
Series 1 通过两阶段设计实现,Series 2 通过 SE 实现。支持添加新功能、更改通信协议、添加新安全特性和修复程序。
GBL 升级文件格式
Gecko Bootloader 使用专有的 GBL(Gecko BootLoader)文件格式作为更新映像文件,扩展名为.gbl。GBL 文件可以:
- 未签名/已签名
- 未加密/已加密
- 包含 Application 映像、Bootloader 升级映像或 SE 升级映像,也可组合
内存空间布局
不同系列和型号的设备,Bootloader 的内存布局有所差异:- EFR32xG1(Series 1 早期)
- EFR32xG12+(Series 1)
- EFR32xG21/xG22(Series 2)
- EFR32xG23/xG24(Series 2)
Bootloader 位于主闪存:
Silicon Labs 建议为 Series 1 和 EFR32xG21 设备的 Bootloader 保留 16 kB,为 EFR32xG22 设备保留 24 kB。
设计决策参考
选择 Bootloader 类型前,需考虑以下因素:映像获取方式
设备是通过 OTA 获取新映像,还是通过单独的有线接口?是否已连接互联网网关?
存储能力
设备是否有外部存储芯片?内部闪存是否足以存储当前和新的应用程序映像各一份?
安全需求
需要什么级别的映像安全性?是否需要签名验证或加密?
通信驱动
将使用哪种通信驱动(单协议)?是否需要多协议支持?