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 由内部 Flash 实现。由于 Flash 的擦除次数有限,Silicon Labs 提供了三种不同的动态数据存储实现——NVM3、SimEEv1/v2 和 PS Store——分别适用于不同的协议和场景。理解这三种方案的技术原理和权衡取舍,是开发可靠嵌入式 IoT 应用的基础。

非易失性存储的设计挑战

Flash 的核心特征是:可以以较小的块(通常 32 位字)写入,但只能以较大的块(通常数 KB 的页)擦除。这带来了以下挑战:
1

单页单对象(空间浪费)

最简单的实现是每个数据对象占用一个独立 Flash 页,可随时擦除重写,但数据对象通常远小于页大小,严重浪费 Flash 空间。
2

单页多对象(磨损问题)

将多个对象存储在一个页中可节省空间,但更新任意对象都需要先擦除整个页再写回所有对象,导致页擦除过于频繁,缩短 Flash 寿命。
3

追加写入 + 键值标识(磨损均衡)

每次写入对象的新版本时,将其追加到页的空闲位置,并附带键(key)标识数据所属对象,读取时搜索最新版本。这是磨损均衡的核心思路,也是三种 Silicon Labs 存储实现的共同基础。

虚拟页与 FIFO 循环缓冲区

为处理页填满时的数据迁移并防止断电丢失,各实现引入了虚拟页FIFO 循环缓冲区机制:
  • SimEEv1:使用 2 个虚拟页(各由 2 个物理页组成,总计 8 kB),存储在两个虚拟页之间交替。
  • SimEEv2:使用 3 个虚拟页(各由 6 个物理页组成,总计 36 kB),第三页始终保持擦除,通过分散复制降低最坏情况下的写入延迟。
  • NVM3:在整个分配存储空间上实现循环缓冲区,无需切换虚拟页,仅复制待擦除页中无较新版本的对象,最大化 Flash 寿命和存储利用率。
NVM3 与 SimEEv1/v2 的核心区别在于:NVM3 在整个存储空间上实现为一个循环缓冲区,仅复制将被擦除的页中存储的唯一对象(其他页无较新版本的),避免了不必要的写入,进一步延长 Flash 寿命。

三种存储方案详解

SimEEv1 / SimEEv2

SimEEv1/v2 可与 EmberZNet PRO 和 Silicon Labs Connect(随 Flex SDK 安装)一起使用。 核心特性:
  • 对象定义时机:编译时使用大小和类型定义所有对象,无法在运行时创建或删除对象
  • SimEEv1:2 个虚拟页,总大小 8 kB,最大基本存储 2 kB,最多 254 个对象
  • SimEEv2:3 个虚拟页,总大小 36 kB,最大基本存储 8 kB,最多 254 个对象
  • 支持计数器对象(Counter Object):只存储起始值和增量,减少每次递增时的写入量
  • 支持索引对象(Indexed Object):允许数组中的多个索引共享同一个对象键,按索引参数独立读写
Silicon Labs 提供了将 SimEEv1 数据迁移到 SimEEv2 的插件,升级路径平滑。

PS Store

PS Store 专用于 Bluetooth 设备(EFR32 Series 2 除外)。通过 PS key 管理 Bluetooth 设备 Flash 中的用户数据,数据在设备复位和重启期间保持持久性。 核心特性:
  • 总存储大小:2048 字节(使用 2 个 Flash 页)
  • 支持运行时对象创建和删除
  • 注意:Bluetooth Bonding 也存储在同一区域,每个 Bonding 约占 150 字节,用户数据可用空间随 Bonding 数量增加而减少
  • 是 Silicon Labs 中代码体积最小的非易失性存储选项(编译后约 1.6 kB)

NVM3

NVM3(Third Generation Non-Volatile Memory)是 SimEEv1/v2 和 PS Store 的替代品,也是目前最推荐的存储方案。 核心优势:
  • 支持 EFM32 和 EFR32 系列全平台
  • 兼容 EmberZNet、Connect、Z-Wave、OpenThread 和 Bluetooth 协议
  • 动态多协议(DMP)应用可共享单一 NVM3 存储实例,避免多协议间的存储冲突
  • 运行时创建和删除对象,最大对象大小可配置(208 ~ 4096 字节)
  • 可配置的 Flash 存储大小(最少 3 个 Flash 页)
  • 具有可配置缓存,支持快速对象访问
  • 提供 Token API 和 PS Store API 的兼容层,方便从旧实现迁移
  • 重新包装 API(Repack API):允许应用在 CPU 负载较低时段主动触发待清除页的擦除,避免在关键时序段阻塞

