In order to meet the demand of ultra-low power consumption, the TLSR8258 has been designed to achieve independent control of each power domain to ensure that one power domain is turned on or off according to requirements. Ultra-low power management is essentially the control of these power domains.It is quite necessary to be familiar with all the power domains of the system before introducing PM performance.
Power domain of TLSR8258 mainly includes:
Status of each power domain at initial power-on and normal working(with simple code runing):
Power Domain | Initial Power-on Status | Normal Working Status |
---|---|---|
Radio Frequency | OFF | ON/OFF |
Audio | OFF | ON/OFF |
USB | OFF | ON/OFF |
Power Management Module | ON | ON |
Clock-24M CRYSTAL | ON | ON |
Clock-24M RC | ON | ON |
Clock-32M CRYSTAL | OFF | OFF/ON |
Clock-32M RC | ON | ON/OFF |
Memory | ON | ON |
Core and Other Modules | ON | ON |
The multi-stage Power Management(PM) module is flexible to control power state of the whole chip or individual funcational blocks. There are 6 working modes available to the user in this chip:
The power domain status corresponding to each mode is as follows:
Power Domain | Active Mode | Idle Mode | Suspend Mode | Deepsleep with SRAM Retention Mode | Deepsleep Mode | Shutdown Mode |
---|---|---|---|---|---|---|
Radio Frequency | ON | ON | OFF | OFF | OFF | OFF |
Audio | ON | ON | OFF | OFF | OFF | OFF |
USB | ON | ON | OFF | OFF | OFF | OFF |
Power Management Module | ON | ON | ON | ON | ON | ON |
Clock-24M CRYSTAL | ON | ON | OFF | OFF | OFF | OFF |
Clock-24M RC | ON | ON | OFF | OFF | OFF | OFF |
Clock-32M CRYSTAL | OFF | OFF | OFF | OFF | OFF | OFF |
Clock-32M RC | ON | ON | ON | ON | ON | OFF |
SRAM 8K/16K/32K retention | ON | ON | ON | ON | OFF | OFF |
SRAM 32K | ON | ON | ON | OFF | OFF | OFF |
FLASH | ON | ON | OFF | OFF | OFF | OFF |
MCU | ON | STALL | STALL | OFF | OFF | OFF |
Analog Register | ON | ON | ON | OFF | OFF | OFF |
Analog Register(WathchDog) | ON | ON | ON | ON | ON | OFF |
Analog Register(Power-On) | ON | ON | ON | ON | ON | OFF |
Digital Register | ON | ON | OFF | OFF | OFF | OFF |
The switching between different modes is implemented as follows:
Mode Switch | Active Mode | Idle Mode | Suspend Mode | Deepsleep with SRAM Retention Mode | Deepsleep Mode | Shutdown |
---|---|---|---|---|---|---|
Acive Mode | - | mcu_stall_wakeup_by_timer0() mcu_stall_wakeup_by_timer1() mcu_stall_wakeup_by_timer2() | pm_sleep_wakeup() | pm_sleep_wakeup() | pm_sleep_wakeup() | pm_sleep_wakeup() |
Idle Mode | mcu_stall_wakeup_by_timer0() mcu_stall_wakeup_by_timer1() mcu_stall_wakeup_by_timer2() | - | - | - | - | - |
Suspend Mode | PAD/32k Timer/RESET Pin | - | - | - | - | - |
Deepsleep with SRAM Retention Mode | PAD/32k Timer/RESET Pin | - | - | - | - | - |
Deepsleep Mode | PAD/32k Timer/RESET Pin | - | - | - | - | - |
Shutdown Mode | RESET Pin | - | - | - | - | - |
Note: Active Mode can directly switch to other mode, but other modes cannot directly switch to each other. You must switch to the active mode before switching to another mode.
In order to facilitate users to quickly develop products according to their own needs, TSI provide the following related APIs and examples.
APIs list | Description | Example | Update Date | Status |
---|---|---|---|---|
blc_pm_select_internal_32k_crystal() | select internal 32K RC as the clock source of 32K timer | API-PM-CASE1 | 2019-1-10 | Done |
blc_pm_select_external_32k_crystal() | select external 32K Crystal as the clock source of 32K timer | - | 2019-1-10 | Done |
pm_get_32k_tick() | get the tick of 32K timer | - | 2019-1-10 | Done |
cpu_set_gpio_wakeup() | set polarity of gpio for PAD wakup and enable the specified gpio as PAD wakeup | API-PM-CASE2 | 2019-1-10 | Done |
cpu_stall_wakeup_by_timer0() | set timer0 as wakeup source and let mcu enter idle Mode | API-PM-CASE1 | 2019-1-10 | Done |
cpu_stall_wakeup_by_timer1() | set timer1 as wakeup source and let mcu enter idle Mode | refer to API-PM-CASE1 | 2019-1-10 | Done |
cpu_stall_wakeup_by_timer2() | set timer2 as wakeup source and let mcu enter idle Mode | refer to API-PM-CASE1 | 2019-1-10 | Done |
cpu_sleep_wakeup() | set PAD as wakeup source and let mcu enter suspend Mode | API-PM-CASE2 | 2019-1-10 | Done |
set 32k timer as wakeup source and let mcu enter suspend Mode | API-PM-CASE3 | 2019-1-10 | Done | |
set PAD as wakeup source and let mcu enter deepsleep Mode | API-PM-CASE4 | 2019-1-10 | Done | |
set 32k timer as wakeup source and let mcu enter deepsleep Mode | API-PM-CASE5 | 2019-1-10 | Done | |
set PAD as wakeup source and let mcu enter deepsleep with Retention Mode | API-PM-CASE6 | 2019-1-10 | Done | |
set 32k timer as wakeup source and let mcu enter deepsleep with Retention Mode | API-PM-CASE7 | 2019-1-10 | Done | |
pm_get_wakeup_src() | get the wakeup source | - | 2019-1-10 | Done |
TSI provides the following examples of this module to help users quickly understand and apply related modules.
Examples list | Description | Update Date | Status |
---|---|---|---|
API-PM-CASE1 | Timer0/1/2 wakeup from idle mode | 2019-1-10 | Done |
API-PM-CASE2 | PAD wakeup from suspend mode | 2019-1-10 | Done |
API-PM-CASE3 | 32K timer wakeup from suspend mode | 2019-1-10 | Done |
API-PM-CASE4 | PAD wakeup from deepsleep mode | 2019-1-10 | Done |
API-PM-CASE5 | 32K timer wakeup from deepsleep mode | 2019-1-10 | Done |
API-PM-CASE6 | PAD wakeup from deepsleep with retention mode | 2019-1-10 | Done |
API-PM-CASE7 | 32K timer wakeup from deepsleep with retention mode | 2019-1-10 | Done |
Date | Description | Author |
---|---|---|
2019-1-10 | initial release | LJW |
2019-8-15 | update api name for application | LJW |