Skip to main content

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.

非易失性存储器(NVM,Non-Volatile Memory)是即使在设备重启后仍能保持数据的存储器。在 Silicon Labs 的 Microcontroller 和 Radio SoC 上,NVM 由闪存实现。由于闪存的擦除次数有限,Silicon Labs 提供了多种方法来有效降低闪存磨损速度,并保证应用数据在产品整个生命周期内的可靠存储。

非易失性存储的挑战

闪存有一个重要特征:可以以较小的块(通常是 32-bit 字)写入,但只能以较大的块(通常是几 KB 的页)擦除。这带来了以下存储设计挑战:
最简单的方案:每个数据对象存储在各自的闪存页中,每个对象可独立擦除和重写,但数据对象通常远小于页大小,造成严重的闪存空间浪费。
将多个数据对象存储在同一闪存页中可节省空间,但更新任意一个对象时,必须先擦除整页,再将所有对象重新写回,导致频繁擦除,缩短闪存寿命。
将每个对象的新版本写入到闪存页的新空位置,而非覆盖旧版本。每个版本携带 Key 标识属于哪个对象,访问时搜索最新版本。这是磨损均衡的核心思想。

断电保护:虚拟页机制

当版本化写入将页填满时,需要擦除页并重新开始。为防止断电期间数据丢失,引入第二页(虚拟页,Virtual Page):在擦除原始页之前,先将所有对象的最新版本复制到第二页,然后继续向第二页写入新数据,当第二页满时,再迁回第一页。这就是 PS Store 的工作方式。

FIFO 模型

闪存数据存储可建模为 FIFO(先进先出)缓冲区:向 FIFO 输入写入新版本,当 FIFO 填满时,复制尚未被取代的对象版本,然后擦除 FIFO 末尾的旧页。 NVM3 在整个存储空间上实现为循环缓冲区,只需保留足够的已擦除页(可容纳最大对象),从而最大化可用存储比例,与使用虚拟页的实现相比显著延长了闪存寿命。

三种存储方案详解

SimEEv1/v2(Simulated EEPROM)

SimEEv1/v2 可与 EmberZNet PROSilicon Labs Connect(Flex SDK)配合使用。
  • 使用 2 个固定虚拟页,每个虚拟页由 2 个物理闪存页组成
  • 总大小:8 kB(固定)
  • 最大基础存储:2 kB
  • 最大对象数量:254 个
  • 最大对象大小:254 字节
  • 对象在编译时定义,无法在运行时创建或删除
  • 支持计数器对象和 Indexed 对象
SimEEv1 虚拟页工作原理:数据在两个虚拟页(A 和 B)之间交替,每个虚拟页由两个物理闪存页组成,虚拟页被擦除和写入就像一个较大的闪存页一样。

PS Store(Persistent Store)

PS Store 可与 Bluetooth 设备配合使用(EFR32 Series 2 除外)。
  • 持久存储大小:2048 字节
  • 使用 2 个闪存页存储(共 4 kB)
  • 最大对象大小:56 字节
  • 支持运行时创建和删除对象
  • Silicon Labs 中最小的非易失性存储选项
  • 由于 Bluetooth Bonding 也存储在此区域,可用于用户数据的空间取决于当前 Bonding 数量(每个 Bonding 约 150 字节)

NVM3(Third Generation Non-Volatile Memory)

NVM3 是 SimEEv1/v2 和 PS Store 的替代品,是 Silicon Labs 推荐的现代非易失性存储方案。
  • 可用于 EFM32 和 EFR32 全系列设备
  • 支持 EmberZNet、Connect、Z-Wave、OpenThread、Bluetooth 全协议栈
  • 闪存大小可配置(最少 3 个闪存页)
  • 对象大小范围:0 到 4096 字节
  • 对象在运行时创建和删除
  • 基于循环缓冲区的磨损均衡,闪存寿命优于虚拟页方案
  • 支持多协议应用中的单一共享实例

方案比较

