SILABS AN725

AN725
A D VA N C E D L OW P OWER TECHNIQUES FOR SiM3L1 XX
D EVICES
1. Introduction
The system power budget of a low power system has two components: active and low power mode. Active mode
periods include an active core executing code or a larger number of active peripherals. In low power mode periods,
the core enters a sleep state and fewer peripherals are active.
Active Mode
Low Power
Mode
Figure 1. Defining the Power Budget—Active and Low Power Modes
SiM3L1xx devices have several features to address reducing power consumption in all operational modes to
achieve a longer product lifetime in battery-operated systems. This document addresses each of these features
and provides guidelines for achieving low power consumption in a variety of configurations and applications.
2. Key Points
This key topics of this document are as follows:
How
to reduce active mode time and power consumption
to reduce low power mode power consumption
Measuring the low power modes on an SiM3L1xx MCU card
General power-saving tips
How
3. Relevant Documentation
Precision32™ Application Notes are listed on the following website: www.silabs.com/32bit-appnotes.
AN666:
Usage Guide for e SiM3U1xx,SiM3C1xx, and SiM3L1xx DMA and DTM Modules
AN720: Precision32™ Optimization Considerations for Code Size and Speed
AN667: Getting Started with the Silicon Labs Precision32 IDE
AN670: Getting Started with the Silicon Labs Precision32 AppBuilder
Rev. 0.1 9/12
Copyright © 2012 by Silicon Laboratories
AN725
AN725
4. Reducing Active Mode Power Consumption
In active mode, the core is fetching instructions from memory and executing those instructions, and a large number
of peripherals may be active at once. This section discusses ways to reduce the SiM3L1xx device power
consumption in active mode (Normal, PM1, PM4, or PM5).
4.1. Dynamic AHB/APB Clock Scaling
One of the easiest ways to reduce overall system power consumption is to reduce the active mode time, which
maximizes the amount of time spent in the low power mode.
If the longest path to the next low power mode is the execution of code (e.g., a math algorithm), then it is typically
beneficial to run the AHB clock at the fastest speed possible to reduce the time spent in active mode.
If the longest path to the next low power mode is the transfer or collection of data through a peripheral, it is best to
run the clock at the lowest speed required for the peripheral. For example, if using the UART at 115200 baud and
the core is waiting for data to finish transferring, then running the AHB and APB at the slowest clock to achieve
115200 baud may be the lowest power configuration. However, if data is being transferred memory to memory by
the DMA, running the clocks at the fastest speed possible yields the lowest power consumption.
Due to the clock system of the SiM3L1xx devices, the AHB and APB clocks can be dynamically changed quickly
and easily using the CLKCTRL module based on the needs of the application.
4.2. Using the DMA and DTM Modules
The Direct Memory Access (DMA) and Data Transfer Manager (DTM) modules help move data without core
intervention. This reduces overall power consumption by removing the power consumed during flash accesses.
Additionally, since the Cortex-M3 is a load-store architecture where data is loaded into and out of registers only,
multiple instructions are required to move data from one area of memory to another, so the DMA and DTM may be
faster than data moves by the core, depending on the AHB load.
Instead of performing the data moves, the core can either sleep using wait-for-interrupt (WFI) or wait-for-event
(WFE) instructions, or the core can perform other tasks in parallel, reducing the active mode time.
For more information on how to use the DMA and DTM modules, see “AN666:Usage Guide for e
SiM3U1xx,SiM3C1xx, and SiM3L1xx DMA and DTM Modules” on the Silicon Labs 32-bit application notes website:
www.silabs.com/32bit-appnotes.
4.3. Code Optimization
There are several different coding techniques, compiler, and library options available for the Precision32 devices.
These options will change both code size and execution speed, which may result in power consumption savings in
systems which aim to execute code in active mode as quickly as possible before entering a low power state. In
addition to getting to the low power mode more quickly, changing the project settings may lead to smaller code
footprints, compacting the code into a smaller area with fewer memory accesses. The power consumption benefits
of code optimization for speed or size will vary depending on the project requirements and code.
For more information on how to write efficient code and the various optimization settings, see”AN720:
Precision32™ Optimization Considerations for Code Size and Speed” on the Silicon Labs 32-bit application notes
website: www.silabs.com/32bit-appnotes.
2
Rev. 0.1
AN725
4.4. Code Dependency
In addition to dynamic clock management, the power consumption of the SiM3L1xx device will vary with the type of
code the core executes. For example, if the core executes a complex math routine with branches, the pipeline will
miss every time a branch is taken and new instructions must be fetched. This stall and fetch period causes more
flash accesses, which increases power consumption. In addition, the core executes a wide variety of instructions
and activates the memory bus to fetch data from RAM or flash for use in these routines. In contrast, a string of NOP
instructions will take less power because the core isn’t executing complex instructions.
The data shown in Figure 2 does not use adaptive voltage scaling or any other techniques to change power
consumption. All of these measurements were taken using the PLL as the clock source with a higher SPMD setting
(i.e., reduced flash access frequency) at AHB frequencies above 40 MHz. The APB clock is equal to the AHB
clock, when the APB is enabled.
As shown by the data, the flash access frequency (SPMD) has a direct effect on the code that includes branches,
since the core stalls when waiting for the new instructions, resulting in reduced power consumption. This means
that it may be more efficient to run at a faster frequency with the same current consumption to reduce overall time
spent in active mode. For the code that is a long string of NOPs, the core never has a pipeline miss and never
stalls, so there is no change in power consumption with a different flash speed mode.
Current
For power sensitive applications, experimenting with various code styles and instruction mixes may result in
reduced power consumption in active mode.
SPMD = 1
20
25
30
35
SPMD = 2
40
45
50
AHB and APB Clock (MHz)
NOP code, no APB clocks enabled, all LDOs at 1.8 V
NOP code, all APB clocks enabled, all LDOs at 1.8 V
complex code, no APB clocks enabled, all LDOs at 1.8 V
complex code, all APB clocks enabled, all LDOs at 1.8 V
Figure 2. Power Consumption Code Dependency
Rev. 0.1
3
AN725
4.5. Adaptive Voltage Scaling
SiM3L1xx devices have scalable LDOs powering the digital and memory modules on the device. These LDO
outputs are factory calibrated to 1.8 V to handle all process and temperature variations, but this voltage is often
much higher than the minimum voltage required by the digital and memory circuits. During normal operation, these
LDO outputs can be set to a value less than 1.8 V to reduce the amount of excess power consumed by these
circuits with some buffer to ensure correct operation.
When the digital or memory LDOs are sourced from the dc-dc converter, adaptive voltage scaling can also allow
the LDOs to track the dc-dc output voltage to utilize the higher efficiency of the dc-dc converter and reduce the
losses in the regulators.
70
60
50
Power (mW)
40
30
20
10
0
0
10
20
30
40
50
AHB Clock (MHz)
Digital LDO output fixed at 1.8 V
Digital LDO output scaled once at production test
Digital LDO output scaled adaptively by firmware
Figure 3. Reducing Power Consumption with Adaptive Voltage Scaling
4
Rev. 0.1
AN725
4.6. DC-DC Load and Power Efficiency
The DCDC0 module on SiM3L1xx devices is a dc-dc buck converter with an input range of 1.8 to 3.8 V and an
output range of 1.25 to 3.8 V. The efficiency of this regulator changes based on load and the converter
configuration, as shown in Figure 4. The converter configuration can be changed dynamically or bypassed
according to the anticipated demands of the application to maintain the highest power efficiency and reduce power
consumption.
90%
85%
Power Efficiency (%)
80%
75%
70%
65%
60%
55%
50%
0
10
20
30
40
50
60
70
80
90
100
Current (mA)
Configured for Low Loads
Configured for High Loads
Figure 4. Reducing Power Consumption with the DC-DC Buck Converter
There are three ranges of operation for the dc-dc converter corresponding to three different load sizes:
1. Loads less than 5 mA
2. Loads between 5 and 15 mA
3. Loads greater than 15 mA
When operating with loads less than 5 mA, the dc-dc converter is most efficient when configured for light loads:
1. Power switch size set to 0 (PSMD = 0)
2. Asynchronous mode enabled (ASYNCEN = 1)
3. Minimum pulse width set to 40 ns (MINPWSEL = 3)
For loads between 5 and 15 mA, the converter should be set in a middle configuration:
1. Power switch size set to 0 (PSMD = 0)
2. Synchronous mode enabled (ASYNCEN = 0)
3. Minimum pulse width disabled (MINPWSEL = 0)
Rev. 0.1
5
AN725
To configure the converter for loads greater than 15 mA:
1. Power switch size set to 3 (PSMD = 3)
2. Synchronous mode enabled (ASYNCEN = 0)
3. Minimum pulse width disabled (MINPWSEL = 0)
Table 1 shows a summary of these settings for each load configuration.
Table 1. DC-DC Load Configurations
Load
Power Switch Size
(PSMD)
Synchronous or
Asynchronous
(ASYNCEN)
Minimum Pulse
Width (MINPWSEL)
less than 5 mA
5 mA to 15 mA
greater than 15 mA
0
0
3
Asynchronous (1)
Synchronous (0)
Synchronous (0)
40 ns (3)
disabled (0)
disabled (0)
After configuring the dc-dc converter for the load size, switch the appropriate LDOs to the converter output to
reduce system power. Each of the three LDOs (memory, digital, and analog) can be switched to the battery voltage
(VBAT) or the dc-dc converter output independently.
The firmware can adjust the dc-dc converter configuration based on the anticipated load for the active time. For
example, if only a few peripherals will be active and the core will halt for a period of time, then the load may be less
than 5 mA. Firmware can adjust the dc-dc converter appropriately during this period. If the core is fetching
instructions from flash at full speed and executing a math routine, then switching to the high load configuration will
yield lower power consumption.
For extremely light loads (less than 2-3 mA), the dc-dc converter will be less efficient than the LDOs at ~50%
efficiency, depending on the VBAT voltage and LDO bias settings. When this occurs, the dc-dc converter should be
bypassed (BEN = 1), which connects VBATDC to VDC, or disabled (DCDCEN = 0).
6
Rev. 0.1
AN725
5. Reducing Power Consumption in Low Power Modes
In low power mode, the device core halts and the number of active peripherals typically reduces to the minimum
required by the application (i.e., real time clock). This section discusses techniques to reduce the SiM3L1xx device
power consumption in low power modes (PM2, PM3, PM6, and PM8).
5.1. SiM3L1xx Low Power Mode Overview
The SiM3L1xx devices feature seven low power modes in addition to normal operating mode. Several peripherals
provide wake up sources for these low power modes, including the Low Power Timer (LPTIMER0), RTC0 (alarms
and oscillator failure notification), Comparator 0 (CMP0), Advanced Capture Counter (ACCTR0), LCD VBAT
monitor (LCD0), UART0, low power mode charge pump failure, and PMU Pin Wake.
In addition, all peripherals can have their clocks disabled to reduce power consumption with the clock control
(CLKCTRL) registers whenever a peripheral is not being used.
The SiM3L1xx devices have the power modes defined in Table 2.
5.1.1. Normal Mode (Power Mode 0)
Normal mode encompasses the typical full-speed operation. The power consumption of the device in this mode will
vary depending on AHB/APB clock speeds, the settings of CLKCTRL and the peripherals, and the dc-dc converter
and LDO settings.
5.1.2. Power Mode 1
Power Mode 1 occurs when the core executes code from RAM instead of flash. The power consumption of the
device is less than normal mode when in PM1.
5.1.3. Power Mode 2
In Power Mode 2, the core halts and the peripherals run at full speed. To place the device in this mode, the clock
settings in CLKCTRL should remain the same as Normal or Power Mode 1 and the core should execute a WFI or
WFE instruction. If the WFI instruction is called from an interrupt service routine, the interrupt that wakes the device
from PM2 must be of a sufficient priority to be recognized by the core. It is recommended to perform both a DSB
(Data Synchronization Barrier) and an ISB (Instruction Synchronization Barrier) operation prior to the WFI to
ensure all bus access is complete.
5.1.4. Power Mode 3 Fast Wake
Power Mode 3 Fast Wake occurs when all the clocks are stopped except for the LFOSC0 or RTC0TCLK. The core
and the peripherals are halted in this mode. The available wake up sources to wake from PM3 are controlled by the
Power Management Unit (PMU). The available wake up sources are: Low Power Timer (LPTIMER0), RTC0
(alarms and oscillator failure notification), Comparator 0 (CMP0), advanced capture counter (ACCTR0), LCD VBAT
monitor (LCD0), UART0, and PMU Pin Wake. Any reset event will also wake the device from PM3.
If the WFI instruction that wakes the device from PM3 Fast Wake is called from an interrupt service routine, the
interrupt that wakes the device from PM3FW must be of a sufficient priority to be recognized by the core.
By keeping the core clock running at a slow frequency in PM3 and changing the AHB and APB clocks to the Low
Power Oscillator, the device can wake up faster than in standard Power Mode 3 at the expense of higher power
consumption.
5.1.5. Power Mode 3
Power Mode 3 occurs when all the clocks are stopped, and the core and the peripherals are halted. Waking from
PM3 requires one of the PMU wake sources described in “5.1.4. Power Mode 3 Fast Wake” to be properly
configured.
If the WFI instruction is called from an interrupt service routine, the interrupt that wakes the device from PM3 must
be of a sufficient priority to be recognized by the core.
5.1.6. Power Mode 4
Power Mode 4 is the same as normal operation except the AHB clock operates at a slower speed. The power
consumption of the device in this mode will vary depending on the AHB/APB clock speeds, the settings of
CLKCTRL and the peripherals, and the dc-dc converter and LDO settings.
Rev. 0.1
7
AN725
5.1.7. Power Mode 5
Power Mode 5 is the same as PM1 with a slower AHB clock source selected. The core executes code from RAM
instead of flash. The power consumption of the device in PM5 is slightly less than PM4.
5.1.8. Power Mode 6
In Power Mode 6, the core halts and the peripherals run at a slower speed than PM2. To place the device in this
mode, the clock settings in CLKCTRL should remain the same as PM4 or PM5, and the core should execute a WFI
or WFE instruction. If the WFI instruction is called from an interrupt service routine, the interrupt that wakes the
device from PM6 must be of a sufficient priority to be recognized by the core.
5.1.9. Power Mode 8
In Power Mode 8, the core and most peripherals are halted, most clocks are stopped, and registers retain their
state. In addition, the LDO regulators are disabled, so all active circuitry operates directly from VBAT. Alternatively,
the PMU has a specialized VBAT-divided-by-2 low power mode charge pump that can power some internal
modules while in PM8 to save power. The fully operational functions in this mode are: LPTIMER0, RTC0, UART0
running from RTC0TCLK, port match, advanced capture counter, and the LCD controller.
This mode provides the lowest power consumption for the device, but requires an appropriate wake up source or
reset to exit. The available wake up or reset sources to wake from PM8 are controlled by the Power Management
Unit (PMU). The available wake up sources are: Low Power Timer (LPTIMER0), RTC0 (alarms and oscillator
failure notification), Comparator 0 (CMP0), advanced capture counter (ACCTR0), LCD VBAT monitor (LCD0),
UART0, low power mode charge pump failure, and PMU Pin Wake. The available reset sources are: RESET pin,
VBAT supply monitor, Comparator 0, Comparator 1, low power mode charge pump failure, RTC0 oscillator failure,
or PMU wake event.
To enter this mode, firmware must write the SLEEPDEEP bit in the ARM System Control Register. Firmware must
then execute a WFI or WFE instruction. The core will remain in PM8 until an enabled wake up or reset source
occurs.
8
Rev. 0.1
AN725
Table 2. SiM3L1xx Power Modes
Mode
Normal
Power Mode 1
(PM1)
Power Mode 2
(PM2)
Description


