Reduce idle current below 5µA

Hi all,

I'm working on optimizing the power consumption on my nRF52840 DK and need some guidance. Currently measuring ~5µA average idle current via PPK2, but I need to reduce this further for my application.

IMAGE:


Current Configuration:

My prj.conf includes these power management settings:

CONFIG_LOG=n
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
CONFIG_PM_CPU_OPS=y
CONFIG_POWER_DOMAIN=y
CONFIG_POWEROFF=y
CONFIG_BT_TRANSMIT_POWER_CONTROL=y
CONFIG_BT_CTLR_TX_PWR_ANTENNA=-10
CONFIG_PM_S2RAM=y

# Disabled peripherals
CONFIG_I2C=n
CONFIG_SPI=n
CONFIG_PWM=n
CONFIG_ADC=n
CONFIG_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_AUDIO=n
CONFIG_SERIAL=n
CONFIG_SENSOR=n

# BLE connection parameters
CONFIG_BT_PERIPHERAL_PREF_MIN_INT=800
CONFIG_BT_PERIPHERAL_PREF_MAX_INT=800
CONFIG_BT_PERIPHERAL_PREF_LATENCY=5
CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=1500
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=y


Device tree overlay disables unused peripherals:
&adc { status = "disabled"; };
&uart0 { status = "disabled"; };
&i2c0 { status = "disabled"; };
&i2c1 { status = "disabled"; };
&pwm0 { status = "disabled"; };
&spi1 { status = "disabled"; };
&spi2 { status = "disabled"; };
&qspi { status = "disabled"; };
&spi3 { status = "disabled"; };


Questions:

  1. Power state control: Is there a way to force the CPU into a specific low-power state? I know pm_state_force() existed, but CONFIG_PM has been removed and the function is only available under #if defined(CONFIG_PM) || defined(__DOXYGEN__) in pm.h
  2. System poweroff with RTC wakeup: Can I use sys_poweroff() with the internal RTC timer as a wakeup source/interrupt?
  3. PM_S2RAM effectiveness: Does enabling CONFIG_PM_S2RAM make S2RAM the preferred power state when the system goes idle?

Additional concerns:

  • What could be causing current spikes during idle?
  • Are there other configuration options I'm missing for ultra-low power?

Notes:-

  • no external hardware other than ppk ii used
  • using k_sleep(K_FOREVER); inside main loop to put cpu in idle mode.
  • I am using ble  


thanks,

  • Hi,

    It looks like you may be seeing some USB noise from the interface. Please try to use the PPK2 in source mode instead as this should lead to less noise in the measurements (see Measuring current in Source Meter mode)

    Power state control: Is there a way to force the CPU into a specific low-power state? I know pm_state_force() existed, but CONFIG_PM has been removed and the function is only available under #if defined(CONFIG_PM) || defined(__DOXYGEN__) in pm.h

    This are no addtional power states implemented on the nrf52 series. It will enter System ON mode when entering the idle thread and the power managment is automated in HW by the power management unit (PMU).

    System poweroff with RTC wakeup: Can I use sys_poweroff() with the internal RTC timer as a wakeup source/interrupt?

    No, the clocks are powered off in System OFF so you need an external wakeup source.

    PM_S2RAM effectiveness: Does enabling CONFIG_PM_S2RAM make S2RAM the preferred power state when the system goes idle?

    This option is not available for this chip.

    Best regards,

    Vidar

  • Hello Vidar,

    Sorry for the late reply, I got stuck in another issue.

    After your recommendation, I tried different modes and obtained the following results:



    Ammeter with Coin Cell

    Configuration:



    Result:

    same result as when connected with usb



    Source Meter

    Configuration:




    Result with vext->nRF switch off

    saw increase in idle current to greater than 100ua!!


    Result with vext-> nrf switch on

  • The USB cable must still be connected to the DK to supply the supporting curcuitry like the interface MCU to avoid leakage. VDD is also closer to 3 volt.

Related