4.3 NVM Programming
Devices have two categories of non-volatile memory: user NVM and Factory (Silabs) NVM. Each type is segmented into NVM banks.
There are three user NVM banks, one of which is used for factory programming (whether a base part or an Orderable Part Number).
User NVM can be therefore be burned in the field up to two times. Factory NVM cannot be modified, and contains fixed configuration
information for the device.
The ACTIVE_NVM_BANK device setting can be used to determine which user NVM bank is currently being used and therefore how
many banks, if any, are available to burn. The following table describes possible values:
Table 4.2. NVM Bank Burning Values
Active NVM BANK Value (Deci-
mal)
Number of User Banks Burned Number of User Banks Available to Burn
3 (factory state)
1
2
15
2
1
63
3
0
Note: While polling DEVICE_READY during the procedure below, the following conditions must be met in order to ensure that the cor-
rect values are written into the NVM:
• VDD and VDDA power must both be stable throughout the process.
• No additional registers may be written or read during DEVICE_READY polling. This includes the PAGE register at address 0x01.
DEVICE_READY is available on every register page, so no page change is needed to read it.
• Only the DEVICE_READY register (0xFE) should be read during this time.
The procedure for writing registers into NVM is as follows:
1. Write all registers as needed. Verify device operation before writing registers to NVM.
2. You may write to the user scratch space (Registers 0x026B to 0x0272 DESIGN_ID0-DESIGN_ID7) to identify the contents of the
NVM bank.
3. Write 0xC7 to NVM_WRITE register.
4. Poll DEVICE_READY until DEVICE_READY=0x0F.
5. Set NVM_READ_BANK 0x00E4[0]=1. This will load the NVM contents into non-volatile memory.
6. Poll DEVICE_READY until DEVICE_READY=0x0F.
7. Read ACTIVE_NVM_BANK and verify that the value is the next highest value in the table above. For example, from the factory it
will be a 3. After NVM_WRITE, the value will be 15.
Alternatively, steps 5 and 6 can be replaced with a Hard Reset, either by RSTb pin, HARD_RST register bit, or power cycling the device
to generate a POR. All of these actions will load the new NVM contents back into the device registers.
The ClockBuilder Pro Field Programmer kit is a USB attached device to program supported devices either in-system (wired to your
PCB) or in-socket (by purchasing the appropriate field programmer socket). ClockBuilder Pro software is then used to burn a device
configuration (project file). Learn more at
https://www.silabs.com/products/development-tools/timing/cbprogrammer
.
Table 4.3. NVM Programming Registers
Register Name
Hex Address
[Bit Field]
Function
ACTIVE_NVM_BANK
0x00E2[7:0]
Identifies the active NVM bank.
NVM_WRITE
0x00E3[7:0]
Initiates an NVM write when written with value 0xC7.
NVM_READ_BANK
0x00E4[0]
Download register values with content stored in NVM.
DEVICE_READY
0x00FE[7:0]
Indicates that the device is ready to accept commands when
value = 0x0F.
Si5397/96 Reference Manual
Modes of Operation
silabs.com
| Building a more connected world.
Rev. 0.9 | 15