Mode Exit
Execute code from RAM
Jump to code in flash
WFI or WFE instruction
NVIC or WIC wakeup
DMACTRL0 disabled
Fast wake mode
enabled in PM3CN
 AHB switched to Low
Power Oscillator
 WFI or WFE instruction
Requires a wake up
source or reset defined by
the PMU
Core operating at full speed
Code executing from flash

Core operating at full speed
 Code executing from RAM

Core halted
 AHB and APB operate at full
speed for peripherals

Power Mode 3
Fast Wake
(PM3FW)
Mode Entrance
All clocks stopped except LFOSC0
or RTC0TCLK
 AHB and APB set to Low Power
Oscillator
 Core clock set to LFOSC0 or
RTC0TCLK



Power Mode 3
(PM3)
Power Mode 4
(PM4)
Power Mode 5
(PM5)
Power Mode 6
(PM6)
All clocks stopped
DMACTRL0 disabled
 Clocks disabled in
PM3CN
 WFI or WFE instruction

Core operating at slower speed
 Code executing from flash



Core operating at slower speed
 Code executing from RAM
Set the AHB clock to a
slower source
Set the AHB clock to a
slower source
 Execute code from RAM
Core halted
 Set the AHB clock to a
slower source
 AHB and APB operate at a slower
speed for peripherals
 WFI or WFE instruction
