Deep sleep Wake-up without initiating RF for lower power consumption

Hi,

Achieving ultra low power consumption is main concern for powered battery devices.
I encounter design concerns about reducing the power concumption witht the RSL10 in regards to the use of BLE/wake up configuration.
Wakeup from deep sleep generates a peek current as the RF front end is always enabled.
I have the need to exit deep sleep wihout having to initialize the application without the RF front end. Moreover, my application shall spent 99% of time in deep sleep mode, having to execute measures. The BLE is to fetch measure data once in a while.

I ll start with a general question,
Is there any soft dev/designers having the same concern and then how have you tackled the problem?

My goal is to manage a more complex wakeup process with a detection of wakeup source from the RTC alarm which shall not initialize the RF front end (avoiding a peek current when RSL10 exits from deep sleep).
To achieve this, i am trying to split the wakeup ‘Sys_PowerModes_Wakeup’ from the OnSemi sample codes, with a 2 stages wakeup process.

The primary method shall configure the RSL10 only to execute code (RC oscillator @3MHz as system clock) to look up for actions to perform, if an action is expected to execute, then call the second wakup stage. Otherwise return to Deep Sleep.

According the wake up source status, wakeup from the BaseBand Timer would go thought the complete wakeup process (as done today),
and wake up from the RTC ALARM executes only the primary stage, and the second stage with full RF initiated if required.

My concern is to set a proper configuration for the primary wakeup stage and return to deep sleep.
I set up an example, I experience MCU reset with TIMEOUT RESET FLAG & WDT RESET FLAG set on reboot.
So far, my primary stage init does nothing, i am trying to figure out what to do (from the ‘Sys_PowerModes_Wakeup’ method and with the help of the RSL10 hardware reference).
I call Sleep_Mode_Enter() to return in dee sleep when no action taken.

For my primary stage process, i have 2 questions:

  • how to achieve the mandatory and minimalist init for the primary stage to execute code (sys clock RC @ 3Mhz, no access to flash, RF off) in regards to ‘Sys_PowerModes_Wakeup’
  • how to return to deep sleep from the primary stage

Sylvain MARITEAU

@sylvain.mariteau

First of all, I would like to say using “BLE_Power_Mode_Enter” is not “deep sleep mode” like sleep_ram_retention.
Please refer to our thread on this topic at:

BLE sleep mode and deep sleep mode difference

Question 1:
How to achieve the mandatory and minimalist init for the primary stage to execute code (sys clock RC @ 3Mhz, no access to flash, RF off) in regards to ‘Sys_PowerModes_Wakeup’

Answer 1: You need remove 48MHz ready code in our peripheral_server_sleep sample code.

/* Check/wait until 48 MHz oscillator is started */
while (RF_REG39->ANALOG_INFO_CLK_DIG_READY_ALIAS !=
       ANALOG_INFO_CLK_DIG_READY_BITBAND);

a. One place is at App_Initialize(void)

b. An another place is at rsl10_sys_power_modes.c – > Sys_PowerModes_Wakeup_2Mbps(void)

Also you need to use BBCLK_DIVIDER_3 for 3MHz to have 1MHz for BBCLK.
#define BBCLK_DIVIDER_3 ((uint32_t)(0x3U << BBIF_CTRL_CLK_SEL_Pos))

If you still have questions, please let me know so we can discuss this further.

Thank you for using our community forum!