2. Silicon Labs无线SoC与协议栈选型

OTA升级能否顺利落地,第一步并不在写升级代码,而在选型。Silicon Labs 的 EFR32 系列把无线收发器、Cortex-M 内核、Flash/RAM 与安全模块集成在同一颗 SoC 上,但不同子系列、不同协议栈对 OTA 的支持方式差别很大。选错芯片或协议栈,后期往往要面对“镜像放不下”“升级时断网”“Bootloader 空间不够”这类返工问题。本节从芯片能力、协议栈机制、存储与安全约束三个角度,给出可操作的选型依据。

一、EFR32 子系列与 OTA 相关的关键差异

EFR32 常见子系列包括 EFR32MG(多协议,主打 Zigbee/Thread)、EFR32BG(Bluetooth LE)、EFR32FG(专有 Sub-GHz/2.4G)、EFR32xG21/xG24/xG28 等代际。对 OTA 影响最大的不是主频,而是三件事:Flash 容量、是否支持双区(dual-image)升级、以及是否带 Secure Vault 安全子系统。

  • Flash 容量:单区升级只需“应用区 + Bootloader + 新镜像暂存区”,双区升级则需要两份完整应用镜像。以 xG24 为例,512 KB Flash 做双区 Zigbee OTA 会非常紧张,1024 KB 才比较从容。
  • Secure Vault:xG21 起引入,xG24 为 Secure Vault Mid/High。它提供密钥存储、安全启动与签名验证,是 OTA 镜像防篡改的基础。若产品需要“只接受签名固件”,必须选带 Secure Vault 的型号。
  • Bootloader 支持:Silicon Labs 的 Gecko Bootloader 分“Standalone”和“Application”两类,前者不依赖应用即可接收升级,后者需应用配合。芯片需预留 Bootloader 区(通常 16–32 KB)。

二、三种协议栈的 OTA 机制对比

Zigbee、Thread、Bluetooth LE 的 OTA 不是同一套逻辑,差异集中在“谁来传镜像、镜像怎么分片、升级期间设备是否还在网”。

维度Zigbee OTAThread OTABluetooth LE OTA
标准ZCL OTA Cluster (0x0019)Thread 本身不定义 OTA,靠应用层(如 Matter)Silabs 私有 DFU / 标准 L2CAP CoC
传输方式Mesh 内逐跳转发,可多设备分发基于 IPv6/UDP,通常由边界路由器或 Matter 控制器推送点对点,手机/网关直连设备
分片粒度默认约 64–80 字节/片,可调由应用层决定,常见 1 KB 左右块L2CAP CoC 可到数百字节/包
升级时联网可保持入网,但吞吐下降可保持,依赖边界路由器稳定通常断开常规连接,专用 DFU 服务
典型耗时较慢,受 Mesh 跳数与分片影响中等,取决于边界路由器带宽较快,点对点带宽高

需要强调:Thread 协议栈本身不提供 OTA 传输层,实际项目里要么用 Matter OTA(基于 BDX 协议),要么自定义 CoAP 传输。选型时若只写“支持 Thread”,并不等于“支持 OTA”,必须确认上层是否有 OTA 方案。

三、存储布局与镜像大小约束

OTA 能否成功,本质是存储预算问题。以 EFR32MG24(1024 KB Flash)做 Zigbee 双区升级为例,一个合理的分区示例如下:

0x00000000 - 0x00003FFF  Bootloader        (16 KB)
0x00004000 - 0x0000BFFF  存储/NVM 区        (32 KB)
0x0000C000 - 0x0007BFFF  应用 Slot 0        (448 KB)
0x0007C000 - 0x000F3FFF  应用 Slot 1        (448 KB)
0x000F4000 - 0x000FFFFF  元数据/保留        (48 KB)

若应用编译后为 420 KB,双区方案刚好放得下;若涨到 470 KB,就必须改用单区升级或换 1536 KB 型号。判断依据很简单:应用镜像大小 × 2 + Bootloader + NVM + 元数据 ≤ Flash 总容量。单区方案则只需一份镜像加暂存区,但升级期间设备无法运行应用,适合可短暂停机的场景。

选型时先估算应用镜像大小,再决定单区还是双区。很多项目后期“升级失败”其实是 Flash 预算在选型阶段就没算清。

四、安全与回滚要求对选型的影响

如果产品要求“固件必须签名、升级失败可回滚”,选型必须满足:芯片带 Secure Vault、Bootloader 支持签名验证、存储布局预留两个 Slot。Silicon Labs 的 Gecko Bootloader 支持 ECDSA-P256 签名校验,公钥烧录在芯片内,升级镜像需带对应签名。若芯片无 Secure Vault,只能做 CRC 校验,无法防篡改。

回滚能力取决于是否保留旧镜像。双区方案天然支持回滚:新镜像写入 Slot 1,校验通过后切换启动标志;若启动失败,Bootloader 可切回 Slot 0。单区方案若要回滚,需额外保留一份旧镜像,实际又接近双区开销,因此对可靠性要求高的产品建议直接选双区。

五、选型决策路径

把上述因素串起来,可以得到一条清晰的判断链:先看协议栈是否自带 OTA 传输层,再看 Flash 是否够双区,最后看安全与回滚是否必须。下图给出这一决策关系。

EFR32 OTA 选型决策路径 确定协议栈与 OTA 需求 协议栈是否自带 OTA 传输层? 否 需自建 OTA 或改用 Matter 是 Flash 是否够 双区镜像? 否 单区升级 或换大 Flash 是 是否需签名与回滚? 是 选 Secure Vault + 双区 Bootloader 否 CRC 校验即可 单区可接受

六、选型依据小结

综合来看,选型可以按以下顺序判断:

  1. 协议栈优先:Zigbee 有标准 OTA Cluster,可直接用;Thread 需确认上层是否有 Matter OTA 或自定义方案;Bluetooth LE 用 Silabs DFU 或 L2CAP CoC,点对点最快。
  2. Flash 定单双区:应用镜像 × 2 + Bootloader + NVM ≤ Flash 才可双区。xG24 的 1024 KB 适合双区 Zigbee/Thread,512 KB 建议单区或 BLE 点对点。
  3. 安全定型号:需签名验证与安全启动,选带 Secure Vault 的 xG21/xG24;仅 CRC 校验可选更早代际。
  4. 回滚定布局:要求升级失败可恢复,必须双区并保留旧镜像;可接受停机重刷,单区即可。
常见误区:只看“支持 Zigbee/Thread/BLE”就下单,忽略 OTA 传输层、Flash 预算与 Secure Vault。建议在选型阶段就用实际应用镜像大小做一次分区试算,避免后期被迫改板或降级为单区。