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

Parents
  • 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?

Reply
  • 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?

Children
No Data
Related