Requires a wake up
source or reset defined by
the PMU
Set the AHB clock to a
faster source
Set the AHB clock to a
faster source or jump to
code in flash

Low power sleep
 SLEEPDEEP set in the
ARM System Control
The LDO regulators are disabled
Register
and all active circuitry operates
directly from VBAT
 WFI or WFE instruction
 The following functions are
available: ACCTR0, RTC0, UART0
running from RTC0TCLK,
LPTIMER0, port match, and the
LCD controller
 Register state retention
NVIC or WIC wakeup


Power Mode 8
(PM8)
Rev. 0.1
Requires a wake up
source or reset defined by
the PMU
9
AN725
5.2. Measuring Power
This section discusses the hardware setup and code required to reproduce the power specifications reported by
the SiM3L1xx data sheet.
5.2.1. Hardware Setup
To measure the power on the SiM3L1xx MCU Card with a fixed 3.3 V VBAT:
1. Connect a USB Debug Adapter to the 10-pin CoreSight connector (J14).
2. Remove the three shorting blocks from J7.
3. Remove the JP2 Imeasure shorting block and put a multimeter across (positive side on the bottom pin).
4. Move the VBAT Sel switch (SW2) to the middle +3.3 V_VREG position.
5. Move the VIO Sel (SW8) and VIORF Sel (SW9) switches to the bottom VBAT position.
6. Connect the 9 V power adapter to POWER (J6).
7. Download the code to the board.
8. Remove the debug adapter connection.
9. Measure the power of the device.
2
6
9 V Power
Adapter
USB Debug
Adapter
1
3
4
5
Figure 5. SiM3L1xx MCU Card Power Measurement Configuration—Fixed VBAT
10
Rev. 0.1
AN725
To measure the power on an SiM3L1xx MCU Card with a varying VBAT:
1. Connect a USB Debug Adapter to the 10-pin CoreSight connector (J14).
2. Remove the three shorting blocks from J7.
3. Remove the JP2 Imeasure shorting block.
4. Move the VBAT Sel switch (SW2) to the bottom BAT position.
5. Move the VIO Sel (SW8) and VIORF Sel (SW9) switches to the bottom VBAT position.
6. (Optional) Place a battery in the BT1 holder.
7. (Optional) Instead of a battery, connect the positive terminal of a bench power supply to the positive
terminal of the multimeter, the negative terminal of the power supply to the MCU card ground, and the
negative terminal of the multimeter to the top pin of the Imeasure jumper (JP2). This configuration will
prevent any circuitry on the board from interfering with the power measurement.
8. Download the code to the board.
9. Remove the debug adapter connection.
10. Measure the power of the device.
2
USB Debug
Adapter
1
9
3
+000.0075
µADC
2.8
V
4
7
5
6
Figure 6. SiM3L1xx MCU Card Power Measurement Configuration—Varying VBAT
Rev. 0.1
11
AN725
5.2.2. Configuring a Device for Normal (PM0) and Power Mode 4
In Normal (PM0) and Power Mode 4, the device executes code from flash. The only difference between PM0 and
PM4 is the core clock speed (fast and slow, respectively).
To configure a device to run in PM0 or PM4:
1. Enable the clocks to peripherals that will be configured by firmware.
2. Select the desired clock source (LPOSC0, PLL0, etc.) and speed for both AHB and APB clocks.
3. Select the desired adaptive voltage scaling settings using the LDO module.
4. (Optional) Disable the retention mode of any enabled RAM banks.
5. Set the pins in the lowest power configuration for this mode.
6. Disable all unused peripherals.
7. Disable the clocks to all unused peripherals.
8. Jump to code in flash.
To measure the data sheet numbers using an SiM3L1xx MCU Card and the AN725_PowerModes_0_and_4
example:
1. Configure the SiM3L1xx MCU Card according to the instructions in “5.2.1. Hardware Setup”.
2. Open the AN725_PowerModes_0_and_4 example in either Keil µVision or the Precision32 IDE.
3. Select the desired settings using the #defines at the top of the file. There is a set of defines for each data
sheet specification.
4. Compile and download the code to the device.
5. Disconnect the USB Debug Adapter.
6. Reset the device.
7. Measure the power consumption of the device.
5.2.3. Configuring a Device for Power Modes 1 and 5
In Power Modes 1 and 5, the device executes code from RAM rather than flash. The only difference between PM1
and PM5 is the core clock speed (fast and slow, respectively).
Keil µVision uses a scatterfile with a retention RAM tag defined as MCU_RAM_CODE:
MCU_IRAM +0
{
.ANY (+RW +ZI)
.ANY (MCU_RAM_CODE)
}
The project source file can then define a tag in code to place functions in this section of memory:
#define __SI32_RRAM __attribute__ ((section("MCU_RAM_CODE")))
Any functions that use the __SI32_RRAM tag in the definition will be placed in RAM starting at 0x2000_0000:
__SI32_RRAM void run_PM1(void)
{
...
}
For Precision32 projects, a function can be located in RAM by treating it like normal data and applying a data
12
Rev. 0.1
AN725
section attribute tag to it.
__attribute__ ((__section__(".data.name")))
This tag will result in a warning indicating that code is being placed in the data section, but this warning can be
ignored. As an example, placing the PowerModes_2_or_6() function in RAM would look like:
__attribute__ ((__section__(".data.pm2_or_6")))
void PowerModes_2_or_6(void)
{
...
}
There are two ways to access the function in RAM: direct call or function pointer. Direct calls can cause some
issues with debugging the code in RAM, and the debugger may just step over the function instead of stepping into
it. To work around this, single step at the instruction level, set a breakpoint in the RAM code, or use a function
pointer.
To configure a device to run in PM1 or PM5:
1. Enable the clocks to peripherals that will be configured by firmware.
2. Select the desired clock source (LPOSC0, PLL0, etc.) and speed for both AHB and APB clocks.
3. Select the desired adaptive voltage scaling settings using the LDO module.
4. (Optional) Disable the retention mode of any enabled RAM banks.
5. Set the pins in the lowest power configuration for this mode.
6. Disable all unused peripherals.
7. Disable the clocks to all unused peripherals.
8. Jump to code in RAM.
9. (Optional) Disable the AHB clock to the flash controller.
To measure the data sheet numbers using an SiM3L1xx MCU Card and the AN725_PowerModes_1_and_5
example:
1. Configure the SiM3L1xx MCU Card according to the instructions in “5.2.1. Hardware Setup”.
2. Open the AN725_PowerModes_1_and_5 example in either Keil µVision or the Precision32 IDE.
3. Select the desired settings using the #defines at the top of the file. There is a set of defines for each data
sheet specification.
4. Compile and download the code to the device.
5. Disconnect the USB Debug Adapter.
6. Reset the device.
7. Measure the power consumption of the device.
The code executes from RAM in this mode, so all functions called should also be in RAM.
Rev. 0.1
13
AN725
5.2.4. Configuring a Device for Power Modes 2 and 6
For Power Modes 2 and 6, the core halts and no longer executes code, but the active peripherals still run from the
APB clock. The only difference between PM2 and PM6 is the APB clock speed (fast and slow, respectively).
To configure a device to run in PM2 or PM6:
1. Enable the clocks to peripherals that will be configured by firmware.
2. Select the desired clock source (LPOSC0, PLL0, etc.) and speed for both AHB and APB clocks.
3. Select the desired adaptive voltage scaling settings using the LDO module.
4. Disable Power Mode 8 in the Clock Control module.
5. (Optional) Disable the retention mode of any enabled RAM banks.
6. Set the pins in the lowest power configuration for this mode.
7. Set up the wakeup interrupt source (including priority).
8. Disable the SysTick timer to prevent these interrupts from waking the core.
9. Disable all unused peripherals.
10. Disable the clocks to all unused peripherals.
11. Jump to code in RAM.
12. Execute the DSB (Data Synchronization Barrier), ISB (Instruction Synchronization Barrier), and WFI (Wait
for Interrupt) or WFE (Wait for Event) instructions. For SiM3L1xx devices, WFI and WFE have the same
behavior.
To measure the data sheet numbers using an SiM3L1xx MCU Card and the AN725_PowerModes_2_and_6
example:
1. Configure the SiM3L1xx MCU Card according to the instructions in “5.2.1. Hardware Setup”.
2. Open the AN725_PowerModes_2_and_6 example in either Keil µVision or the Precision32 IDE.
3. Select the desired AHB clock rate using the #defines at the top of the file.
4. Compile and download the code to the device.
5. Disconnect the USB Debug Adapter.
6. Reset the device.
7. Press PB1.7 to place the device in PM2 or PM6. The PB1.5 LED will turn off.
8. Measure the power consumption of the device.
9. Press PB1.5 to wake the device from PM2 or PM6. When this happens, the PB1.7 LED will turn on and the
core will sit in an infinite while(1) loop.
The interrupt that wakes the core from the halted state must have sufficient priority if the WFI or WFE instruction
was called from within an ISR.
14
Rev. 0.1
AN725
5.2.5. Configuring a Device for Power Mode 3 Fast Wake
In PM3 Fast Wake, all clocks are stopped except for a very low frequency clock (RTC0OSC or LFOSC0) that
allows the core to wake up faster than standard PM3.
To configure a device to run in PM3 Fast Wake:
1. Enable the clocks to peripherals that will be configured by firmware.
2. Select the desired adaptive voltage scaling settings using the LDO module.
3. Disable Power Mode 8 mode in the Clock Control module.
4. Set the AHB clock to the low power oscillator (LPOSC0).
5. Select the fast wake clock source using the PM3CSEL field in the CLKCTRL PM3CN register.
6. Enable fast wake mode by setting the PM3CEN bit to 1 in the PM3CN register.
7. (Optional) Disable the retention mode of any enabled RAM banks.
8. Set the pins in the lowest power configuration for this mode.
9. Set up the desired PMU wakeup source.
10. Put all of the LDOs in low bias mode.
11. Clear the PMU wakeup flags.
12. Disable the SysTick timer.
13. Disable all unused peripherals.
14. Disable the clocks to all unused peripherals.
15. Execute the DSB, ISB, and WFI or WFE instructions. For SiM3L1xx devices, WFI and WFE have the
same behavior.
To measure the data sheet numbers using an SiM3L1xx MCU Card and the AN725_PowerMode3_Fast_Wake
example:
1. Configure the SiM3L1xx MCU Card according to the instructions in “5.2.1. Hardware Setup”.
2. Open the AN725_PowerMode3_Fast_Wake example in either Keil µVision or the Precision32 IDE.
3. Select the desired AHB clock rate using the #defines at the top of the file.
4. Compile and download the code to the device.
5. Disconnect the USB Debug Adapter.
6. Connect PB0.2 to PB1.5 using a short wire and the J21 and J22 headers.
7. Reset the device.
8. Press PB1.7 to place the device in PM3FW. The PB1.5 LED will turn off.
9. Measure the power consumption of the device.
10. Press PB1.5 to wake the device from PM3FW. When this happens, the PB1.7 LED will turn on and the
core will sit in an infinite while(1) loop.
Rev. 0.1
15
AN725
5.2.6. Configuring a Device for Power Mode 8
PM8 is the lowest power mode where all clocks are stopped and only the PM8 peripherals are available. The RAM
banks do not have retention enabled by default, so firmware must enable each bank to retain data through PM8.
For most applications, it is recommended to enable retention for all RAM banks, but the specific bank containing
the stack pointer must be enabled to ensure proper code operation on an exit from PM8. See “5.5. Retention RAM”
for more information on changing the location of the stack pointer.
To configure a device to run in PM8:
1. Enable the clocks to peripherals that will be configured by firmware.
2. Enable PM8 mode by setting the PMSEL bit to 1 in the CLKCTRL CONFIG register.
3. Set up the desired PMU wakeup source.
4. Switch the AHB clock to the 20 MHz Low Power Oscillator and adjust the flash read timing as necessary.
5. Enable the retention mode of RAM banks needed by the application (all eight banks recommended for
most applications).
Note: To properly execute code after exiting PM8, the stack pointer must be located in a RAM bank with retention enabled.
6. Set the pins in the lowest power configuration for this mode.
7. Set all LDOs to 1.5 V for VBAT between 1.8 to 2.9 V and to 1.9 V for VBAT between 2.0 to 3.8 V output.
8. (Optional) If VBAT is between 2.0 to 3.8 V, set the VBAT Monitor threshold to the high setting.
9. Set up the low power peripherals as desired (RTC0, ACCTR0, LCD0, etc.).
10. (Optional) If using the RTC in low-frequency oscillator mode, enable the RTC0 module using the steps in
the Reference Manual. If using the RTC in crystal mode, the recommended initialization sequence is:
a. Disable RTC0 automatic gain control (AGC) and enable the bias doubler.
b. Set up the RTC0 in crystal mode using the list of steps in the Reference Manual.
c. (Optional) Enable the charge pump (see Step 10).
d. Enable RTC0 automatic gain control and disable the bias doubler.
11. (Optional) Configure and enable the charge pump:
a. Enable the low power charge pump monitor in the PMU.
b. Enable the RTC0 clock to other modules (CLKOEN = 1 in the RTC0 module).
c. Enable the low power charge pump monitor as a reset source.
d. Set the low power charge pump load to the appropriate value for the application. See “5.3. Low Power
Mode Charge Pump” for more information.
e. Enable the low power charge pump and enable it as a PMU wake up source.
f. Enable the low power charge pump interrupt.
12. Disable all undesired reset sources.
Note: The Watchdog Timer (WDTIMER0) and PVTOSC0 modules will behave as if a power-on reset occurred after exiting
PM8, so disabling the Watchdog Timer as a reset source will prevent unwanted resets.
13. Disable the SysTick timer.
14. Disable all unused peripherals.
15. (Optional) Disable the clocks to all unused peripherals. Entering PM8 stops all clocks, so this step is not
necessary for this mode.
16. Clear the PMU wakeup flags.
17. Enable the interrupts for the PMU wakeup source (enabled in Step 3).
18. Set the SLEEPDEEP bit in the core.
19. Execute the DSB, ISB, and WFI or WFE instructions. For SiM3L1xx devices, WFI and WFE have the
same behavior.
16
Rev. 0.1
AN725
To measure the data sheet numbers using an SiM3L1xx MCU Card and the AN725_PowerMode_8 example:
1. Configure the SiM3L1xx MCU Card according to the instructions in Section “5.2.1. Hardware Setup”.
2. Open the AN725_PowerMode_8 example in either Keil µVision or the Precision32 IDE.
3. Select the desired AHB clock rate using the #defines at the top of the file.
4. Compile and download the code to the device.
5. Disconnect the USB Debug Adapter.
6. Connect PB0.2 to PB1.5 using a short wire and the J21 and J22 headers.
7. Power down the board.
8. Power up the board. This will cause a power-on reset that will clear the settings of some modules (i.e.,
PMU).
9. Press PB1.7 to place the device in PM8. The PB1.5 LED will turn off.
10. Measure the power consumption of the device.
11. Press PB1.5 to wake the device from PM8. When this happens, the PB1.7 LED will turn on and the core
will sit in an infinite while(1) loop.
Rev. 0.1
17
AN725
5.3. Low Power Mode Charge Pump
The SiM3L1xx devices feature a low-power, voltage-halving charge pump used to power most of the functions
operating in the lowest power mode (PM8). This charge pump always powers the low-frequency and 32 kHz crystal
oscillators. When in PM8, this charge pump also powers the following digital components: RTC counters and
alarms, LPTIMER0, UART0, ACCTR0, retention RAM banks, LCD0, and the Power Management Unit (PMU) and
reset controllers. When not in PM8, these modules are powered by the Memory regulator (LDO0). The analog
circuitry of the LCD and Pulse Counter is always powered directly from the VBAT pin.
The low power mode charge pump is a voltage-halving circuit which reduces the sleep-mode supply current using
two methods:
1. It provides approximately VBAT divided-by-2 to the oscillators and digital logic, reducing their inherent
power consumption.
2. It provides a transformer effect which causes the current pulled from the VBAT input to be ideally one-half
of the current actually consumed by the circuitry powered by the charge pump.
This charge pump can be modeled as a VBAT divided-by-2 supply with a series impedance of RCPLOAD.
Equation 1 shows the equation for the output voltage of the charge pump.
VBAT
V CP = ---------------- – I LOAD  R CPLOAD
2
Equation 1. Charge Pump Output Voltage
The value of RCPLOAD depends on the output drive setting field (CPLOAD) in the PMU module and the clock
selected by the RTC0 module, as shown in Table 3.
Table 3. Charge Pump Output Drive Settings
CPLOAD field
0
1
2
3
RCPLOAD Value
LFOSC (16.4 kHz)
RTCOSC (32 kHz)
~600 k
~200 k
~90 k
~40 k
~300 k
~100 k
~45 k
~20 k
Overhead Current
LFOSC (16.4 kHz) RTCOSC (32 kHz)
~0 nA
~25 nA
~50 nA
~75 nA
~0 nA
~50 nA
~100 nA
~150 nA
All circuitry powered by the charge pump operates correctly at VCP voltages greater than or equal to 0.95 V. Thus,
for a given charge pump load current, Equation 2 must be true.
VBAT
---------------- – I LOAD  R CPLOAD  0.95 V
2
Equation 2. Charge Pump Output Voltage Requirement
In all applications with a VBAT voltage of 2.4 V or above, the charge pump can operate at its minimum drive
impedance (CPLOAD = 3). However, as shown in Table 3, the overhead current consumed by the charge pump
increases as its drive impedance decreases. Therefore, at lower values of ILOAD, the total PM8 current
consumption can be reduced by increasing the charge pump’s drive impedance. In addition, since a higher drive
impedance corresponds to a lower output voltage for a given load current, increasing the drive impedance also
reduces the current consumed by the load circuitry.
At higher temperatures, using the low power charge pump and RTC0 can help reduce the leakage current of the
device. Reducing CPLOAD can further reduce the leakage at these temperatures.
18
Rev. 0.1
AN725
5.3.1. Monitor
The SiM3L1xx devices include a low-power voltage monitor that compares the output of the low power mode
charge pump against a factory-trimmed 0.95 V reference voltage. This monitor can serve as an interrupt, a PM8
wakeup source, and a reset source. It is highly recommended that this monitor be enabled and used as a wakeup
or interrupt source. However, if Equation 2 will always be true under all valid operating conditions, the monitor is
not strictly required. Leaving the monitor disabled introduces the risk that the device could lock-up, requiring an
external reset or power cycle to recover. This can occur if the selected RTC0 oscillator is disturbed and stops
oscillating, thereby causing the charge pump output to fail. Since the charge pump powers the RTC0 oscillators,
the RTC fail notification is not sufficient to detect this condition, and it will not correct itself without external
intervention. The charge pump voltage monitor consumes approximately 15 nA, when enabled.
When used as a wakeup and interrupt source, the charge pump monitor can alert the firmware that the charge
pump output is nearing 0.95 V. This may occur as temperature rises, for example, causing additional thermal
leakage from the PM8 circuitry. The firmware can respond by decreasing the charge pump drive impedance by
increasing CPLOAD, assuming the drive is not yet at its minimum. Otherwise, firmware must either reduce the PM8
load (by disabling RAM banks or other PM8 active modules) or place the charge pump in bypass mode. When
changing the charge pump mode, it is recommended that all digital logic using the RTC0 oscillators be temporarily
disabled. Otherwise, a glitch from the oscillators due to the sudden change in the charge pump output may disturb
the logic’s operation.
5.3.2. Measuring PM8 Charge Pump Current
To measure the charge pump load current, use CMP0 to detect the output voltage of the charge pump during PM8.
This output voltage, combined with an ADC measurement of the VBAT value, can help estimate the present charge
pump load in PM8. To do this:
1. Enable the charge pump with CPLOAD set to 3.
2. Configure the charge pump monitor to wake up and interrupt the device.
3. Configure CMP0 to wake and interrupt the device if the charge pump output voltage is equal to 16 x VBAT/
64 (0x10) using the comparator DAC feature.
4. Schedule an RTC0 alarm to wake and interrupt the device in 1 ms.
5. Enter PM8 and wait for a wakeup event.
6. If the wakeup event occurred from the voltage monitor, this indicates the present VBAT voltage is too low to
operate the charge pump. The charge pump should be configured for bypass mode and this measurement
aborted.
7. If the wakeup event was the comparator, change the CMP0 to compare against 8 x VBAT/64 (0x08).
8. If the wakeup event was the RTC0 alarm, change the CMP0 to compare against 24 x VBAT/64 (0x18).
9. Repeat this process starting at step 4, continuing to change the CMP0 DAC using a successiveapproximation method to obtain a 5-bit digital value for the charge pump output voltage, where 0x1F
corresponds to 31 x VBAT/64.
10. Use the SARADC0 module to measure the voltage on the VBAT input.
11. Calculate the estimated charge pump load current using Equation 1, the VBAT and final CMP0 DAC
value, and the appropriate value for RCPLOAD.
If the resulting load current is small enough that the next lowest setting of CPLOAD results in a charge pump output
greater than 0.95 V, this sequence can be repeated with CPLOAD set to 2 to obtain a more accurate measurement
of the load current, and so forth.
Rev. 0.1
19
AN725
5.3.3. Dynamic Charge Pump Drive Impedance
The low power mode charge pump supports four drive impedance settings. For applications requiring aggressive
PM8 current reduction, these settings can be adjusted dynamically to minimize the total low power mode current
consumed. This adjustment could be performed by measuring the charge pump load current as described in
Section 5.3.2 before each entry into PM8 and setting the appropriate drive impedance. However, a faster and
simpler method is available.
The charge pump dynamic scaling method consists of two parts:
1. Determine when the drive impedance should be decreased by using the charge pump voltage monitor.
Each time the monitor trips, firmware should reduce the drive impedance setting. If the setting is already at
its minimum, firmware can place the charge pump in bypass mode or disable active PM8 circuitry.
2. Determine when the drive impedance can be increased. On a regular but relatively infrequent basis,
firmware can determine if the CPLOAD setting can be decreased by one without causing the charge pump
output to fall below 0.95 V as described in this section.
The output state of the charge pump in PM8 is given by Equation 1. The required state of the charge pump if
CPLOAD is reduced by 1 is given by:
VBAT
---------------- – I LOAD  R CPLOAD – 1  0.95 V
2
Equation 3. Charge Pump Output Voltage at an Increased Impedance
In Equation 3, the RCPLOAD-1 term is the drive impedance for CPLOAD-1. Putting these equations together and
solving for ILOAD gives:
R CPLOAD
R CPLOAD
VBAT
V CP  ----------------  1 – -------------------------------- + 0.95 V  --------------------------------
R CPLOAD – 1
R CPLOAD – 1
2
Equation 4. Minimum Charge Pump Output Voltage to Increase Drive Impedance
Equation 4 provides the minimum VCP value for the present CPLOAD setting that allows CPLOAD to be reduced
by 1 without the output dropping below 0.95 V. Using this equation, the CMP0 DAC setting that corresponds to this
equation can be written as:
R CPLOAD
64  0.95 V R CPLOAD
DAC = ceiling  32  1 – -------------------------------- + ------------------------------  -------------------------------- 
 
