RLS10 sleep mode scenarios

Hi,
We are using a custom board using the RSL10. In this application, the RSL10 will stay mainly in the deep sleep with some RAM retention (wake up from RTC on RAM). Sometimes (once a day), we want to use the BLE stack to send some stored data.

The description of this application will be as follows:

Do you have any code sample to achieve this scenario? Specifically, going to deep sleep with wake up on RAM and BLE part is disabled completely the remaining time?

Best regards,

Hi,

I’m trying to create a projet from scratch to test the wake up from RAM when BLE stack is not used.
In this project, I initialize power + clock, then I configure the sleep to wake up from DRAM0.

I use the RTC the wake up the µC when it sleep every 10s. The problem is that when the RSL10 should wake up, there is a Reset.

You will find attached my project.

can you please have a look to it and tell me what’s wrong.

Best regards,
VVI_POCV3_Project.7z (1,0 Mo)

Hi,

Only to give feedback about the issue i have, may be someone would be interested.

In my project, in the APP_PowerModes_Sleep_WakeupFromRAM function, i comment out the line below :

ACS->WAKEUP_GP_DATA = (((uint32_t) SYSCTRL_MEM_ACCESS_CFG->WAKEUP_ADDR_PACKED_BYTE) << 24) |
    					sleep_mode_init_env.mem_power_cfg_wakeup;

Doing that, i can have waking up from DRAM0 configured for that. I didn’t need to configure the SYSCTRL_MEM_ACCESS_CFG register as mentioned in RSL10 Hardware Reference

I see in some examples that the GP_DATA register is used for sleep configuration but i don’t know his role.

Best regards,

@Embed

You tried reference our peripheral_server_sleep project.
You might need use our sample project and make a small change step by step to make sure his change is correct and make sense.
Here is an example we can see in your code:

image

Q1: Use DRAM0_TOP to save the wakeup address. This does not make sense if your application still use DRAM1 and DRAM2. How can you protect this address information from being overwritten?
Actually you can still use DRAM2_TOP as our sample project and disable DRAM0 and DRAM1 power in sleep mode if you want to save power consumption.

Q2: Why did you use FLASH_POWER_ENABLE in memory configuration?

I think you can reference to our sleep_RAM_retention project after shutting down BLE and enter into “deep sleep mode” while waiting for PAD/RTC event. (this deep sleep mode is wakeup from flash which can save a lot of power).

I can see your requirement

“sleep with some RAM retention (wake up from RTC on RAM). Sometimes (once a day),”

– once a day to wakeup.

Why don’t you select sleep_RAM_retention. This deep sleep mode is wakeup from flash, which still can store some data in RAM.

Hi Martin,

Thank you for your answer.

What i’m trying to do is to evaluate the consomption in function of DRAM bloc retained. I’ll increase my DRAM blocks as my application grows.
You say that I can use DRAM2_TOP and DRAM0 and DRAM1 power in sleep mode. If my application stores data in all DRAM block, i’ll lose them in sleep mode when power is disabled.

there is a sample exemple from onsemi with the same config:

/* Set wake-up application start address (LSB must be set) */
	sleep_mode_init_env.app_addr =
	    (uint32_t) (&Wakeup_From_Sleep_Application_asm) | 1;

	/* Set wake-up restore address */
	sleep_mode_init_env.wakeup_addr = (uint32_t) (DRAM0_TOP + 1
	        - POWER_MODE_WAKEUP_INFO_SIZE);

	/* Configure memory retention */
	sleep_mode_env->mem_power_cfg = FLASH_POWER_ENABLE   |
	                                DRAM0_POWER_ENABLE   |
	                                BB_DRAM0_POWER_ENABLE;

	/* Configure memory at wake-up (PROM must be part of this) */
	sleep_mode_init_env.mem_power_cfg_wakeup = PROM_POWER_ENABLE    |
	                                           FLASH_POWER_ENABLE   |
	                                           DRAM0_POWER_ENABLE   |
	                                           BB_DRAM0_POWER_ENABLE;

Yes i tried that but when i do:

  /* Enable VDDM retention regulator */
    sleep_mode_flash_env->VDDMRET_enable = VDDMRET_ENABLE_BITBAND;

    /* Select memory instance(s) to be retained */
    sleep_mode_flash_env->mem_power_cfg = DRAM0_POWER_ENABLE; // retain only DRAM0

Then i use a counter to be incremented in each wake up, when this counter reaches a fixed value, it toggle a GPIO. this wasn’t the case, i don’t know why. In the map file i have this:

 .bss.cpt_wakeup
                0x2000006c        0x4 ./main.o
                0x2000006c                cpt_wakeup

Best regards,