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.

非易失性存储(Non-Volatile Memory,NVM)是嵌入式系统中保存关键配置数据的核心机制。对于 OpenThread 而言,网络凭证、设备角色、路由表等信息需要在设备掉电重启后依然保持有效。Silicon Labs 推荐在 OpenThread 应用中使用 NVM3(第三代非易失性存储)作为统一的数据持久化方案,以替代传统的 Simulated EEPROM 和 PS Store。

非易失性存储基础

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 分区。
// NVM3 默认实例初始化示例
#include "nvm3_default.h"

// NVM3 在协议栈初始化时自动挂载,无需手动调用
// 应用数据可通过以下 API 读写
Ecode_t result;
uint32_t myData = 0xDEADBEEF;

// 写入数据(key 范围由应用自定义,避免与协议栈冲突)
result = nvm3_writeData(nvm3_defaultHandle, 0x0001, &myData, sizeof(myData));

参考文档

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 空间规划、配置选项和迁移方法。
在多协议应用(如 DMP 方案中同时运行 OpenThread 和 Bluetooth)中,NVM3 被所有协议栈共享。请确保各协议栈与应用层使用的 NVM3 key 范围不重叠,具体 key 分配请参考 AN1135。

Build docs developers (and LLMs) love