R CPLOAD – 1
VBAT  R CPLOAD – 1 
Equation 5. CMP0 DAC Setting for Minimum Charge Pump Output Voltage to Increase Drive Impedance
On a regular basis, firmware can perform the following steps:
1. Use the SARADC0 module to measure VBAT.
2. Set the CMP0 DAC to the value determined by Equation 5.
3. Configure CMP0 to wake and interrupt the device if the charge pump output voltage is less than the CMP0
DAC.
4. Schedule an RTC0 alarm to wake and interrupt the device in 1 ms.
5. Enter PM8 and wait for a wakeup event.
6. If the wakeup event was the comparator, CPLOAD should not be reduced by 1. Otherwise, CPLOAD can
be reduced by 1.
Equation 4 includes some safety margins that might not be immediately obvious, since it assumes that the charge
pump load current is independent of the charge pump output voltage. In fact, the PM8 circuitry requires less current
as its supply lowers. Since reducing CPLOAD by 1 will decrease the charge pump output voltage, the resulting
output voltage should always be greater than 0.95 V, assuming Equation 4 is satisfied.
20
Rev. 0.1
AN725
5.4. LCD
For applications that use the LCD0 module, the SiM3L1xx devices have several features that help reduce power
consumption.
5.4.1. Segment Resetting
Each segment of an LCD can be modeled as a capacitor in the order of tens of pF. A typical load current is 1 nA per
segment per pF, so a 160-segment LCD with 50 pF per segment can draw 8 µA of load current. The SiM3L1xx
devices include a segment resetting feature to reduce this load current. Figure 7 illustrates the basic architecture
model of an LCD.
Segment
SEG0
SEG1
SEG2
SEG3
SEG4
SEG5
SEG6
SEG7
COM0
COM1
COM2
COM3
Figure 7. LCD Model
LCD segments are energized (i.e., turn opaque) by ac potential waveforms between the segment and the common
signal for that segment. These waveforms transition between 0 and 3 V, for example, which results in an amplitude
of –3 to 3 V on the segment, depending on the phase of the segment and common waveforms. Figure 9 shows an
example of the common waveforms for 4-mux mode.
To turn on a segment, the controller drives the segment to 3 V or 0 V when the common is driven to 0 V or 3 V,
which leads to ±3 V on the segment. To turn a segment off, the controller drives the segment to 1 V or 2 V when the
common signal is 0 V or 3 V, which leads to ±1 V on the segment.
Most LCD controllers transition directly from the most positive amplitude (3 V) to the most negative amplitude
(–3 V), as shown in Figure 8. This behavior leads to extra charge being pulled from the battery, since the battery
must drive a 6 V transition overall.
Segment
3V
3V
+3 V
3V
3V
3V
+3 V
3V
-3 V
Figure 8. Traditional LCD Segment Transition
Rev. 0.1
21
AN725
0
1
2
Phase
3
4
5
6
7
3V
2V
COM0
2V
1V
2V
1V
1V
0V
3V
COM1
2V
2V
1V
2V
1V
1V
0V
3V
COM2
2V
2V
1V
2V
1V
1V
0V
3V
COM3
2V
2V
1V
2V
1V
1V
0V
Figure 9. LCD Common Waveforms
For a 4 MUX LCD architecture, Figure 9 demonstrates that three of the four commons are at the same potential in
every phase. This potential is 2 V for the even phases and 1 V for the odd phases. Instead of the traditional
segment switching method, the SiM3L1xx devices reset the segments to 2 V for even phases and 1 V for odd
phases before switching to the next segment potential to reduce the overall load current of the LCD.
The waveforms shown in Figure 10 show the SiM3L1xx segment resetting behavior in the common and segment
waveforms. The areas marked in red are the reset events to the 1 V or 2 V potential, depending on the phase.
Overall, this reset waveform scheme reduces the current load of an LCD by ~40%, regardless of the number of
segments in the display. Power-conscious applications using an LCD should enable this feature (RPHEN = 1) and
set the number of RTC0 clocks to reset the segment (RPHMD field) using the LCD0 SEGCONTROL register.
Generally, a RPHMD value of 2 provides significant power savings without introducing visual artifacts. However, it
is recommended to try a range of values to find the best value for a given LCD.
0
1
Phase
3
4
2
5
6
7
3V
COM0
2V
2V
1V
2V
1V
1V
2V
2V
0V
3V
SEG0
2V
1V
1V
1V
0V
Figure 10. SiM3L1xx LCD Waveforms with Segment Resetting
22
Rev. 0.1
AN725
5.4.2. Contrast Modes
The LCD0 module features four contrast modes: bypass, minimum, constant, and auto-bypass. The selection of
the contrast mode is governed by the application requirements and LCD specifications. The power consumption of
these modes will vary due to the internal charge pump and resistor string that generates the VLCD voltage.
Reducing the time this hardware is active will reduce power consumption.
In bypass mode shown in Figure 11, the VLCD voltage tracks with the VBAT input voltage. This mode reduces
power consumption by disabling the LCD charge pump and is most appropriate for systems where the VBAT
voltage is relatively constant.
VBAT
VLCD
Figure 11. LCD0 Bypass Contrast Mode
In minimum contrast mode shown in Figure 12, the VLCD voltage will track the VBAT voltage to a minimum level
set by the VBAT monitor threshold (VBMTH). When VBAT is equal to this voltage, VLCD will switch to the contrast
level set by the CTRST field. The threshold and contrast voltages do not have to be set to the same level, as
shown in Figure 13. If the VBAT voltage goes back above the threshold, the LCD contrast charge pump will turn off.
This mode is most efficient for systems that can use the battery voltage most of the time but require a minimum
contrast level to see the LCD segments.
VBAT
VLCD
minimum level set by
CTRST
Figure 12. LCD0 Minimum Contrast Mode
VBAT
VLCD
CTRST
VBMTH
Figure 13. LCD0 Minimum Contrast Mode with Different Threshold and Voltage Settings
Rev. 0.1
23
AN725
In constant contrast mode, the VLCD voltage is held constant at all times, regardless of the voltage on VBAT. When
VBAT is above the threshold set by the VBMTH field, the LCD charge pump regulates to the contrast level set by
the CTRST field using a variable resistor. When VBAT reaches the threshold, the charge pump enables
automatically to keep VLCD at the desired value. This mode results in the highest power consumption, but may be
required by some system and LCD architectures.
VBAT
VLCD
Figure 14. LCD0 Constant Contrast Mode
In auto-bypass contrast mode shown in Figure 15, the VLCD voltage is held constant and tracks the VBAT voltage
below the threshold. When VBAT is above the threshold voltage set by VBMTH, VLCD regulates to the
programmed contrast voltage (CTRST) using a variable resistor between VBAT and VLCD. When VBAT reaches
the monitor threshold, the controller automatically enters bypass mode and powers VLCD directly from VBAT. The
charge pump is always disabled in this mode, and the threshold and contrast levels do not have to be set to the
same value, as shown in Figure 16.
VBAT
VLCD
Figure 15. LCD0 Auto-Bypass Contrast Mode
VBAT
CTRST
VLCD
VBMTH
Figure 16. LCD0 Auto-Bypass Contrast Mode with Different Threshold and Voltage Settings
For lowest power consumption, applications should use bypass or minimum contrast modes whenever possible.
24
Rev. 0.1
AN725
5.4.3. Refresh Rate
The LCD0 module on SiM3L1xx devices includes a programmable refresh rate by setting the CLKDIV bits in the
CLKCONTROL register. The LCD multiplexor mode must be taken into account when determining the prescaler
value. The LCD power consumption will scale proportionally with the refresh rate. For maximum power savings,
choose the slowest LCD refresh rate and the minimum LCD0 clock frequency that provides acceptable
performance for the application. For the least flicker, choose a fast LCD refresh rate.
5.5. Retention RAM
The retention RAM on SiM3L1xx devices is in eight 4 kB banks. All eight banks are available when not in PM8, but
can be individually powered down when in PM8. The current leakage of the RAM at higher temperatures may
increase, so disabling any unused banks when entering a low power mode may reduce system power
consumption.
For most applications, it is recommended to enable retention for all RAM banks. The specific bank containing the
stack pointer must be enabled to ensure proper code operation on an exit from PM8.
5.5.1. Adjusting the Stack Pointer with Keil µVision
With Keil µVision projects, the stack location can be controlled in the scatterfile. The default
linker_sim3l1xx_arm.sct scatterfile can be found in the C:\SiLabs\32bit\si32-x.y.z\si32Hal\sim3l1xx directory,
where x is the major si32HAL version, y is the minor version, and z is the trivial version.
Inside the scatterfile:
ARM_LIB_STACK (SI32_MCU_RAM_BASE + SI32_MCU_RAM_SIZE)
The value in the parentheses after the ARM_LIB_STACK label is the location of the stack pointer in memory.
Change this value as needed for the application and ensure this RAM bank has retention enabled.
5.5.2. Adjusting the Stack Pointer with the Precision32 IDE
In the Precision32 IDE, projects can use a custom linker script file edited manually or the IDE dialogs to modify the
stack pointer address. To add a custom linker script file manually:
Right-click on the project name in the Project Explorer view and select NewFolder. This folder must use the
linkscripts name.
Copy the link_template.ld file from the Precision32 installation directory ..\IDE\precision32\Wizards\linker to the
project’s linkscripts folder.
Open the project’s link_template.ld file and edit the stack line near the bottom of the file:
PROVIDE(_vStackTop = __top_${DATA} - ${STACK_OFFSET});
Rev. 0.1
25
AN725
For example, to locate the stack at address 0x2000_6000:
PROVIDE(_vStackTop = 0x20006000);
Instead of editing the link scripts file, the stack offset change can be made inside the IDE:
1. Right-click on the project_name in the Project Explorer view.
2. Select Properties.
3. Click on C/C++ BuildSettingsTool Settings tabMCU LinkerTarget and input the desired stack
offset into the Stack offset field. This offset will occur from the top address of RAM, and the value must be
a multiple of 4. Figure 17 shows this dialog in the Precision32 IDE.
Figure 17. Using the Precision32 IDE to Select the Project Library
After changing either the custom linker script or IDE settings, clean and rebuild the project. View the map file for the
project to verify the stack location changed as desired.
26
Rev. 0.1
AN725
6. General Power-Saving Tips
6.1. Pins
Placing any unused pins in analog mode using the PBSTD module (PBMDSEL.x = 0) disables the drivers and
weak pull-ups on the pin. The pin will float and consume little power.
For pins that are connected to external hardware, place the pins in analog mode if possible. If this is not possible,
place the pins in a natural state that will consume no power. For example, if a pin has an external pull-down
resistor, putting a ‘0’ in the latch will draw no current from the external pull-down.
If the system configuration allows it, disabling weak pull-ups on a port-by-port basis may also help reduce
unnecessary power consumption in the pins.
6.2. Peripherals
Before entering the low power mode, disable any unwanted peripherals. Stopping the clock to the peripheral may
disable the peripheral, but if the peripherals operate on a clock independent from the AHB or APB clocks, only the
peripheral registers will be disabled. Disabling the module explicitly (DCDCEN = 0 for the DCDC0 module, for
example) will ensure the module does not draw extra power in the low power mode.
6.3. Biases
In addition to peripherals, disable any unneeded bias sources in the device before entering the low power mode.
These biases draw current to provide voltage references inside the chip. One example of a bias is the 1.2/2.4 V
VREF0 module or the ADC internal 1.65 V voltage reference.
6.4. Clocks
External oscillators require a bias to start and maintain oscillation. If possible, switching to the internal oscillators
and stopping the external oscillator will reduce the power consumption. The internal precision oscillator also
requires extra current to operate. In most cases, switching the AHB and APB clock to the Low Power Oscillator
(LPOSC0) or RTC0 oscillator before entering the low power mode will result in the lowest power consumption.
The SiM3L1xx devices feature programmable clocks for each peripheral. When entering a low power mode,
disabling the clocks to any unused peripherals will reduce the system power consumption.
Rev. 0.1
27
AN725
CONTACT INFORMATION
Silicon Laboratories Inc.
400 West Cesar Chavez
Austin, TX 78701
Tel: 1+(512) 416-8500
Fax: 1+(512) 416-9669
Toll Free: 1+(877) 444-3032
Please visit the Silicon Labs Technical Support web page:
https://www.silabs.com/support/pages/contacttechnicalsupport.aspx
and register to submit a technical support request.
Patent Notice
Silicon Labs invests in research and development to help our customers differentiate in the market with innovative low-power, small size, analogintensive mixed-signal solutions. Silicon Labs' extensive patent portfolio is a testament to our unique approach and world-class engineering team.
The information in this document is believed to be accurate in all respects at the time of publication but is subject to change without notice.
Silicon Laboratories assumes no responsibility for errors and omissions, and disclaims responsibility for any consequences resulting from
the use of information included herein. Additionally, Silicon Laboratories assumes no responsibility for the functioning of undescribed features
or parameters. Silicon Laboratories reserves the right to make changes without further notice. Silicon Laboratories makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Silicon Laboratories assume any liability
arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. Silicon Laboratories products are not designed, intended, or authorized for use in applications intended to
support or sustain life, or for any other application in which the failure of the Silicon Laboratories product could create a situation where personal injury or death may occur. Should Buyer purchase or use Silicon Laboratories products for any such unintended or unauthorized application, Buyer shall indemnify and hold Silicon Laboratories harmless against all claims and damages.
Silicon Laboratories and Silicon Labs are trademarks of Silicon Laboratories Inc.
Other products or brandnames mentioned herein are trademarks or registered trademarks of their respective holders.
28
Rev. 0.1