在实际的工程中,需要在设备上保存序列号,这个序列号应该不能被升级等擦除。一般方案是在Flash上开辟一块区间保存序列号等参数。在nRF52832的设备上,有一些UICR的寄存器,类似于NVM,可以用来保存一些参数,更方便使用。
UICR寄存器的地址
从spec上,UICR的寄存器地址是从0x10001000开始,前面0x07c个地址为保留地址,从0x080开始32个寄存器用户可以用。
UICR写的三种方式
1. 通过nrjprog命令
通过nrjprog命令,可以在生产时写入,程序内部读出。比如写 0x10001080地址,写入值为0x00000001。该模式方便产线上同构自动化工具写入序列号等参数。
nrfjprog.exe -f nrf52 --eraseuicr
nrfjprog.exe -f nrf52 --memwr 0x10001080 --val 0x00000001
2. 通过代码初始化
通过属性定义,写入。该模式较为适用于那些比较固定的参数,比如硬件版本号等。
const uint32_t SERIAL_ADDR attribute((at(0x10001080))) attribute((used)) = 0x1;