What are ultra low power options with RTC wakeup?

I'm switching from STM32 to nRF52840 and it's for a battery-operated device that only wakes up every few hours and only stays awake for about 10 seconds. With the STM32 (and using bare-metal), I had multiple low-power states to choose from and I went with the one that would keep the RAM and allowed me to run the RTC (using external 32 kHz crystal). The RTC would trigger an interrupt and wake up the processor and it would resume the code, executing the next line after it had gone to sleep.

I've been doing some research for nRF52840 and I feel like I'm seeing mixed messages so my only question is if something like this is possible. My understanding is the following:

The most common thing I see is people just turning the MCU off (PM_STATE_SOFT_OFF) but it will require an external signal to wake it up, so no RTC (that is my understanding). Also the wakeup will be a complete reset.

The next best option is to do essentially the same thing but to retain the part of the RAM that is in use. Then when the MCU resets, some bootstrap code is needed that avoids initializing the RAM and I guess it would be possible to get the MCU to resume running the code from where it left off. This sounds really complicated and that still means I can't run the RTC to wake it up.

Probably the easiest thing to do is just keep things running but use the generic sleep mode so that the only active thread is the idle thread and the MCU / Zephyr will see to it that the chip is using as little power as needed. I worry that this will not be low-power enough but I'm not sure.

I don't know if I need to add an external RTC to the board (currently I'm using nRF52840 DK but will be using a custom board eventually).

What would be my options or best option for a battery-operated device that needs to sleep most of the time but also wake itself up occasionally and consume very low power?

  • Hi,

    You're correct in your understanding. The nRF52840 offers two low-power sleep modes:

    1. System On Sleep (also called IDLE sleep): In this mode, the CPU enters a low-power state by executing _wfe(). It remains in this state until an interrupt is triggered. The current consumption in this mode is typically around 2 µA, and the CPU can quickly resume execution directly from where it left off.

    2. System Off Sleep: This is the lowest power mode, where the CPU's core functionality, along with peripherals and clocks, is turned off. The CPU can only be awakened by a reset, a GPIO signal, an NFC wake-on-field event, a VBUS_Detect event, or the LPCOMP. When the CPU wakes from System Off Sleep, it performs a power-on reset, meaning the device will reinitialize.

    Could you clarify your concerns about performing a reset after System Off Sleep, and what are your specific low-power requirements?

    regards

    Jared 

Related