Low Power consumption for nRF52 series of devices

I was looking for different power options for nRF52/53 series of devices and possible want more information on how to reduce power such that device can run for months on a battery.

There was one interesting thread which discuss this for nRF51 series of devices. But that one is quite old (over 9 years now). So can someone from Nordic guide on this how to reduce power consumption of the device and individual blocks of SoC?

https://devzone.nordicsemi.com/f/nordic-q-a/1657/how-to-minimize-current-consumption-for-ble-application-on-nrf51822

Note: I have selected some tags to address topic for power consumption discussion.

Parents
  • I was working on this topic and want to ask some more question regarding power consumption and reducing the power on nRF52840 device.

    Currently, I do not have Nordic PPK-2 and measure the current through ampere meter via header P21 on the nRF52840-DK. The current consumption is around ~25uAmps when device it ideal(not advertising) with spike of around ~100uAmps when device do advertise.

    To reduce the power I did some changes to my application. First, I disabled the serial monitor and Logging through config options. This reduces significant amount of current consumption.

    Still I think there can be reduction in power consumption hence I am posting some questions and my current code.

    I have disabled the peripherals which are not needed in device.overlay file. As the following file, there are many of them in disabled state.

    &uart0 {
        status = "disabled";
    };
    &uart1 {
        status = "disabled";
    };
    
    &spi0 {
    	status = "disabled";
    };
    &gpiote{
        status = "disabled";
    };
    
    &spi1 {
    	status = "disabled";
    };
    &spi3 {
        status = "disabled";
    };
    
    &qspi {
        status = "disabled";
    };
    
    &adc {
        status = "disabled";
    };
    
    &pdm0 {
    	status = "disabled";
    };
    &i2c0 {
    	status = "disabled";
    };
    
    &i2c1 {
    	status = "disabled";
    };
    
    &nfct {
        status = "disabled";
    };

    In Kconfig file, I have enabled DC-DC converter which in my understanding enabled by default and I do not need to enable through power API in my application. The same is for clock configuration which I have enabled the external low power LFCLK 32khz clock through Kconfig as well as in my code by nrfx_clock_start(NRF_CLOCK_DOMAIN_LFCLK);

    I also have powered down unused RAM by power_down_unused_ram();

    My question is what else can I change in my code to reduce power?

    The config file is as follows.

    CONFIG_GPIO=y
    
    CONFIG_BT=y
    CONFIG_BT_CENTRAL=y
    
    CONFIG_BT_DEBUG_LOG=y
    CONFIG_BT_SMP=y
    CONFIG_BT_DIS=y
    CONFIG_BT_DIS_PNP=n
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_GATT_CLIENT=y
    
    CONFIG_BT_DEVICE_NAME="Key"
    CONFIG_BT_DEVICE_APPEARANCE=833
    
    CONFIG_PM=y
    # Required to disable default behavior of deep sleep on timeout
    CONFIG_PM_DEVICE=y
    
    CONFIG_LOG=n
    CONFIG_SERIAL=n
    
    CONFIG_BOARD_ENABLE_DCDC_HV=y
    CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
    CONFIG_RAM_POWER_DOWN_LIBRARY=y
    
    CONFIG_CAF_POWER_MANAGER=y
    CONFIG_CAF_POWER_MANAGER_TIMEOUT=10
    CONFIG_CAF_POWER_MANAGER_STAY_ON=y

  • Hi,

    What is flashed to the network core? Have you checked if logging is disabled for the network core?

    regards

    Jared 

  • Hi, It is single core. nRF52840. not nRF5340.

    I read that it can be disabled on nRF5340 on some article..

    Do I need to do anything for power management API? I do not understand it well though.

  • Hi,

    Sorry, I missed that from your newest reply, 

    What other peripherals are you using?

    If you flash the ble_app_power_profiling app, what current consumption do you measure?

    regards

    Jared

  • Hi, I just want to use GPIO0 and GPIO1, nothing more. So I have "disabled" most of the peripherals.

    For the example you have mentioned, I did not have it in my version of nRF connect SDK but then I cloned the sample's repo and found that initially, the current measurement is around ~580uAmps and later around ~20uAms. 

    I do measure the same ~20/24uAmps values with my example. 

    Does this seem okay?  Or more current reduction is possible?

  • Hi there,

    Can you share a pre-compiled hex of your application?

    I want to flash it to my nRF52840 DK,

    regards

    Jared 

Reply Children
  • Hi,

    Do you only use the GPIO peripheral? Do you use the BLE or any of the internal Timers/Clocks?

    I flashed your fw to my nRF52840 DK and I measured about 2 µA during sleep:

    I would say that this is acceptable and within the expected IDLE sleep current for the nRF52840,

    regards

    Jared

  • Hi,

    Thanks for posting that screenshot. Well, I intend to use GPIO 1&2 only.

    Apart from that I use BLE just for advertising, That's why in that image there are two verticals lines nearly every 4 seconds or so.

    I do not use timers/internal clocks. I use external 32.xx Khz clock.

    Should usbd be disabled in the code when the upload is finished? Or it is taken care of by the interface MCU and the firmware itself?

    Below is generated .dts file.

    8206.zephyr.dts

    If there are no more optimizations needed it is fine for now. I would accept it as you have already measured it using PPK.

  • ujur007 said:
    Apart from that I use BLE just for advertising, That's why in that image there are two verticals lines nearly every 4 seconds or so.

    Yes, this was exactly why I asked this question ;)

    ujur007 said:
    Should usbd be disabled in the code when the upload is finished? Or it is taken care of by the interface MCU and the firmware itself?

    This should be taken care of the MCU itself, programming the chip should not "turn on" the USBD peripheral in the application. The chip will use the SWD pins for programming and debugging.

    ujur007 said:

    Below is generated .dts file.

    8206.zephyr.dts

    If there are no more optimizations needed it is fine for now. I would accept it as you have already measured it using PPK.

    Great,

    I think it looks ok,

    regards

    Jared 

Related