How to achieve low power consumption on custom nRF5340 board.

Hi,

We have been working on our nRF5340 custom board with ncs V2.0.2.

Our application runs for 10 minutes to collect some sensor data and transfer it over BLE, then it goes to the IDLE state for 20 minutes, and the cycle repeats forever.

What we are trying to achieve is, to put the board into deep sleep in that IDLE period of 20mins to reduce the total power consumption.

To do so, we tried the power management concept in our application by adding the following,

PM configs in our applications prj.conf file,

CONFIG_PM
CONFIG_PM_DEVICE

Required PM files in main.c

#include <pm/pm.h>
#include <pm/device.h>
#include <pm/policy.h>

From what we understand from the Zephyr power management, once we made the above changes, the Zephyr PM subsys will put the board into a suitable power state when the application enters the idle thread, or we can force set the PM state to enter on the next idle thread entry by using "pm_state_force" function call.

But, with all this, 2.7mA is the lowest current we can get with our application in the SOFT_OFF power state.

We also tried using the sleep method in the nRF BLE sample program "ncs\v2.0.2\nrf\samples\bluetooth\peripheral_lbs".

In that example, we disabled BLE, and LED, and put the main thread into a forever sleep, with the hope that this would put the application into a SOFT_OFF power state, and by doing so 600uA is the lowest current we got.

We followed this blog post too, but we couldn't achieve the mentioned low power consumption even in the SOFT_OFF power state.

Could we be missing anything?
We appreciate any help you can provide.

Thanks in advance,
Siva

Parents
  • Hi

    Also make sure that logging, etc. is disabled for both the child image and application image in your prj.conf file and that you make sure there aren't any unused peripherals that are enabled in the child image as well as the application core, as this has been an issue in the past. You can use the DeviceTree Visual Editor to get a better look visually at what is enabled and not in your project. What sample project is your application based on here exactly? 

    Best regards,

    Simon

  • Hi Simon,

    From, what I understand so far.

    Low power consumption (< 10uA) can be achieved with the following steps,

    • Enable the Power Management (adding PM configs) on both the application and the child image prj.conf file.
    • Disable the serial logging on both the application and the child image.
    • Disable the unused peripherals on both the application and the child image.

    Do I get it correctly?

    Also, I need some clarity on the following,

    1. Are the steps mentioned above sufficient, or are any additional steps required to achieve low power consumption?
    2. Is calling "pm_state_force" to enter the sleep state, necessary or optional?
    3. Is adding a list of Power States for the CPU in the .dts file, required or not?
    What sample project is your application based on here exactly? 

    Our application isn't based on any sample project.

Reply
  • Hi Simon,

    From, what I understand so far.

    Low power consumption (< 10uA) can be achieved with the following steps,

    • Enable the Power Management (adding PM configs) on both the application and the child image prj.conf file.
    • Disable the serial logging on both the application and the child image.
    • Disable the unused peripherals on both the application and the child image.

    Do I get it correctly?

    Also, I need some clarity on the following,

    1. Are the steps mentioned above sufficient, or are any additional steps required to achieve low power consumption?
    2. Is calling "pm_state_force" to enter the sleep state, necessary or optional?
    3. Is adding a list of Power States for the CPU in the .dts file, required or not?
    What sample project is your application based on here exactly? 

    Our application isn't based on any sample project.

Children
No Data
Related