方案对比

NVM3

推荐用于新项目。支持全系平台和所有协议,动态对象管理,可配置大小,DMP 共享存储,Flash 寿命最优。代码体积约 9.1 kB。

SimEEv2

适用于 EFR32 Series 1 + EmberZNet/Connect 的既有项目。较大的 36 kB 存储空间,支持大量对象,写入延迟更均匀。代码体积约 5.4 kB。

SimEEv1

轻量级 EmberZNet/Connect 方案。8 kB 存储空间,代码体积最小(3.5 kB),适合资源极度受限的 EFR32 Series 1 设备。

PS Store

Bluetooth 专用(EFR32 Series 1)。最小代码体积(1.6 kB),简单的 2 页实现,适合存储需求极低的蓝牙设备。不支持计数器和索引对象。

完整特性对比表

特性NVM3SimEEv1SimEEv2PS Store
兼容设备EFM32, EFR32EFR32 Series 1EFR32 Series 1EFR32 Series 1
兼容协议EmberZNet, Connect, Z-Wave, OpenThread, BluetoothEmberZNet, ConnectEmberZNet, ConnectBluetooth
Flash 存储大小≥ 3 个 Flash 页(可配置)8 kB36 kB4 kB
最大基本存储可变(见 AN1135)2 kB8 kB2 kB
最大对象数受基本存储限制254254受基本存储限制
最大对象大小208 ~ 4096 字节(可配置)254 字节254 字节56 字节
对象创建/删除运行时编译时编译时运行时
编译后代码大小9.1 kB3.5 kB5.4 kB1.6 kB
计数器对象
索引对象部分支持¹
每对象开销4 字节(≤128 字节)/ 8 字节(>128 字节)2 字节6 字节10 字节
¹ NVM3 中索引对象通过为每个索引分配独立的 NVM3 对象实现,需使用唯一键逐个访问。

Flash 寿命与磨损均衡

所有 Silicon Labs 存储实现均采用磨损均衡以延长 Flash 寿命。影响 Flash 磨损的主要因素:
  1. 分配的 Flash 空间大小:存储区域越大,单次页擦除前可写入的新版本越多,Flash 寿命越长。NVM3 支持配置 Flash 页数,其他实现使用固定大小。
  2. 每对象存储开销:开销越小,相同空间内可写入更多对象版本,Flash 寿命更长。SimEEv1 每对象仅 2 字节开销,PS Store 高达 10 字节。
  3. 最小对象大小对齐:若数据大小与最小对象大小不对齐,会添加填充字节。例如存储 16 位 Token 时,NVM3 和 PS Store 会额外填充 2 字节,而 SimEEv1/v2 可直接存储 16 位数据。
  4. 基本存储后的剩余空间:当切换到新虚拟页时,须先写入所有对象的最新版本(基本存储)。若基本存储占据大部分页空间,后续可写入的新版本数量有限,导致页擦除频繁。
NVM3 和 SimEEv1/v2 提供页擦除计数函数,可在产品加速寿命测试期间读取擦除次数,验证 Flash 是否以可接受的速率磨损,提前发现潜在的寿命问题。

选型建议

在 EFR32 Series 2 设备上开发时,PS Store 不受支持。所有新项目建议使用 NVM3,它是 Silicon Labs 目前推荐的非易失性存储方案,提供最佳的兼容性和 Flash 寿命。
  • 新项目(所有协议):优先选择 NVM3,特别是动态多协议(DMP)应用,可在各协议间共享单一存储实例。
  • EmberZNet / Connect 既有项目(Series 1):可继续使用 SimEEv1/v2,Silicon Labs 提供 SimEEv1 到 SimEEv2 的升级插件。
  • Bluetooth 专用轻量设备(Series 1):若存储需求极低,可选 PS Store,但需注意 Bonding 会占用部分存储空间。

Build docs developers (and LLMs) love