Comparing Non-Volatile Data Storage Implementations#
The following table presents an overview of the main features of the various Silicon Labs Non-Volatile Data Storage implementations.
Feature | NVM3 | SimEEv1 | SimEEv2 | PS Store |
---|---|---|---|---|
Compatible devices | EFM32, EFR32 | EFR32 Series 1 | EFR32 Series 1 | EFR32 Series 1 |
Compatible radio protocols | EmberZNet, Connect, Z-Wave, OpenThread, Bluetooth | EmberZNet, Connect | EmberZNet, Connect | Bluetooth |
Flash used for storage | 3 or more flash pages | 8 KB | 36 KB | 4 KB |
Virtual pages | NA | 2 | 3 | NA |
Max basic storage (Sum of all object data with overhead) | Variable (see Using Third Generation Non-Volatile Memory (NVM3) Data Storage for details) | 2 KB | 8 KB | 2 KB |
Max number of objects | Limited by basic storage | 254 | 254 | Limited by basic storage |
Max object size (bytes) | Configurable 208-4096 | 254 | 254 | 56 |
Object creation/deletion | Runtime | Compile time | Compile time | Runtime |
Compiled flash size excluding data storage | 9.1 KB | 3.5 KB | 5.4 KB | 1.6 KB |
Counter object support | Yes | Yes | Yes | No |
Indexed object support | Partial (note 1) | Yes | Yes | No |
Overhead per object (bytes) | 4 (size <= 128 bytes); 8 (size > 128 bytes) | 2 | 6 | 10 |
Counter object size including overhead (bytes) | 212 | 60 | 56 | NA |
Counter increments before rewrite | 100 (EFR32 Series 1); 50 (EFR32 Series 2) | 25 | 25 | NA |
Note 1: When using NVM3, indexed objects are implemented by storing each index in a separate NVM3 object.
Flash Lifetime#
All Silicon Labs Flash Data Storage implementations use some form of wear-levelling to prolong flash lifetime. The effectiveness of the wear-levelling depends on the implementation, the type of data stored, and how often it is updated. The main factors that affect wear-levelling and thereby flash lifetime are:
Size of flash used for data storage: More flash area gives longer flash lifetime. For NVM3, the number of flash pages used for data storage can be configured, while the rest of the implementations use fixed storage sizes.
Stored overhead per object: When writing data to the object storage, some overhead bytes are added to identify the data. Implementation with less overhead means the data objects take up less space in flash, and gives longer flash lifetime.
Alignment to minimum object size: Objects are stored in multiples of the smallest object size. If the data size does not align with this size, padding bytes are added, which adds to the stored data and reduces flash lifetime. For instance, when storing 16-bit objects, NVM3 and PS Store add two extra bytes of padding in addition to the overhead bytes. SimEEv1/v2 are able to store 16-bit data objects without padding.
Remaining storage after basic storage: For implementations using virtual pages, when switching to a new virtual page one instance of each object is written to the page. The rest of the virtual page can then be used to store new writes of the objects. If a lot of space is used to store one instance of each object, little space is left in the virtual page to use for wear-levelling the subsequent object writes. The flash lifetime will therefore be reduced when the total amount of object data is large relative to the virtual page size. Even for NVM3, where virtual pages are not used, the flash lifetime is limited by the available space of the total NVM3 storage.
To help monitor the actual flash wear, NVM3 and SimEEv1/v2 include function calls for reporting the number of page erases of the data storage flash pages. These erase counters can be read during accelerated lifetime testing of a product to verify if the flash wears at an acceptable rate.