This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

NRF_UICR->CUSTOMER read/write on 52832

Hello,
I'm trying to port my code (working in production) from 52811 to 52832.

I have several crashes on a piece of code at the start of my application that check the NRF_UICR, and based on the value does something then erases it.

When I say crash, it restarts the application, without entering app_error_fault_handler 

// Check first two bytes of NRF_UICR->CUSTOMER
if ( NRF_UICR->CUSTOMER[0] != 0x0 || NRF_UICR->CUSTOMER[1] != 0x0 ) {
    
    // Read NRF_UICR->CUSTOMER[i], i from 0 to 8
    (...)
    
    //Erase first two bytes of NRF_UICR->CUSTOMER
    NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
    while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
    NRF_UICR->CUSTOMER[0] = 0x0;
    NRF_UICR->CUSTOMER[1] = 0x0;
    NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
    while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
}
 

What could be different between 52811 and 52832 on this matter ?

Best regards,
Quentin

Parents Reply Children
  • Hello Kenneth,

    I have the same result with both CONFIG_NFCT_PINS_AS_GPIOS and CONFIG_GPIO_AS_PINRESET undefined.

    I have stabilized my port, and I'm now in a state where everything works fine when commenting out the erasing of the first two bytes of NRF_UICR->CUSTOMER

    When uncommenting, project crashes every few seconds (even by itself, when I'm not using any i/o)

    I have added some logs :

    NRF_LOG_INFO("Erasing UICR start");
    NRF_LOG_FLUSH();
    NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
    NRF_LOG_INFO("Erasing UICR 1");
    NRF_LOG_FLUSH();
    while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
    NRF_UICR->CUSTOMER[0] = 0x0;
    NRF_UICR->CUSTOMER[1] = 0x0;
    NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
    while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
    NRF_LOG_INFO("Erasing UICR end");
    NRF_LOG_FLUSH();

    Output :

    00> <info> app: APP START
    00> <info> app: Erasing UICR start
    00> <info> app: Reset_reason: 0x00000004.
    00> <info> app: Reset_reason resetted: 0x00000000.
    00> <info> app: APP START
    00> <info> app: Erasing UICR start
    00> <info> app: Reset_reason: 0x00000004.
    00> <info> app: Reset_reason resetted: 0x00000000.
    
    (...)

  • Please start working on a simplified project I can unzip to a folder you specify in an nRF5 SDK you specify. Do you have access to an nRF52 DK you can use for comparison here?

    If you have "crashes" I assume you mean asserts?

    Please also answer my question: "Can you provide the chip laser markings that is printed on top of the nRF52832 IC?"

    Do you see the same with debugger not connected?

    Is the power supply steady here?

    Kenneth

  • Hello,

    The markings are : N52832 QFAAE1 1845D

    I was (by mistake) shadowing app_error_fault_handler so I was missing this log :
     SOFTDEVICE: INVALID MEMORY ACCESS

    I see the same thing without a debugger, with only the logs

    The power supply is steady yes, I have an Otii

  • I succeeded in making it work by calling sd_softdevice_disable first, and then enabling SD after.

    Is this expected ?

  • Your latest problem is different from your initial case, so I suggest you search for "SOFTDEVICE: INVALID MEMORY ACCESS" on devzone (for instance by google), you should find some suggestions to look for. I am more interested if you have been able to make a sample project for the UICR reset issue.

    Kenneth

Related