RSL10 deep sleep characteristic

Hi Team,

HW used - RSL10 QFN EVB V1.3

I am new to RSL10 as I have been using nordic chipsets so far. Sorry for the very basic questions.

I am evaluating the deep sleep current characteristic (25-50 nA) mentioned in the datasheet. I have used sleep_RAM_retention project from the CMSIS pack, and the below given is the current profile I observed.

I have few questions here:

  1. Could you please help me to configure the code to run from FLASH instead of RAM ?

  2. Could you please help me to setup the minimal code to put the device into deep sleep mode (50 nA) and wakeup using a GPIO ? - I dont need any other functionalities running in the code, like LED, switch. the sequence should be as simple as given below:

main() → configure_GPIO_wakeup() → goto_deep_sleep()

My aim is to measure the minimum current it will consume while transiting to deep sleep and when waking up from deep sleep.

regards,
Luke

@Luke

You can refer to our previous thread as for the reference to know how to get low 50nA current and that is for wakeup from Flash. This is deep sleep mode . It can close all except analog registers.

How do I enter the different deep sleep modes in the RSL1O? - #5

In the sleep_RAM_retention example, there is:

void Sleep_Mode_Configure(
    struct sleep_mode_flash_env_tag *sleep_mode_flash_env)

There are configurable options for wakeup source.

   /* --------------------------------------------------------------------- */

    /* Set delay and wake-up sources, use
     *    WAKEUP_DELAY_[ 1 | 2 | 4 | ... | 128],
     *    WAKEUP_DCDC_OVERLOAD_[ENABLE | DISABLE],
     *    WAKEUP_WAKEUP_PAD_[RISING | FALLING],
     *    WAKEUP_DIO*_[RISING | FALLING],
     *    WAKEUP_DIO*_[ENABLE | DISABLE] */
    sleep_mode_flash_env->wakeup_cfg = WAKEUP_DELAY_32          |
                                       WAKEUP_WAKEUP_PAD_RISING |
                                       WAKEUP_DIO3_DISABLE      |
                                       WAKEUP_DIO2_DISABLE      |
                                       WAKEUP_DIO1_DISABLE      |
                                       WAKEUP_DIO0_DISABLE;

Thank you for using our community forum!

Hi martin,

Thank you for your reply.

Could you please tell me how to run the code from flash ?

@Luke
How to wakeup from flash?
Our RSL10 Firmware Reference 5.3.3 Boot and wakeup initialization section has this information on the page 45. As for the code reference, please refer to sleep_RAM_retention project.

Thank you for using our community forum!

Hi Martin, Thank you for your reply.

I think my question is not clear.

Generally, a microcontroller can run the instructions (code) from either flash or from RAM. If it has to be from RAM, code from FLASH has to be moved to RAM on start-up.

In RSL10’s case, how does it work ? Does RSL10 execute from FLASH or RAM ?

@Luke
Sleep_RAM_retention sample. This is deep sleep mode . It can close all except analog registers. This deep sleep mode is wakeup from flash. The deep sleep mode can have very low current consumption. (**nA).

For instance peripheral_server_sleep sample code, this sleep mode is wakeup from RAM . So between advertising interval and connection interval, chip goes into sleep mode.
The normal sleep mode can have higher current consumption. (**uA).

Can you please give a simple answer to this rather than complicating things ?

@Luke

Our RSL10 execute from Flash in most projects.
The sleep_RAM_retention project execute from Flash. (start from base of Flash).

For sleep_RAM_retention project, power on, the code start from main(void).
After wake-up, the code still will start from main(void).

The difference is shown in snippet below:

Thank you for your reply.

The startup code is executing the above given section in function “_start()”.

Could you please explain me what this part is doing ?

@Luke
In the sections.d we have defined an area for .data section. These data variables are initialized data.
Example like this in the code:
int32_t myData=0x12345678;
Before running main function, we need copy these initialized data from FLASH to RAM.
Now we use flash copy function to achieve this.

Wakeup from deep sleep: One can find out what caused the wakeup (Baseband, DIOn). What events result in a wakeup from baseband. I noticed there is a wakeup on every frame transmission.

  1. Is this before or after the transmission?
  2. If after is it then allowed to update the frame content?
  3. Are there any other events resulting in a BB wakeup ?

@lvrk

Q1. Is this before or after the transmission?

A1: Wakeup is not based on frame transmission. It is related BB timer, (like advertising interval and connection interval). When baseband controller find there is no transmission event, it will go to sleep.

Q2. If after is it then allowed to update the frame content?

A2: After wakeup, you can update the frame content.

Q3. Are there any other events resulting in a BB wakeup ?

A3: As I said before, event can’t cause wakeup.

image

Thank you for using our community forum!

Hi Martin – thanks for this quick reply.
How then do I know that an advertising was sent so that I can update the frame content ?
I haven’t found an GAPM_CMP_EVT for this.

@lvrk

A1: If you need update the advertising data, you can use this after wakeup.

A2: If you need to know exactly adverting timing, you can refer to this community forum link.

KB: Using DIO PIN to show TX and RX activity on RSL10

Sometimes we need know when TX/RX is active for some application (like coexistence with WIFI).
RSL10 can have this capability to show TX/RX activity by using DIO PINs.

Here is an example of how to use DIO1 to show TX activity, and DIO3 to show RX activity.
Let’s use the peripheral_server sample application for reference.