NRF52 UICR寄存器讀寫


通常NRF52系列芯片的UICR寄存器可以保存一些重要的用戶數據,而寫到此寄存器的數據掉電后是不會丟失的, 讀寫此寄存器的方法如下:

寫入方法1:

MDK開發環境直接按以下方式編寫。

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;

如果是SES開發環境(如下使用SES_ARM編譯器),需用以下方式編寫。

 然后在工程的.ld文件里增加以下內容:

MEMORY
{

  UICR (r) : ORIGIN = 0x10001080, LENGTH = 0x04

}

SECTIONS

{

.uicr_customer :
{
KEEP(*(.uicr_customer))
} > UICR

}

這種方法在booltloader 代碼里可以找到其應用,bootloader的起始地址存在UICR->NRFFW[0]寄存器里,根據代碼注釋所描述,當向芯片flash里寫入bootloader 的Hex文件時,編譯器會將bootloader的起始地址編譯到HEX里,然后再寫到UICR->NRFFW[0]寄存器。

 

寫入方法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命令寫入/讀出數據 ,看看寫入的數是否正確,命令如下:

 

寫入方法3:

直接使用nrfjprog 命令操作UICR寄存器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM