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

nRF52840 DK / PCA10056 System Off

Hi all,

I cannot manage to get a proper System Off consumption with the nRF52840.

I use this setup, with devkits as the DUT (powered through "External Supply") :

When using a PCA10100 (nRF52833), I get this (4µA), when calling nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF) :

But, with the PCA10056, I get this (2mA) :

Both devkits have the exact same physical settings (jumpers and switches).

If I configure some GPIO to wake up the device from the System Off, I get a normal reset.

What could explain that I cannot manage to have a proper System Off with the nRF52840, but I can with the nRF52833 ?

I have the same problem when using a custom board instead of a devkit.

Thanks a lot.

Parents Reply Children
  • Hi Jerome,

    I am sorry for the long silence. I have now made some measurements and findings.

    What is the position of SW6 on PCA10056? When the switch is positioned at 'nRF ONLY" I measure about 5uA. However, when I move the switch to 'Default' I measure 2mA. Have you tried toggling this switch? If we are lucky, you will see the measured current drop to the uA range as well.

    If we do the same exercise on PCA10100 we measure 5uA when set to 'nRF ONLY'. If the switch is set ti 'DEFAULT' the current only jumps a few hundred nA.

    Here are a few notes regarding my setup: I performed the measurements with PPK2 set up in Source meter mode. I compiled ble_app_uart using nRF5 SDK 17.0.2 and SoftDevice S140. I made the same shutdown call as you as well as disabling uart. The main() of the modified example then looked like this:

    int main(void)
    {
        bool erase_bonds;

        // Initialize.
        //uart_init();
        log_init();
        timers_init();
        buttons_leds_init(&erase_bonds);
        power_management_init();
        ble_stack_init();
        nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF);
        gap_params_init();
        gatt_init();
        services_init();
        advertising_init();
        conn_params_init();

        // Start execution.
        printf("\r\nUART started.\r\n");
        NRF_LOG_INFO("Debug logging for UART over RTT started.");
        advertising_start();

        // Enter main loop.
        for (;;)
        {
            idle_state_handle();
        }
    }

    In sdk_config.h I disabled logging on line 7731 by changing from 1 to 0: #define NRF_LOG_ENABLED 0.

    Best regards,

    Håkon

Related