通常NRF52系列芯片的UICR寄存器可以保存一些重要的用户数据,而写到此寄存器的数据掉电后是不会丢失的, 读写此寄存器的方法如下:
写入方法1:
const uint32_t UICR_ADDR_0x80 __attribute__((at(0x10001080))) __attribute__((used)) = 0x12345678;
const uint32_t UICR_ADDR_0x84 __attribute__((at(0x10001084))) __attribute__((used)) = 0xAAAAAAAA;
const uint32_t UICR_ADDR_0x88 __attribute__((at(0x10001088))) __attribute__((used)) = 0x55555555;
const uint32_t UICR_ADDR_0x8C __attribute__((at(0x1000108C))) __attribute__((used)) = 0x33333333;
写入方法2:
static void uict_write_test(void)
{
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
for(uint8_t i=0;i<32;i++)NRF_UICR->CUSTOMER[i] = 0x33445566;
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
}
此函数需放在softdevice 初始化之前调用,读出时也一样。
还可以通过nrfjprog命令写入/读出数据 ,看看写入的数是否正确,命令如下: