Reduce power consumption from network core

My company is working on a project that uses the nRF53 that needs to wirelessly send out data roughly every 3ms (via ESB). We are now at the point where power needs to be optimized.

There seems to be promise in cutting back power in the nRF53's network core (see attached screenshots). When sending, our current draw is about 2mA, with about 1.6ms each time used to send the data out. From simply disabling the network core 1 time during runtime (by using nrf_reset_network_force_off()) and keeping it off, we see it is drawing about 1mA for 0.9ms each time. So roughly speaking, it looks like 2mA - 1mA = 1mA on average is used to keep the network core operating, and the time spent executing code in network core each time is 1.6ms - 0.9ms = 0.7ms.

  • Sending normally (network core on)
  • Sending with network core off

One method we tried is to turn off network core after each time data is sent, and turn it back on before the next data. However, that is presenting with timing problems. It is also being addressed in a separate ticket/forum-post.

For this ticket, I would like suggestions for what other methods that can be used (related to the network core) in order to cut back on power and bring the average as close to that 1mA as possible. For example, ways to put the network core to a lighter sleep that allows faster wakeup? ESB options that lower current draw? Configuration options exclusive to network core that could be drawing unneeded current? I'm open to whatever suggestions come to mind. Thank you in advance!

For context, my setup is using a Windows 10 machine, nRF5340DK, PPK2, NCS v2.5.0.

Parents Reply Children
  • Will check for unused peripherals later, but this is outside the scope of this ticket...Are there network core specific peripherals I should take a look at?

    Do you mean an external source for the LFXO? If so, then I believe not. We are focused right now on the nRF5340DK (results in original post were from the DK); SB1-SB4 have not been modified...Is LFXO related to network core? I can see HFCLK is related (see clocks_start()) but I'm not sure if LFXO is in use by network core.

    Tested turning on/off HFCLK by starting clock just before esb_write_payload(), replacing clocks_start() with code here, stopping clock using esb_is_idle() and NRF_CLOCK->TASKS_HFCLKSTOP = 1; ... It does lower current but only when the chip is idle; overall average current has increased to about 2.1mA (vs 2mA previously). We'll probably need to investigate this more.

    ------

    EDIT #1 - Investigated HFCLK some more. Any ideas for how to work around this?:

    • Implementation above seems like it's overall running for longer when reading/sending data - about 1.8ms (vs 1.6ms previously

    • Tried another implementation where we're starting HFCLK earlier (via IPC message sent from app to network core). While it's starting up, I perform my data reads/processing. But overall current draw is even higher - about 2.2mA. Time spent reading/sending data is slightly less - about 1.5ms, but higher current could be due to more frequent 10mA spikes. 

     

  • Hello,

    ''Do you mean an external source for the LFXO? If so, then I believe not. We are focused right now on the nRF5340DK (results in original post were from the DK); SB1-SB4 have not been modified..''

    Then it's fine as nRF5340DK has external crystal on the board. 

    When radio receiver receiving data, the current consumptions follow the following table

    https://docs.nordicsemi.com/bundle/ps_nrf5340/page/radio.html#ariaid-title161

    You can compare your value with this specification.

Related