非易失性存储(Non-Volatile Memory,NVM)是嵌入式系统中保存关键配置数据的核心机制。对于 OpenThread 而言,网络凭证、设备角色、路由表等信息需要在设备掉电重启后依然保持有效。Silicon Labs 推荐在 OpenThread 应用中使用 NVM3(第三代非易失性存储)作为统一的数据持久化方案,以替代传统的 Simulated EEPROM 和 PS Store。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 微控制器和 SoC 提供三种非易失性存储实现,适用于不同的协议和应用场景:Simulated EEPROM
模拟 EEPROM 方案,通过将 Flash 区域分割为多个页面来模拟 EEPROM 操作。适用于传统 Ember/Zigbee 项目,但存在擦写寿命和存储容量的限制。
PS Store
用于 Bluetooth 协议栈的持久化存储方案,通过键值对(key-value pair)方式存储数据,专为 BLE 协议栈内部使用而设计。
NVM3
第三代非易失性存储,支持多种 Silicon Labs 协议栈(包括 OpenThread、Zigbee、Bluetooth),提供更大的存储容量、更好的磨损均衡和掉电保护特性,是当前推荐方案。
OpenThread SDK 默认使用 NVM3 作为非易失性存储后端,用于保存网络配置、活跃数据集(Active Dataset)、待定数据集(Pending Dataset)等关键信息。
NVM3 在 OpenThread 中的作用
OpenThread 协议栈使用非易失性存储保存以下类型的数据:网络凭证与数据集
网络凭证与数据集
- Active Operational Dataset:包含网络名称、PAN ID、信道、主密钥(Network Key)等核心网络参数
- Pending Operational Dataset:待生效的新数据集,用于网络参数的平滑迁移
- 设备扩展地址(EUI-64):设备的唯一标识符
设备角色与网络状态
设备角色与网络状态
- 设备当前角色(Router、End Device、Leader 等)
- Router ID 分配表
- Child 设备信息(对于 Router 节点)
- Commissioner 状态
安全相关数据
安全相关数据
- 网络密钥帧计数器(Frame Counter),防止重放攻击
- 密钥序列号(Key Sequence Number)
- 设备证书与私钥(当使用 Secure Vault 时)
NVM3 配置与使用
- 基本配置
- 数据读写示例
- 磨损均衡与维护
在 Simplicity Studio 5 中,NVM3 存储区域的大小通过 Linker Script 中的
nvm3_default_size 参数控制。默认配置通常已足够满足 OpenThread 的存储需求,但对于需要存储大量应用数据的场景,可以适当增大 NVM3 分区。参考文档
Non-Volatile Data Storage Fundamentals (UG103.07)
介绍使用闪存的非易失性数据存储原理,以及 Silicon Labs 微控制器和 SoC 提供的三种存储实现(Simulated EEPROM、PS Store、NVM3)的特点与适用场景比较。
Using NVM3 Data Storage (AN1135)
详细解释如何在 OpenThread、Zigbee、Bluetooth 等各种协议实现中将 NVM3 用作非易失性数据存储,包括 key 空间规划、配置选项和迁移方法。