下表对四种主要非易失性存储实现的关键特性进行了比较,帮助开发者选择最适合的方案。
特性NVM3SimEEv1SimEEv2PS Store
兼容设备EFM32, EFR32EFR32 Series 1EFR32 Series 1EFR32 Series 1
兼容无线协议EmberZNet, Connect, Z-Wave, OpenThread, BluetoothEmberZNet, ConnectEmberZNet, ConnectBluetooth
存储闪存用量3 页或更多(可配置)8 KB(固定)36 KB(固定)4 KB(固定)
虚拟页数量不适用23不适用
最大基础存储可变(见 AN1135)2 KB8 KB2 KB
最大对象数量受基础存储限制254254受基础存储限制
最大对象大小(字节)可配置 208-409625425456
对象创建/删除运行时编译时编译时运行时
编译后代码大小(不含数据存储)9.1 KB3.5 KB5.4 KB1.6 KB
计数器对象支持
Indexed 对象支持部分¹
每个对象开销(字节)4(≤128字节);8(>128字节)2610
计数器对象大小含开销(字节)2126056不适用
计数器递增次数(每次擦除前)100(Series 1);50(Series 2)2525不适用
¹ NVM3 通过为每个索引存储单独对象来实现 Indexed Token。

闪存寿命影响因素

所有 Silicon Labs 存储实现都使用某种形式的磨损均衡延长闪存寿命。影响磨损的主要因素:

存储空间大小

分配给数据存储的闪存越多,闪存寿命越长。NVM3 支持可配置的页数,其余方案使用固定大小。

每对象存储开销

较少开销的实现使数据对象在闪存中占用更少空间,提供更长寿命。SimEEv1 的每对象开销最小(2字节)。

对象大小对齐

对象以最小对象大小的倍数存储,未对齐数据会添加填充字节,增加占用空间。

基础存储后的剩余空间

对于虚拟页方案,每次切换页时需写入每个对象的一个实例,如果基础存储较大,则可用于新写入的空间减少,闪存寿命下降。
NVM3 和 SimEEv1/v2 均包含用于报告数据存储闪存页面擦除次数的函数调用,可在加速寿命测试期间读取这些擦除计数器,以验证闪存磨损速率是否在可接受范围内。

适用场景与选型建议

  • 新开发(GSDK 4.0+):推荐使用 NVM3,通过 Simplicity Studio 5 的 Project Configurator 配置
  • 遗留应用(EmberZNet 6.x 及更低):可使用 SimEEv1/v2,或通过升级插件迁移到 NVM3
  • DMP 应用(多协议):必须使用 NVM3(唯一支持多协议共享的方案)

迁移路径

SimEEv2 迁移到 NVM3

1

确认迁移必要性

检查现有设备上存储的 SimEEv2 数据是否需要保留。若无需保留,可直接切换到 NVM3。
2

为所有 Token 添加 NVM3 Key 定义

在 Token 定义中同时添加 CREATOR_*(16-bit,SimEE 用)和 NVM3KEY_*(20-bit,NVM3 用):
#define CREATOR_MY_TOKEN    0x1234
#define NVM3KEY_MY_TOKEN    0x00001
3

在 AppBuilder 中切换插件

在 AppBuilder 中启用 Simulated EEPROM version 2 to NVM3 Upgrade Library 插件,该插件会:
  1. 将 SimEEv2 存储空间压缩至 12 kB
  2. 在剩余 24 kB 中创建新的 NVM3 实例
  3. 将 Token 数据从 SimEEv2 复制到 NVM3
  4. 擦除 SimEEv2 存储,并调整 NVM3 实例使用全部 36 kB 空间
4

验证迁移结果

在迁移后的设备上运行应用程序,确认所有 Token 数据已正确迁移,功能正常。

PS Store 迁移到 NVM3(Bluetooth)

PS Store 和 NVM3 互不兼容,迁移将导致设备上存储的所有现有数据丢失,包括 Bluetooth Bonding 信息。对于已在现场运行的设备,迁移前需充分评估影响。
在 Simplicity Studio 5 中(Bluetooth SDK v3.x):
  • 在 Project Configurator 中安装 NVM3 Default Instance 组件,会自动卸载 PS Store 组件
在 Simplicity Studio 4 中(Bluetooth SDK v2.x):需要手动复制 NVM3 库文件、调整编译器包含路径和链接器设置,并将 apploader 替换为 NVM3 版本。
要监控闪存磨损情况,可在产品加速寿命测试期间通过 NVM3 API 读取页面擦除计数器,验证闪存磨损速率是否满足产品寿命要求。

Build docs developers (and LLMs) love