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

nRF52840 power questions: DC/DC converter and powering down the system

I've got a couple of puzzles relating to a 52840 design that evolved from an 52832 design, belonging to a customer. 

1) following the suggestions at https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/optimizing-power-on-nrf52-designs #1, I verified that the DC/DC converter is populated as suggested in the datasheet.  I then went into the sdk_config.h file and turned on NRFX_POWER_ENABLED, NRF_POWER_CONFIG_DEFAULT_DCDCEN, and left NRF_POWER_DEFAULT_DCDENHV turned off. Quiescent power (with no BLE communications) went up from 1.2mA to 1.9mA. This seems counterintuitive - are there additional configuration options that we should be paying attention to if we turn on NRFX_POWER? Or is this actually the correct way to enable the DC/DC converter?

2) after calling sd_power_system_off() we still see 1mA of power usage, with the peripherals around the chip being identical to those used with the 52832, where calling that same function drops the usage down to about 20uA.  After reading somewhere that EASY_DMA might prevent sleep, we explicitly turn off the UART with 

NRF_UART0->ENABLE = (0 << UART_ENABLE_ENABLE_Pos);

and turn off the SPI with 

nrf_drv_spi_uninit(&spi);

but these don't seem to help. What else might be holding the power high at this point?

Thanks!

Pierre

  • So it turns out things are not that simple.  Calling:

        ret_code_t err_code = 0;
    err_code = nrf_pwr_mgmt_init();
    APP_ERROR_CHECK(err_code);

    reliably fails and quickly reboots from the APP_ERROR_CHECK:

    00> <error> app: ERROR 8 [NRF_ERROR_INVALID_STATE] at :0
    00> PC at: 0x00000000

    The docs at https://infocenter.nordicsemi.com/topic/sdk_nrf5_v16.0.0/group__nrf__pwr__mgmt.html suggest: "

    Warning
    Depending on configuration, this function sets SEVONPEND in System Control Block (SCB). This operation is unsafe with the SoftDevice from interrupt priority higher than SVC."

    without giving much of a hint how to deal with the issue.  So the question remains: can power management library be used with S140 device, and if so, what do we need to do to allow that?  For a bit of background, we did migrate this project from what was originally SDK12.2, so the various interrupt priority levels are set to 7, while in the example's config.sdk, many (most?) appear to have been raised to 6.  The docs unfortunately don't give enough info to know which priority level might be the problem.

    Thanks!

  • Hi Pierre

    As for your first post, you should not need both these functions, as long as the SoftDevice has been initialized, sd_power_system_off(); should be sufficient.

    As the SoftDevice and power management libraries are used together in the power management example, they should be able to work together. nrf_pwr_mgmt_init() may return NRF_ERROR_INVALID_STATE if you haven't initialized the app_timer module first (app_timer_init();), so please make sure that this is done. 

    Best regards,

    Simon

  • You were correct that app_timer_init() needed to be called before nrf_pwr_mgmt_init().  However, we're wondering how the power management library makes its determination as to when to shut down. We are seeing that if we (due to application requirements) turn off UART and PDM, that triggers a pwr_mgmt shutdown, all the way down to SysOff, despite active BLE advertising.  While the power usage is lower :-) that doesn't do us much good if BLE connections won't work. 

    We are calling nrf_pwr_mgmt_run() in the main while(1) loop, and have NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED set to 0.  Do we need to do something specific to tell power management to stay alert to listen for connection requests?

  • Hi

    The device should definitely not go to system OFF if the radio (and SoftDevice) is running, so something doesn't seem right here. Can you provide a snippet of code showing how exactly you turn off UART and/or PDM? There must be something trigging the device to shut down entirely when you disable (one or both of) these peripherals, as the radio peripheral and SoftDevice should keep the application running.

    Best regards,

    Simon

  • Hi Simon,

    what we're doing is:

    NRF_UART0->ENABLE = 0;
    AudioPDM_Disable();

    where:

    void  AudioPDM_Disable( void )
    {
    ret_code_t status;

    if(m_audio_enabled == false)
    {
    return;
    }

    status = nrf_drv_pdm_stop();
    if (status == NRF_SUCCESS)
    {
    m_audio_enabled = false;
    }

    nrf_gpio_pin_set(MIC_EN_PINNUMBER); // shut off microphone power

    }
    I would not have expected either of these to have a major effect on power,
    but presumably there is a checklist somewhere that's looking at what's active,
    and perhaps our advertising isn't setting something it's looking for.

Related