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

  • Need to amend the above.  By "quiescent" i actually mean it's not doing much but it is advertising, so there is some BLE activity, though the questions about power configuration remain the same

  • Hi

    1. What exactly is it that causes the current consumption to increase from 1.2mA to 1.9mA? Please note that the current consumption is a little higher during BLE advertising in the nRF52840 than the nRF52832 in general. This is reflected in the product specification as well as the Online Power Profiler for BLE. Or do you mean that enabling DCDC in your application is what is increasing the current consumption? Can you confirm that the two inductors L2 and L3 are added to your design (which are required for the DCDC regulator to operate as intended?

    When you're using a SoftDevice, you should use the sd_power_dcdc_mode_set() function to enable the DCDC regulator. 

    2. When you're still seeing ~1mA of power after calling sd_power_system_off() points to the device being in DEBUG mode. You can disable DEBUG mode to make sure that DEBUG is not set in your project's preprocessor definitions, and make sure that you power cycle your device after programming it. If it's a custom board, also make sure that the debugger is disconnected from your device.

    Best regards,

    Simon

  • Hi Simon,

    I tried the sd_power_dcdc_mode_set() instead – thank you for pointing to that, since the documentation is sorely lacking an indication that the sdk_config settings should NOT be used if an SD is present.  Enabling that routine does seem to raise the power drain very slightly (it has some new peaks at 1.6mA for about 15 seconds but settles around 1.2mA which is similar to before) though my understanding was that enabling the DC/DC converter should have shown some noticeable reduction in power.  I checked, and L2 and L3 are installed, with the correct values.

     

    1. the test in “off mode” was done with the production (non-debug) build with the J-Link board disconnected, which is why I remain puzzled as to why consumption is still around 1mA

     

    Thanks!

    Pierre

  • Hi

    Thank you for your feedback. There are indeed some SoftDevice specific functions like sd_power_dcdc_mode_set() and sd_power_system_off() for instance. The DCDC behavior you're explaining seems very strange to me, as it definitely shouldn't be higher with the DCDC enabled. What kind of radio activity is your application doing, BLE advertising?

    2. Can you provide a snippet of code showing how exactly you disable your peripherals and put your device to sleep? I would suggest using the Power Profiling application example in our SDK for reference on how to put your application into system OFF mode.

  • We are doing basic advertising and not much else at that stage.  However, due to your suggestion, I started looking at the power profiling example, and it is clear that none of the nrf_pwr_mgmt  functions are currently in the project, so I'm going to start experimenting with them. 

    Can I ask you to please explain which of the following would be more correct (or do we not need both?):

    nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF);
    sd_power_system_off();

    or:

    sd_power_system_off();
    nrf_pwr_mgmt_shutdown(NRF_PWR_MGMT_SHUTDOWN_GOTO_SYSOFF);

    Thanks!

Related