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

Reset button doesn't work on some nRF52840 DK PCA10056 1.0.0 boards

The reset button doesn't seem to work on two of my PCA10056 1.0.0 development kits, but works on two others, and works on some earlier versions.

I tested by running the peripheral/uart and peripheral/blinky examples with SDK 15.0.0 and SDK 15.2.0

nrfjprog -f NRF52 -r works fine.

What could I be doing wrong to make the reset button not work on two specific boards? I'm not modifying the examples to not define CONFIG_GPIO_AS_PINRESET or anything.

Parents Reply Children
  • That works fine.

    The two boards that are having this issue are

    PCA10056 1.0.0 2018.17 683415786

    PCA10056 1.0.0 2018.17 683742869

    One of the boards that works is

    PCA10056 1.0.0 2018.20 683557756

    Also working are the boards I tried under version 1.0.0

  • Hi.

    Could you try this command on both board that does not work:

    nrfjprog --memrd 0x10001200 --w 32 --n 8

    Please post the output, it should be:

    0x10001200: 00000012 00000012                     |........| 

    - Andreas

  • Hi.

    You pin reset number is not 18 somehow, as it should be, but 21.

    Can you open the project you have programmed the boards you have a problem with and search for:

    NRF_UICR->PSELRESET[0] and NRF_UICR->PSELRESET[1]

    They should be set to 18, not 21.

    Like this:

        #if defined (CONFIG_GPIO_AS_PINRESET)
            if (((NRF_UICR->PSELRESET[0] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos)) ||
                ((NRF_UICR->PSELRESET[1] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos))){
                NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
                while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                NRF_UICR->PSELRESET[0] = 18;
                while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                NRF_UICR->PSELRESET[1] = 18;
                while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
                while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                NVIC_SystemReset();
            }
        #endif

    You can find them in the system_nrf52840.c file.

    Hopefully this works.

    - Andreas

Related