Hi. We are measuring on our university the power consumption of our custom board, which is using nRF52840 within the module ACN52840, nRF Connect SDK 2.5.
The power consumption is much more than is stated in datasheet of module (https://1897079276.rsc.cdn77.org/wp-content/uploads/2018/08/20191203_ACN52840_Datasheet_V1.3.pdf page 11 and 12). In datasheet there is stated in System ON, Wake on any event, No RAM retention, Full 256 kB RAM retention 0,97 microA respectively 2,35 microA. I will share for you current consumption data from datasheet.
We have also take a look at online power profiler, the results show that in standby mode the chip should consume about 0.5 mA, during TX mode about 15.1 mA. I will share with you.
But what we measured using oscilloscope are values 1 mA in System ON, Wake on any event, No RAM retention (as we think in this mode should be chip operating when there is "nothing to do") and 32 mA during TX event. I will share with you results of measurement, on y axis there is current in A.
Based on all these numbers stated in datasheet, power profiler and our current measurements we think that chip is not entering Ultra-low power mode (System ON, Wake on any event, No RAM retentio) during inactivity, but is probably staying in standby mode and consuming much more current. There is a big difference 0,97 microA stated in datasheet and 1 mA which we measured.
About software, what we understand is that the developer doesnt need to take care about power consumption that much, as the chip has the PMU (Power Managament Unit) which is taking care of current consumption. PMU is automatically executing Thread 0 (which is power save thread) when there is nothing to do. But we feel like that Thread 0 is not executed in our peripheral.
I will share our board files and also peripheral project files. We are running the sensor network, where the peripheral is taking measurements. There is one central node and more sensor nodes (peripherals). The sensor node is in mode peripheral, central node in central mode. For starting advertising I am using work function k_work_submit(), advertising is Coded as I am using Coded PHY. The connection is established calling callbacks like normal (connected()...), the measurements are executed using function k_work_reschedule(k_work_delayable_from_work(work), K_MSEC(interval));.
I have come across some ticket (devzone.nordicsemi.com/.../how-to-enter-system-on-sleep-in-zephyr), where one of your engineers said that the idle thread (Thread 0) is called when there is nothing to do to save power, unless you are using infinite loop in main() function or calling k_cpu_idle() directly. I dont use infinite loop in main() function or call k_cpu_idle either. And I think that between measurements the board has "nothing to do", so Thread 0 should be called to save power, but it doesnt look like. Are we getting something wrong with our program development that Thread 0 is not called, or where can be the possible solution to get better power consumption.
You can take a look at the code, maybe you will find out some issue in sensor node code or board code.
/cfs-file/__key/communityserver-discussions-components-files/4/codes.zip
Thank you very much for answer.