6. Power

6.1. Power supplies

RP2350 requires five separate power supplies. However, in most applications, several of these can be combined and connected to a single power source. Typical applications only require a single 3.3 V supply. See Figure 19 .

The power supplies and a number of potential power supply schemes are described in the following sections. Detailed power supply parameters are provided in Section 14.9.5 .

6.1.1. Digital IO supply (IOVDD)

IOVDD provides the IO supply for the chip's GPIO, and should be powered at a nominal voltage between 1.8 V and 3.3 V. The supply voltage sets the external signal level for the digital IO, and should be chosen based on the level required, see Section 14.9 for details. All GPIOs share the same power supply and operate at the same signal level.

If the digital IO is powered at a nominal 1.8 V, the IO input thresholds should be adjusted by setting the VOLTAGE_SELECT register to 1. VOLTAGE_SELECT is set to 0 by default, which results in input thresholds that are valid for a nominal IO voltage between 2.5 V and 3.3 V. See Chapter 9 for details.

⚠ CAUTION

Powering the IOVDD at 1.8 V with input thresholds set for a 2.5 V to 3.3 V supply is a safe operating mode, but will result in input thresholds that do not meet specification. Powering the IO at voltages greater than 1.8 V with input thresholds set for a 1.8 V supply may result in damage to the chip.

6.1.2. QSPI IO supply (QSPI_IOVDD)

QSPI_IOVDD provides the IO supply for the chip's QSPI interface, and should be powered at a nominal voltage between 1.8 V and 3.3 V. The supply voltage sets the external signal level for the QSPI interface, and should be chosen based on the level required, see Section 14.9 for details. In most applications the QSPI interface will be connected to an external flash device, which will determine the required signal level.

If the QSPI interface is powered at a nominal 1.8 V, the IO input thresholds should be adjusted by setting the VOLTAGE_SELECT register to 1. VOLTAGE_SELECT is set to 0 by default, which results in input thresholds that are valid for a nominal IO voltage between 2.5 V and 3.3 V. See Chapter 9 for details.

⚠ CAUTION

Powering the IOVDD at 1.8 V with input thresholds set for a 2.5 V to 3.3 V supply is a safe operating mode, but will result in input thresholds that do not meet specification. Powering the IO at voltages greater than 1.8 V with input thresholds set for a 1.8 V supply may result in damage to the chip.

6.1.3. Digital core supply (DVDD)

The chip's core digital logic is powered by DVDD, which should be at a nominal 1.1 V. A dedicated on-chip core voltage regulator allows DVDD to be generated from a 2.7 V to 5.5 V input supply. See Section 6.3 for details. Alternatively, DVDD can be supplied directly from an off-chip power source.

If the on-chip core voltage regulator is used, the two DVDD pins closest to the regulator should be decoupled with a 100nF capacitor close to the pins. The DVDD pin furthest from the regulator should be decoupled with a 4.7μF capacitor close to

the pin.

6.1.4. USB PHY and OTP supply (USB_OTP_VDD)

USB_OTP_VDD supplies the chip's USB PHY and OTP memory, and should be powered at a nominal 3.3 V. To reduce the number of external power supplies, USB_OTP_VDD can use the same power source as the core voltage regulator analogue supply (VREG_AVDD), or digital IO supply (IOVDD), assuming IOVDD is also powered at 3.3 V. This supply must always be provided, even in applications where the USB PHY is never used.

USB_OTP_VDD should be decoupled with a 100nF capacitor close to the chip's USB_OTP_VDD pin.

6.1.5. ADC supply (ADC_AVDD)

ADC_AVDD supplies the chip's Analogue to Digital Converter (ADC). It can be powered at a nominal voltage between 1.8 V and 3.3 V, but the performance of the ADC will be compromised at voltages below 2.97 V. To reduce the number of external power supplies, ADC_AVDD can use the same power source as the core voltage regulator analogue supply (VREG_AVDD) or digital IO supply (IOVDD).

NOTE

It is safe to supply ADC_AVDD at a higher or lower voltage than IOVDD, e.g. to power the ADC at 3.3 V, for optimum performance, while supporting 1.8 V signal levels on the digital IO. But the voltage on the ADC analogue inputs must not exceed IOVDD, e.g. if IOVDD is powered at 1.8 V, the voltage on the ADC inputs should be limited to 1.8 V. Voltages greater than IOVDD will result in leakage currents through the ESD protection diodes. See Section 14.9 for details.

ADC_AVDD should be decoupled with a 100nF capacitor close to the chip's ADC_AVDD pin.

6.1.6. Core voltage regulator input supply (VREG_VIN)

VREG_VIN is the input supply for the on-chip core voltage regulator, and should be in the range 2.7 V to 5.5 V. To reduce the number of external power supplies, VREG_VIN can use the same power source as the voltage regulator analogue supply (VREG_AVDD), or digital IO supply (IOVDD). Though care should be taken to minimise the noise on VREG_AVDD.

A 4.7µF capacitor should be connected between VREG_VIN and ground close to the chip's VREG_VIN pin.

For more details on the on-chip voltage regulator see Section 6.3 .

6.1.7. On-chip voltage regulator analogue supply (VREG_AVDD)

VREG_AVDD supplies the on chip voltage regulator's analogue control circuits, and should be powered at a nominal 3.3 V. To reduce the number of external power supplies, VREG_AVDD can use the same power source as the voltage regulator input supply (VREG_VIN), or the digital IO supply (IOVDD). Though care should be taken to minimise the noise on VREG_AVDD. A passive low pass filter may be required, see Section 6.3.7 for details.

NOTE

VREG_AVDD also powers the chip's power-on reset and brownout detection blocks, so it must be powered even if the on-chip voltage regulator is not used.

6.1.8. Power supply sequencing

With the exception of the two voltage regulator supplies ( VREG_VIN and VREG_AVDD ), which should be powered up together, RP2350's power supplies may be powered up or down in any order. However, small transient currents may flow in the ADC supply ( ADC_AVDD ) if it is powered up before, or powered down after, the digital core supply (DVDD). This will not damage the chip, but can be avoided by powering up DVDD before or at the same time as ADC_AVDD , and powering down DVDD after or at the same time as ADC_AVDD . In the most common power supply scheme, where the chip is powered from a single 3.3 V supply, DVDD will be powered up shortly after ADC_AVDD due to the startup time of the on-chip voltage regulator. This is acceptable behaviour.

6.2. Power management

RP2350 retains the power control features of RP2040, but extends them by splitting the chip's digital core into a number of power domains, which can be selectively powered off. This allows significant power saving in applications where the chip is not continuously active. This section describes the core power domains and how they are controlled. The legacy RP2040 power control features still offer useful power savings, and are described in Section 6.5 .

Power domains, and transitions between power states, are controlled by a Power manager. The Power manager runs from either an internal low power oscillator lposc , or the reference clock clk_ref . The device may be configured to power down under software control and can wakeup on a GPIO or timer event. Configuration of the power manager is via the POWMAN registers in Section 6.4 .

6.2.1. Core power domains

RP2350's core logic is divided into five power domains. With some restrictions, these domains can be selectively powered off to reduce the chip's power consumption. The five domains are:

Logic in the AON domain controls the power state of the other power domains, which can be powered on or off independently. The only exception is the XIP domain, which must always be powered when the SWCORE domain is powered. SRAMs that are powered on retain their contents when the switched core is powered off.

Figure 18 gives an overview of the core power domains.

Figure 18. core power domains

Figure 18: Core power domains diagram. A DVDD supply line branches into several domains: AON (Always on Power Domain), SWCORE (Switched Core Power Domain), XIP Power Domain (containing 1kB Boot SRAM and 16kB XIP Cache SRAM), SRAM Power Domain 0 (containing 64kB SRAM Banks 0-3), SRAM Power Domain 1 (containing 64kB SRAM Banks 4-7 and 4kB SRAM Banks 8-9), and a 4kB domain.

The diagram illustrates the core power domains of the RP2350. A DVDD supply line is shown on the left, branching into several domains:

Figure 18: Core power domains diagram. A DVDD supply line branches into several domains: AON (Always on Power Domain), SWCORE (Switched Core Power Domain), XIP Power Domain (containing 1kB Boot SRAM and 16kB XIP Cache SRAM), SRAM Power Domain 0 (containing 64kB SRAM Banks 0-3), SRAM Power Domain 1 (containing 64kB SRAM Banks 4-7 and 4kB SRAM Banks 8-9), and a 4kB domain.

6.2.2. Power states

RP2350 can operate in a number of power states, depending on which domains are powered on or off. Power states have names in the form Pc.m where:

P0.m states, where the switched core is powered on, are Normal Operating states. P1.m states, where the switched core is powered off, are Low Power states

Table 475 shows the available power states.

Table 475. supported power states

Power StateDescriptionAONSWCOREXIPSRAM0SRAM1
P0.0Normal Operationononononon
P0.1Normal Operation (SRAM1 off)ononononoff
P0.2Normal Operation (SRAM0 off)onononoffon
P0.3Normal Operation (SRAM0 & SRAM1 off)onononoffoff
P1.0Low Poweronoffononon
P1.1Low Power (SRAM1 off)onoffononoff
P1.2Low Power (SRAM0 off)onoffonoffon
Power StateDescriptionAONSWCOREXIPSRAM0SRAM1
P1.3Low Power (SRAM0 & SRAM1 off)onoffonoffoff
P1.4Low Power (XIP off)onoffoffonon
P1.5Low Power (XIP & SRAM1 off)onoffoffonoff
P1.6Low Power (XIP & SRAM0 off)onoffoffoffon
P1.7Low Power (XIP & SRAM0 & SRAM1 off)onoffoffoffoff
OFFNot Poweredoffoffoffoffoff

In the OFF state, the chip has no external power and all domains are unpowered. The chip moves from OFF to P0.0 automatically as soon as external power is applied.

To determine the current power state, read the STATE.CURRENT field. CURRENT is a 4 bit field representing the power state of the switched core and memory power domains.

6.2.3. Power state transitions

Transitions between power states can be initiated by software, hardware, or via the chip's debug subsystem. After initiation, transitions are managed by autonomous power sequencers in the chip's AON power domain. The power sequencers can be configured, in a limited way, via the SEQ_CFG register. The sequencers can also be observed and controlled, again in a limited way, via the RP-AP registers in the chip's debug subsystem. These registers are described in Section 3.5.10 .

Valid power state transitions are as follows:

Transitions from one P1.m state (switched core powered off) to another P1.m state (switched core powered off) are not supported, and will be prevented by the hardware.

Valid transitions are shown in the table below.

Table 476. valid power state transitions

FromTo
P0.0P0.1P0.2P0.3P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7
P0.1P0.0P0.3P1.1P1.3P1.5P1.7
P0.2P0.0P0.3P1.2P1.3P1.6P1.7
P0.3P0.0P0.1P0.2P1.3P1.7
P1.0P0.0
P1.1P0.0P0.1
P1.2P0.0P0.2
P1.3P0.0P0.1P0.2P0.3
P1.4P0.0
P1.5P0.0P0.1
FromTo
P1.6P0.0P0.2
P1.7P0.0P0.1P0.2P0.3

6.2.3.1. Transitions from Normal Operating (P0.m) states

Transitions from a Normal Operating (P0.m) state to either a Low Power (P1.m) state, or another Normal Operating (P0.m) state, are initiated by writing to the STATE.REQ field. REQ is a 4-bit field representing the requested power state of the switched core and memory power domains. The STATE.WAITING field will be set immediately, followed by the STATE.CHANGING field, after the actual state change starts. If a transition to a Low Power (P1.m) state is requested, WAITING will remain set until the processors have gone into a low power state (via __wfi() ). In the WAITING state, writing to the STATE.REQ field can change or cancel the initial request. The requested state can't be changed when in the CHANGING state.

A request to move to an unsupported state, or a state that would result in an invalid transition, causes the STATE.BAD_SW_REQ field to be set.

If a hardware power up request is received while in the WAITING state, the transition requested via STATE.REQ will be halted and the power up request completed. The STATE.PWRUP_WHILE_WAITING and STATE.REQ_IGNORED fields will be set.

On writing to STATE.REQ :

Invalid state transitions are:

If XIP, boot RAM, sram0, or sram1 remain powered while SWCORE is powered off, the sram will automatically switch to a low power state. Stored data will be retained.

Before transitioning to a switched-core power down state (P1.m), software needs to configure:

6.2.3.2. Transitions from Low Power (P1.m) states

Transitions from P1.m to P0.m states are initiated by GPIO events or the timer alarm.

There are up to 5 wakeup sources:

GPIO wakeups are configured by the PWRUP0-PWRUP3 registers. The wakeups are not enabled until the power sequencer completes the power down operation.

The alarm wakeup is configured by writing to the ALARM_TIME_15T00-ALARM_TIME_63T048 registers. The alarm wakeup has a resolution of 1ms. Once set, the alarm wakeup is armed by writing a 1 to both TIMER.PWRUP_ON_ALARM and TIMER.ALARM_ENAB . If the alarm fires during the power down sequence, a power up sequence will start when the power down sequence completes.

The LAST_SWCORE_PWRUP register indicates which event caused the most recent power up.

6.2.3.3. Debugger-initiated power state transitions

The debugger can be used to trigger a power up sequence via the CSYSPWRUPREQ output from the SW-DP CTRL/STAT register. This powers all domains (i.e. returns to state P0.0 ) and also inhibits any further software initiated power state transitions.

When CSYSPWRUPREQ is asserted, the power sequencer will:

If CSYSPWRUPREQ is de-asserted then software initiated power transitions will be able to resume. The user can detect when a software requested transition is ignored because of CSYSPWRUPREQ using the following hints:

i NOTE

DBG_PWRCFG.IGNORE is useful to test going to sleep with a debugger attached or ignoring CSYSPWRUPREQ . A debugger will likely leave CSYSPWRUPREQ set when disconnecting. It would be impossible to go to sleep after this without DBG_PWRCFG.IGNORE .

6.2.3.4. Power-mode-aware GPIO control

The power manager sequencer is able to switch the state of two GPIO outputs on entry to and exit from a P1.m state, i.e. one where the switched core is powered down. This allows external devices to be power-aware. The GPIOs switch to indicate the low power state after the core is powered down and switch to indicate the high power state before the core is powered up. This ensures the high power state of the external components always overlaps the high power state of the core. The GPIOs are configured by the EXT_CTRL0 and EXT_CTRL1 registers.

6.2.3.5. Isolation

When powering down SWCORE, the pad control and data signals are latched and isolated from the IO logic. This avoids transitions on pads which could potentially corrupt external components. On SWCORE power up, the isolation is not released automatically. The user releases the isolation by clearing the ISO field of the pad control register (for example GPIO0.ISO ) after the IO logic has been configured.

6.3. Core voltage regulator

RP2350 provides an on-chip voltage regulator for its digital core supply ( DVDD ). The regulator requires a 2.7 V to 5.5 V input supply ( VREG_VIN ), allowing DVDD to be generated directly from a single lithium ion cell, or a USB power supply. A separate, nominally 3.3 V, low noise supply ( VREG_AVDD ) is required for the regulator's analogue control circuits. The regulator supports both switching and linear modes of regulation, allowing efficient operation at both high and low loads.

To allow the chip to start up, the regulator is enabled by default, and will power up as soon as its supplies are available. The regulator starts in switching mode, with a nominal 1.1 V output, but its operating mode and output voltage can be changed once the chip is out of reset. The output voltage can be set in the range 0.55 V to 3.30 V, and the regulator can supply up to 200mA.

Although intended for the chip's digital core supply ( DVDD ), the regulator can be used for other purposes if DVDD is powered directly from an external power supply.

6.3.1. Operating modes

The regulator has the following three modes of operation.

6.3.1.1. Normal mode

In normal mode, the regulator operates in a switching mode, and can supply up to 200mA. Normal mode is used for P0.x power states, when the chip's switched core is powered on. The regulator must be in normal mode before the core supply current is allowed to exceed 1mA. The regulator starts up in normal mode when its input supplies are first applied.

6.3.1.2. Low-power mode

In low-power mode, the regulator operates in a linear mode, and can only supply up to 1mA. Low-power mode can be used for P1.x power states, where the chip's switched core is powered off. The core supply current must be less than 1mA before the regulator is moved to low-power mode. The regulator's output voltage is limited to 1.3 V in low-power mode.

Caution icon CAUTION

In low-power mode, the output of the regulator is directly connected to DVDD . It isn't possible to disconnect the regulator from DVDD in this mode. Don't put the regulator into low-power mode if DVDD is being powered from an external supply.

6.3.1.3. High-impedance mode

In high-impedance mode, the regulator is disabled, its power consumption is minimised, and its outputs are set to a high-impedance state. This mode should only be used if the digital core supply ( DVDD ) is provided by an external

regulator. If the on-chip regulator is supplying DVDD, entering high-impedance mode causes a reset event, returning the on-chip regulator to Normal mode.

6.3.2. Software control

⚠ WARNING

The regulator can't be relocked after it's been unlocked. Avoid accidental writes to the VREG register.

The regulator can be directly controlled by software, but must first be unlocked by writing a 1 to the UNLOCK field in the VREG_CTRL register. Once unlocked, the regulator can be controlled via the VREG register.

The regulator's operating mode defaults to Normal, at initial power up or after a reset event, but can be switched to high impedance by writing a 1 to the VREG register's HIZ field. The regulator's output voltage can be set by writing to the register's VSEL field, see the VREG register description for details on available settings. To prevent accidental over-voltage, the output voltage is limited to 1.3 V unless the DISABLE_VOLTAGE_LIMIT field in the VREG_CTRL is set. The output voltage defaults to 1.1 V at initial power-on or after a reset event.

The UPDATE_IN_PROGRESS field in the VREG register is set while the regulator's operating mode or output voltage are being updated. When UPDATE_IN_PROGRESS is set, writes to the register are ignored.

It isn't possible to place the regulator in low-power mode under software control because the load current will exceed 1mA when software is running.

⚠ CAUTION

The regulator's output voltage can be varied between 0.55 V and 3.3 V, but RP2350 might not operate reliably with its digital core supply ( DVDD ) at a voltage other than 1.1 V.

6.3.3. Power Manager control

The regulator's operating mode and output voltage can also be controlled by the Power Manager. Power Manager control is typically used when the chip enters or exits a low-power ( P1.x ) state, when software might not be running.

In addition to normal and high-impedance modes, Power Manager control allows the regulator to be placed in low-power mode. By default, the regulator switches to low-power mode when entering a low-power ( P1.x ) state, and returns to Normal mode when returning to a normal ( P0.x ) state.

The operating mode and output voltage in the low-power state are set by the values in the VREG_LP_ENTRY register. And the operating mode and output voltage to be used when the chip has returned to a normal state are set by values in the VREG_LP_EXIT register. The registers contain an additional MODE field that allows low-power mode to be selected.

The values in the registers must be written by software before requesting a transition to a low-power state because software won't be running during or after the transition. The actual transitions to and from the low-power state are handled by the Power Manager. Once the chip has returned to a normal state, software can be run and the regulator controlled directly. The values in the VREG register reflect the regulator's current operating mode and output voltage once the chip has returned to a normal state.

⚠ CAUTION

Low-power mode should only be used when the regulator is providing the chip's digital core supply ( DVDD ) because the regulator's low-power output is connected to DVDD on chip.

6.3.4. Status

To determine the status of the regulator, read the VREG_STS register, which contains two fields:

Adjusting the output voltage to a higher voltage will cause VOUT_OK to go low until the assertion threshold for the higher voltage is reached. VOUT_OK will also go low if the regulator is placed in high-impedance mode.

6.3.5. Current limit

The voltage regulator includes a current limit to prevent the load current exceeding the maximum rated value. The output voltage won't be regulated and will drop below the selected value when the current limit is active. See Section 14.9.6 for details.

6.3.6. Over temperature protection

The voltage regulator will terminate regulation and disable its power transistors, if the transistor junction temperature rises above a threshold set by the HT_TH field in the VREG_CTRL register. The regulator will restart regulation when the transistor junction temperature drops to approximately 20°C below the temperature threshold.

6.3.7. Application circuit

The regulator requires two external power supplies, the input supply ( VREG_VIN ), and a separate low noise supply for its analogue control circuits ( VREG_AVDD ). VREG_VIN must be in the range 2.7 V to 5.5 V, and VREG_AVDD must be in the range 3.135 V to 3.63 V.

If VREG_VIN is limited to the range 3.135 V to 3.63 V, a single combined supply can be used for both VREG_VIN and VREG_AVDD . This approach is shown in Figure 19 . Take care to minimise noise on VREG_AVDD .

Figure 19. Core voltage regulator with combined supplies

Circuit diagram of the core voltage regulator with combined supplies.

The diagram shows the internal structure of the core voltage regulator. It features a central block with pins labeled VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. The VREG_VIN pin is connected to a 3.135V to 3.63V supply. The VREG_LX pin is connected to an inductor (3.3µH). The VREG_PGND pin is connected to ground. The VREG_AVDD pin is connected to a 33Ω resistor, which is then connected to ground. The VREG_FB pin is connected to a 100nF capacitor to ground. The output of the regulator is connected to a 4.7µF capacitor to ground. The output is also connected to a 3.135V to 3.63V supply. The output is also connected to a 4.7µF capacitor to ground. The output is also connected to a 3.135V to 3.63V supply. The output is also connected to a 4.7µF capacitor to ground.

Circuit diagram of the core voltage regulator with combined supplies.

Alternatively, to support input voltages above 3.63 V, VREG_VIN and VREG_AVDD can be powered separately. This is shown in Figure 20 .

Figure 20. Core voltage regulator with separate supplies

Circuit diagram of the core voltage regulator with separate supplies.

The diagram shows the internal structure of the core voltage regulator. It features a central block with pins labeled VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. The VREG_VIN pin is connected to a 2.7V to 5.5V supply. The VREG_LX pin is connected to an inductor (3.3µH). The VREG_PGND pin is connected to ground. The VREG_AVDD pin is connected to a 3.135V to 3.63V supply. The VREG_FB pin is connected to a 100nF capacitor to ground. The output of the regulator is connected to a 4.7µF capacitor to ground. The output is also connected to a 3.135V to 3.63V supply. The output is also connected to a 4.7µF capacitor to ground.

Circuit diagram of the core voltage regulator with separate supplies.

If the digital core supply (DVDD) is powered from an external 1.1V supply, the on-chip regulator can be disabled and the application circuit simplified. Power must still be provided on the regulator's analogue supply ( VREG_AVDD ) and input supply ( VREG_VIN ) to power the chip's power-on reset and brown-out detection blocks. But the inductor can be omitted and only a single input capacitor is required. Connect VREG_FB directly to ground. This is shown in Figure 21 .

Figure 21. External core supply with on-chip regulator disabled.

Circuit diagram of the RP2350 core supply with the on-chip regulator disabled. The diagram shows a central chip with pins VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. A 3.135V to 3.63V supply is connected to VREG_VIN and VREG_AVDD, with a 4.7µF capacitor to GND. A 1.1V supply is connected to DVDD and VREG_PGND, with 100nF capacitors to GND. The chip also has DVDD and GND pins with 100nF capacitors to GND.

The diagram illustrates the external core supply configuration for the RP2350 when the on-chip regulator is disabled. A central chip is shown with several pins. A supply line labeled '3.135V to 3.63V supply' is connected to the VREG_VIN and VREG_AVDD pins. A 4.7µF capacitor is connected between this supply line and GND. Another supply line labeled '1.1V supply' is connected to the DVDD and VREG_PGND pins. There are three 100nF capacitors connected to GND: one between DVDD and GND on the left, one between DVDD and GND on the right, and one between DVDD and GND at the bottom. The chip pins are labeled VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. A GND symbol is also shown near the top of the chip.

Circuit diagram of the RP2350 core supply with the on-chip regulator disabled. The diagram shows a central chip with pins VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. A 3.135V to 3.63V supply is connected to VREG_VIN and VREG_AVDD, with a 4.7µF capacitor to GND. A 1.1V supply is connected to DVDD and VREG_PGND, with 100nF capacitors to GND. The chip also has DVDD and GND pins with 100nF capacitors to GND.

The on-chip regulator will still power on as soon as VREG_VIN and VREG_AVDD are available, but can be shut down under software control after the chip is out of reset. This is a safe mode of operation, though the regulator will consume approximately 400 µA until it's shut down. The regulator should be shut down by writing a 1 to the VREG register's HIZ field.

6.3.8. External components and PCB layout requirements

The most critical part of an RP2350 PCB layout is the core voltage regulator. This should be placed first on any board design and these guidelines must be strictly followed.

Figure 22. Regulator section of the Raspberry Pi Pico 2 schematic. The nets highlighted in bold show the high switching current paths

Schematic diagram of the RP2350 regulator section showing input, output, and feedback paths with components like capacitors, inductor, and resistors.

The diagram illustrates the regulator section of the RP2350, showing the internal circuitry and its connection to the Raspberry Pi Pico 2. The circuit is powered by a 3.3V input (V IN ) and provides a regulated output (V OUT ). The feedback path is connected to the VREG_FB pin. The input and output capacitors (C IN and C OUT ) are both 4.7μF. The output inductor (L x ) is 3.3μH. The feedback network consists of a resistor (R FILT ) and a capacitor (C FILT ), both 33Ω and 4.7μF respectively. The circuit is connected to the RP2350 pins VREG_FB, VREG_VIN, VREG_LX, VREG_PGND, and VREG_AVDD. The nets highlighted in bold show the high switching current paths.

Schematic diagram of the RP2350 regulator section showing input, output, and feedback paths with components like capacitors, inductor, and resistors.

Figure 23. Regulator section of the Raspberry Pi Pico 2 PCB layout showing the high current paths for each of the regulator's switching phases. The AOTA-B201610S3R3-101-T inductor's case size is 0806 (2016 metric), the resistor and capacitors are 0402 (1005 metric)

Figure 24. Cut-out beneath \( L_X/VREG\_LX \) net on layer 2 of 4 (or more) layer PCBs

Figure 24: A PCB layout diagram for Layer 2 showing a cut-out in the copper beneath the LX/VREG_LX net. The diagram includes various components like capacitors, inductors, and resistors, with a blue outline indicating the required cut-out area.

The diagram shows a top-down view of a PCB layout for Layer 2. A blue rectangular outline highlights a specific area where the copper must be cut out. This area is located beneath the LX/VREG_LX net. The layout includes various components represented by gray shapes: capacitors (circles), inductors (rectangles), and resistors (smaller rectangles). The cut-out is a rectangular area with rounded corners, following the general shape of the LX/VREG_LX net. The text 'Layer 2' is written in blue in the top left corner of the diagram area.

Figure 24: A PCB layout diagram for Layer 2 showing a cut-out in the copper beneath the LX/VREG_LX net. The diagram includes various components like capacitors, inductors, and resistors, with a blue outline indicating the required cut-out area.

6.3.8.2. Component values

6.3.8.3. Regulator sensitivities

The RP2350 regulator has a few sensitivities:

To meet the above requirements, Raspberry Pi have worked with Abracon to create a custom 2.0×1.6mm 3.3μH polarity-marked inductor, part number AOTA-B201610S3R3-101-T (see Figure 25 and Figure 25 ). These will be available in general distribution in time, but for now please contact Raspberry Pi to request samples / production volumes.

Raspberry Pi is still working with the regulator IP vendor to fully verify and qualify the regulator and custom inductor.

Figure 25. AOTA-B201610S3R3-101-T inductor with orientation marking, showing current and magnetic field directions

Diagram of the AOTA-B201610S3R3-101-T inductor showing current and magnetic field directions.

The diagram illustrates the internal structure of the inductor, which consists of multiple concentric elliptical turns. A blue arrow at the top indicates the current \( I \) (amps) flowing from the positive terminal (+) on the left to the negative terminal (-) on the right. Red arrows along the turns show the direction of current flow. A green circular arrow at the bottom indicates the 'Magnetic Field Direction'. A white circle on the right side is labeled 'orientation indicator'.

Diagram of the AOTA-B201610S3R3-101-T inductor showing current and magnetic field directions.

Figure 26. Dimensions of the AOTA-B201610S3R3-101-T inductor

Figure 26: Dimensions of the AOTA-B201610S3R3-101-T inductor. The figure shows three views: Top view, Bottom view, and Side view. The Top view is a rectangle with dimensions 2.00 ±0.20 mm (width) and 1.60 ±0.20 mm (height). A small circle is located in the bottom right corner. The Bottom view is a rectangle with a width of 0.60 ±0.20 mm. The Side view is a rectangle with a height of 1.00 MAX. All dimensions are in millimetres. Drawings not to scale.

Top view

Bottom view

Side view

All dimensions are in millimetres
Drawings not to scale

Figure 26: Dimensions of the AOTA-B201610S3R3-101-T inductor. The figure shows three views: Top view, Bottom view, and Side view. The Top view is a rectangle with dimensions 2.00 ±0.20 mm (width) and 1.60 ±0.20 mm (height). A small circle is located in the bottom right corner. The Bottom view is a rectangle with a width of 0.60 ±0.20 mm. The Side view is a rectangle with a height of 1.00 MAX. All dimensions are in millimetres. Drawings not to scale.

6.3.9. List of registers

The voltage regulator shares a register address space with other power management subsystems in the always-on domain. This address space is referred to as POWMAN elsewhere in this document, and a complete list of POWMAN registers is provided in Section 6.4 . For reference information on POWMAN registers associated with the voltage regulator is repeated here.

The POWMAN registers start at a base address of 0x40100000 (defined as POWMAN_BASE in the SDK).

6.4. Power management (POWMAN) registers

Password-protected POWMAN registers require a password ( 0x5AFE ) to be written to the top 16 bits to enable the write operation. This protects against accidental writes that could crash the chip untraceably. Writes to protected registers that don't include the password are ignored, setting a flag in the BADPASSWD register. Reads from protected registers don't return the password, to protect against erroneous read-modify-write operations.

Protected registers obviously don't have writeable fields in the top 16 bits, however they may have read-only fields in that range.

All registers with address offsets up to and including 0x000000ac are password protected. Therefore, the following writeable registers are unprotected and have 32-bit write access:

Table 477. List of POWMAN registers

OffsetNameInfo
0x00BADPASSWDIndicates a bad password has been used
0x04VREG_CTRLVoltage Regulator Control
0x08VREG_STSVoltage Regulator Status
0x0cVREGVoltage Regulator Settings
0x10VREG_LP_ENTRYVoltage Regulator Low Power Entry Settings
0x14VREG_LP_EXITVoltage Regulator Low Power Exit Settings
0x18BOD_CTRLBrown-out Detection Control
0x1cBODBrown-out Detection Settings
0x20BOD_LP_ENTRYBrown-out Detection Low Power Entry Settings
0x24BOD_LP_EXITBrown-out Detection Low Power Exit Settings
0x28LPOSCLow power oscillator control register.
0x2cCHIP_RESETChip reset control and status
0x30WDSELAllows a watchdog reset to reset the internal state of powman in addition to the power-on state machine (PSM).
Note that powman ignores watchdog resets that do not select at least the CLOCKS stage or earlier stages in the PSM. If using these bits, it's recommended to set PSM_WDSEL to all-ones in addition to the desired bits in this register. Failing to select CLOCKS or earlier will result in the POWMAN_WDSEL register having no effect.
0x34SEQ_CFGFor configuration of the power sequencer
Writes are ignored while POWMAN_STATE_CHANGING=1
OffsetNameInfo
0x38STATE

This register controls the power state of the 4 power domains. The current power state is indicated in POWMAN_STATE_CURRENT which is read-only. To change the state, write to POWMAN_STATE_REQ. The coding of POWMAN_STATE_CURRENT & POWMAN_STATE_REQ corresponds to the power states defined in the datasheet:

  • bit 3 = SWCORE
  • bit 2 = XIP cache
  • bit 1 = SRAM0
  • bit 0 = SRAM1
  • 0 = powered up
  • 1 = powered down

When POWMAN_STATE_REQ is written, the POWMAN_STATE_WAITING flag is set while the Power Manager determines what is required. If an invalid transition is requested the Power Manager will still register the request in POWMAN_STATE_REQ but will also set the POWMAN_BAD_REQ flag. It will then implement the power-up requests and ignore the power down requests. To do nothing would risk entering an unrecoverable lock-up state. Invalid requests are: any combination of power up and power down requests any request that results in swcore being powered and xip unpowered If the request is to power down the switched-core domain then POWMAN_STATE_WAITING stays active until the processors halt. During this time the POWMAN_STATE_REQ field can be re-written to change or cancel the request. When the power state transition begins the POWMAN_STATE_WAITING flag is cleared, the POWMAN_STATE_CHANGING flag is set and POWMAN register writes are ignored until the transition completes.

0x3cPOW_FASTDIV
0x40POW_DELAYpower state machine delays
0x44EXT_CTRL0Configures a gpio as a power mode aware control output
0x48EXT_CTRL1Configures a gpio as a power mode aware control output
0x4cEXT_TIME_REFSelect a GPIO to use as a time reference, the source can be used to drive the low power clock at 32kHz, or to provide a 1ms tick to the timer, or provide a 1Hz tick to the timer. The tick selection is controlled by the POWMAN_TIMER register.
0x50LPOSC_FREQ_KHZ_INTInforms the AON Timer of the integer component of the clock frequency when running off the LPOSC.
0x54LPOSC_FREQ_KHZ_FRACInforms the AON Timer of the fractional component of the clock frequency when running off the LPOSC.
0x58XOSC_FREQ_KHZ_INTInforms the AON Timer of the integer component of the clock frequency when running off the XOSC.
0x5cXOSC_FREQ_KHZ_FRACInforms the AON Timer of the fractional component of the clock frequency when running off the XOSC.
0x60SET_TIME_63TO48
0x64SET_TIME_47TO32
OffsetNameInfo
0x68SET_TIME_31TO16
0x6cSET_TIME_15TO0
0x70READ_TIME_UPPER
0x74READ_TIME_LOWER
0x78ALARM_TIME_63TO48
0x7cALARM_TIME_47TO32
0x80ALARM_TIME_31TO16
0x84ALARM_TIME_15TO0
0x88TIMER
0x8cPWRUP0

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option.

An invalid selection will be ignored

source = 0 selects gpio0

.

.

source = 47 selects gpio47

source = 48 selects qspi_ss

source = 49 selects qspi_sd0

source = 50 selects qspi_sd1

source = 51 selects qspi_sd2

source = 52 selects qspi_sd3

source = 53 selects qspi_sclk

level = 0 triggers the pwrup when the source is low

level = 1 triggers the pwrup when the source is high

0x90PWRUP1

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option.

An invalid selection will be ignored

source = 0 selects gpio0

.

.

source = 47 selects gpio47

source = 48 selects qspi_ss

source = 49 selects qspi_sd0

source = 50 selects qspi_sd1

source = 51 selects qspi_sd2

source = 52 selects qspi_sd3

source = 53 selects qspi_sclk

level = 0 triggers the pwrup when the source is low

level = 1 triggers the pwrup when the source is high

OffsetNameInfo
0x94PWRUP2

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option.

An invalid selection will be ignored

source = 0 selects gpio0

.

.

source = 47 selects gpio47

source = 48 selects qspi_ss

source = 49 selects qspi_sd0

source = 50 selects qspi_sd1

source = 51 selects qspi_sd2

source = 52 selects qspi_sd3

source = 53 selects qspi_sclk

level = 0 triggers the pwrup when the source is low

level = 1 triggers the pwrup when the source is high

0x98PWRUP3

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option.

An invalid selection will be ignored

source = 0 selects gpio0

.

.

source = 47 selects gpio47

source = 48 selects qspi_ss

source = 49 selects qspi_sd0

source = 50 selects qspi_sd1

source = 51 selects qspi_sd2

source = 52 selects qspi_sd3

source = 53 selects qspi_sclk

level = 0 triggers the pwrup when the source is low

level = 1 triggers the pwrup when the source is high

0x9cCURRENT_PWRUP_REQ

Indicates current powerup request state

pwrup events can be cleared by removing the enable from the pwrup register. The alarm pwrup req can be cleared by clearing timer.alarm_enab

0 = chip reset, for the source of the last reset see POWMAN_CHIP_RESET

1 = pwrup0

2 = pwrup1

3 = pwrup2

4 = pwrup3

5 = coresight_pwrup

6 = alarm_pwrup

OffsetNameInfo
0xa0LAST_SWCORE_PWRUPIndicates which pwrup source triggered the last switched-core power up
0 = chip reset, for the source of the last reset see POWMAN_CHIP_RESET
1 = pwrup0
2 = pwrup1
3 = pwrup2
4 = pwrup3
5 = coresight_pwrup
6 = alarm_pwrup
0xa4DBG_PWRCFG
0xa8BOOTDISTell the bootrom to ignore the BOOT0..3 registers following the next RSM reset (e.g. the next core power down/up).

If an early boot stage has soft-locked some OTP pages in order to protect their contents from later stages, there is a risk that Secure code running at a later stage can unlock the pages by powering the core up and down.

This register can be used to ensure that the bootloader runs as normal on the next power up, preventing Secure code at a later stage from accessing OTP in its unlocked state.

Should be used in conjunction with the OTP BOOTDIS register.
0xacDBGCONFIG
0xb0SCRATCH0Scratch register. Information persists in low power mode
0xb4SCRATCH1Scratch register. Information persists in low power mode
0xb8SCRATCH2Scratch register. Information persists in low power mode
0xbcSCRATCH3Scratch register. Information persists in low power mode
0xc0SCRATCH4Scratch register. Information persists in low power mode
0xc4SCRATCH5Scratch register. Information persists in low power mode
0xc8SCRATCH6Scratch register. Information persists in low power mode
0xccSCRATCH7Scratch register. Information persists in low power mode
0xd0BOOT0Scratch register. Information persists in low power mode
0xd4BOOT1Scratch register. Information persists in low power mode
0xd8BOOT2Scratch register. Information persists in low power mode
0xdcBOOT3Scratch register. Information persists in low power mode
0xe0INTRRaw Interrupts
0xe4INTEInterrupt Enable
0xe8INTFInterrupt Force
0xecINTSInterrupt status after masking & forcing

POWMAN: BADPASSWD Register

Offset: 0x00

Table 478.
BADPASSWD Register

Bits 14:10 9:5 4:0 BitsDescription SHIFT DescriptionMASK_MSB : The most-significant bit allowed to pass by the mask (inclusive) MASK_LSB : The least-significant bit allowed to pass by the mask (inclusive) : Right-rotate applied to accumulator before masking. By appropriatelyType RW RW RW TypeReset 0x00 0x00 0x00 Reset
31:1Reserved.--
0Indicates a bad password has been usedWC0x0
Table 479. BitsDescriptionTypeReset
VREG_CTRL Register 31:16Reserved.--
15RST_N 0 - reset: returns the regulator to its startup settingsRW0x1
14Reserved.--
13UNLOCK: unlocks the VREG control interface after power up 0 - Locked (default)RW0x0
12ISOLATEIt cannot be relocked when it is unlocked. : isolates the VREG control interface 0 - not isolated (default)RW0x0
11:91 - isolated Reserved.--
8DISABLE_VOLTAGE_LIMIT: 0=not disabled, 1=enabledRW0x0
7Reserved.--
6:4HT_TH: high temperature protection thresholdRW0x5
3:2111 - 150C Reserved.--
1:0RESERVED: write 0 to this fieldRW0x0

POWMAN: VREG_CTRL Register

Offset: 0x04

Description

Voltage Regulator Control

Table 479.
VREG_CTRL Register

POWMAN: VREG_STS Register

Offset: 0x08

Description

Voltage Regulator Status

Table 480. VREG_STS
Register

BitsDescriptionTypeReset
31:5Reserved.--
4VOUT_OK : output regulation status
0=not in regulation, 1=in regulation
RO0x0
3:1Reserved.--
0STARTUP : startup status
0=startup complete, 1=starting up
RO0x0

POWMAN: VREG Register

Offset: 0x0c

Description

Voltage Regulator Settings

Table 481. VREG Register

BitsDescriptionTypeReset
31:16Reserved.--
15UPDATE_IN_PROGRESS : regulator state is being updated
writes to the vreg register will be ignored when this field is set
RO0x0
14:9Reserved.--
BitsDescriptionTypeReset
8:4VSEL : output voltage select
the regulator output voltage is limited to 1.3V unless the voltage limit is disabled using the disable_voltage_limit field in the vreg_ctrl register
00000 - 0.55V
00001 - 0.60V
00010 - 0.65V
00011 - 0.70V
00100 - 0.75V
00101 - 0.80V
00110 - 0.85V
00111 - 0.90V
01000 - 0.95V
01001 - 1.00V
01010 - 1.05V
01011 - 1.10V (default)
01100 - 1.15V
01101 - 1.20V
01110 - 1.25V
01111 - 1.30V
10000 - 1.35V
10001 - 1.40V
10010 - 1.50V
10011 - 1.60V
10100 - 1.65V
10101 - 1.70V
10110 - 1.80V
10111 - 1.90V
11000 - 2.00V
11001 - 2.35V
11010 - 2.50V
11011 - 2.65V
11100 - 2.80V
11101 - 3.00V
11110 - 3.15V
11111 - 3.30V
RW0x0b
3Reserved.--
2RESERVED : write 0 to this fieldRW0x0
1HIZ : high impedance mode select
0=not in high impedance mode, 1=in high impedance mode
RW0x0
0Reserved.--

POWMAN: VREG_LP_ENTRY Register

Offset: 0x10

Description

Voltage Regulator Low Power Entry Settings

Table 482.
VREG_LP_ENTRY
Register

BitsDescriptionTypeReset
31:9Reserved.--
BitsDescriptionTypeReset
8:4VSEL : output voltage select
the regulator output voltage is limited to 1.3V unless the voltage limit is disabled using the disable_voltage_limit field in the vreg_ctrl register
00000 - 0.55V
00001 - 0.60V
00010 - 0.65V
00011 - 0.70V
00100 - 0.75V
00101 - 0.80V
00110 - 0.85V
00111 - 0.90V
01000 - 0.95V
01001 - 1.00V
01010 - 1.05V
01011 - 1.10V (default)
01100 - 1.15V
01101 - 1.20V
01110 - 1.25V
01111 - 1.30V
10000 - 1.35V
10001 - 1.40V
10010 - 1.50V
10011 - 1.60V
10100 - 1.65V
10101 - 1.70V
10110 - 1.80V
10111 - 1.90V
11000 - 2.00V
11001 - 2.35V
11010 - 2.50V
11011 - 2.65V
11100 - 2.80V
11101 - 3.00V
11110 - 3.15V
11111 - 3.30V
RW0x0b
3Reserved.--
2MODE : selects either normal (switching) mode or low power (linear) mode
low power mode can only be selected for output voltages up to 1.3V
0 = normal mode (switching)
1 = low power mode (linear)
RW0x1
1HIZ : high impedance mode select
0=not in high impedance mode, 1=in high impedance mode
RW0x0
0Reserved.--

POWMAN: VREG_LP_EXIT Register

Offset: 0x14

Description

Voltage Regulator Low Power Exit Settings

Table 483.
VREG_LP_EXIT
Register

BitsDescriptionTypeReset
31:9Reserved.--
8:4VSEL : output voltage select
the regulator output voltage is limited to 1.3V unless the voltage limit is disabled using the disable_voltage_limit field in the vreg_ctrl register
00000 - 0.55V
00001 - 0.60V
00010 - 0.65V
00011 - 0.70V
00100 - 0.75V
00101 - 0.80V
00110 - 0.85V
00111 - 0.90V
01000 - 0.95V
01001 - 1.00V
01010 - 1.05V
01011 - 1.10V (default)
01100 - 1.15V
01101 - 1.20V
01110 - 1.25V
01111 - 1.30V
10000 - 1.35V
10001 - 1.40V
10010 - 1.50V
10011 - 1.60V
10100 - 1.65V
10101 - 1.70V
10110 - 1.80V
10111 - 1.90V
11000 - 2.00V
11001 - 2.35V
11010 - 2.50V
11011 - 2.65V
11100 - 2.80V
11101 - 3.00V
11110 - 3.15V
11111 - 3.30V
RW0x0b
3Reserved.--
2MODE : selects either normal (switching) mode or low power (linear) mode
low power mode can only be selected for output voltages up to 1.3V
0 = normal mode (switching)
1 = low power mode (linear)
RW0x0
1HIZ : high impedance mode select
0=not in high impedance mode, 1=in high impedance mode
RW0x0
0Reserved.--

POWMAN: BOD_CTRL Register

Offset: 0x18

Description

Brown-out Detection Control

Table 484. BOD_CTRL Register

BitsDescriptionTypeReset
31:13Reserved.--
12ISOLATE : isolates the brown-out detection control interface
0 - not isolated (default)
1 - isolated
RW0x0
11:0Reserved.--

POWMAN: BOD Register

Offset: 0x1c

Description

Brown-out Detection Settings

Table 485. BOD Register

BitsDescriptionTypeReset
31:9Reserved.--
8:4VSEL : threshold select
00000 - 0.473V
00001 - 0.516V
00010 - 0.559V
00011 - 0.602V
00100 - 0.645VS
00101 - 0.688V
00110 - 0.731V
00111 - 0.774V
01000 - 0.817V
01001 - 0.860V (default)
01010 - 0.903V
01011 - 0.946V
01100 - 0.989V
01101 - 1.032V
01110 - 1.075V
01111 - 1.118V
10000 - 1.161
10001 - 1.204V
RW0x0b
3:1Reserved.--
0EN : enable brown-out detection
0=not enabled, 1=enabled
RW0x1

POWMAN: BOD_LP_ENTRY Register

Offset: 0x20

Description

Brown-out Detection Low Power Entry Settings

Table 486. BOD_LP_ENTRY Register

BitsDescriptionTypeReset
31:9Reserved.--
BitsDescriptionTypeReset
8:4VSEL : threshold select
00000 - 0.473V
00001 - 0.516V
00010 - 0.559V
00011 - 0.602V
00100 - 0.645VS
00101 - 0.688V
00110 - 0.731V
00111 - 0.774V
01000 - 0.817V
01001 - 0.860V (default)
01010 - 0.903V
01011 - 0.946V
01100 - 0.989V
01101 - 1.032V
01110 - 1.075V
01111 - 1.118V
10000 - 1.161
10001 - 1.204V
RW0x0b
3:1Reserved.--
0EN : enable brown-out detection
0=not enabled, 1=enabled
RW0x0

POWMAN: BOD_LP_EXIT Register

Offset: 0x24

Description

Brown-out Detection Low Power Exit Settings

Table 487.
BOD_LP_EXIT Register

BitsDescriptionTypeReset
31:9Reserved.--
8:4VSEL : threshold select
00000 - 0.473V
00001 - 0.516V
00010 - 0.559V
00011 - 0.602V
00100 - 0.645VS
00101 - 0.688V
00110 - 0.731V
00111 - 0.774V
01000 - 0.817V
01001 - 0.860V (default)
01010 - 0.903V
01011 - 0.946V
01100 - 0.989V
01101 - 1.032V
01110 - 1.075V
01111 - 1.118V
10000 - 1.161
10001 - 1.204V
RW0x0b
3:1Reserved.--
BitsDescriptionTypeReset
0EN : enable brown-out detection
0=not enabled, 1=enabled
RW0x1

POWMAN: LPOSC Register

Offset: 0x28

Description

Low power oscillator control register.

Table 488. LPOSC Register

BitsDescriptionTypeReset
31:10Reserved.--
9:4TRIM : Frequency trim - the trim step is typically 1% of the reset frequency, but can be up to 3%RW0x20
3:2Reserved.--
1:0MODE : This feature has been removedRW0x3

POWMAN: CHIP_RESET Register

Offset: 0x2c

Description

Chip reset control and status

Table 489. CHIP_RESET Register

BitsDescriptionTypeReset
31:29Reserved.--
28HAD_WATCHDOG_RESET_PSM : Last reset was a watchdog timeout which was configured to reset the power-on state machine
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer no
powman no
swcore no
psm yes
and does not change the power state
RO0x0
27HAD_HZD_SYS_RESET_REQ : Last reset was a system reset from the hazard debugger
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer no
powman no
swcore no
psm yes
and does not change the power state
RO0x0
BitsDescriptionTypeReset
26HAD_GLITCH_DETECT: Last reset was due to a power supply glitch
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer no
powman no
swcore no
psm yes
and does not change the power state
RO0x0
25HAD_SWCORE_PD: Last reset was a switched core powerdown
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer no
powman no
swcore yes
psm yes
then starts the power sequencer
RO0x0
24HAD_WATCHDOG_RESET_SWCORE: Last reset was a watchdog timeout which was configured to reset the switched-core
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer no
powman no
swcore yes
psm yes
then starts the power sequencer
RO0x0
23HAD_WATCHDOG_RESET_POWMAN: Last reset was a watchdog timeout which was configured to reset the power manager
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
BitsDescriptionTypeReset
22HAD_WATCHDOG_RESET_POWMAN_ASYNC: Last reset was a watchdog timeout which was configured to reset the power manager asynchronously
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
21HAD_RESCUE: Last reset was a rescue reset from the debugger
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag no, it sets this flag
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
20Reserved.--
19HAD_DP_RESET_REQ: Last reset was an reset request from the arm debugger
This resets:
double_tap flag no
DP no
RPAP no
rescue_flag yes
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
18HAD_RUN_LOW: Last reset was from the RUN pin
This resets:
double_tap flag no
DP yes
RPAP yes
rescue_flag yes
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
BitsDescriptionTypeReset
17HAD_BOR: Last reset was from the brown-out detection block
This resets:
double_tap flag yes
DP yes
RPAP yes
rescue_flag yes
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
16HAD_POR: Last reset was from the power-on reset
This resets:
double_tap flag yes
DP yes
RPAP yes
rescue_flag yes
timer yes
powman yes
swcore yes
psm yes
then starts the power sequencer
RO0x0
15:5Reserved.--
4RESCUE_FLAG: This is set by a rescue reset from the RP-AP.
Its purpose is to halt before the bootrom before booting from flash in order to recover from a boot lock-up.
The debugger can then attach once the bootrom has been halted and flash some working code that does not lock up.
WC0x0
3:1Reserved.--
0DOUBLE_TAP: This flag is set by double-tapping RUN. It tells bootcode to go into the bootloader.RW0x0

POWMAN: WDSEL Register

Offset: 0x30

Description

Allows a watchdog reset to reset the internal state of powman in addition to the power-on state machine (PSM).

Note that powman ignores watchdog resets that do not select at least the CLOCKS stage or earlier stages in the PSM. If using these bits, it's recommended to set PSM_WDSEL to all-ones in addition to the desired bits in this register. Failing to select CLOCKS or earlier will result in the POWMAN_WDSEL register having no effect.

Table 490. WDSEL Register

BitsDescriptionTypeReset
31:13Reserved.--
12RESET_PSM: If set to 1, a watchdog reset will run the full power-on state machine (PSM) sequence
From a user perspective it is the same as setting RSM_WDSEL_PROC_COLD
From a hardware debug perspective it has the same effect as a reset from a glitch detector
RW0x0
11:9Reserved.--
BitsDescriptionTypeReset
8RESET_SWCORE: If set to 1, a watchdog reset will reset the switched core power domain and run the full power-on state machine (PSM) sequence
From a user perspective it is the same as setting RSM_WDSEL_PROC_COLD
From a hardware debug perspective it has the same effect as a power-on reset for the switched core power domain
RW0x0
7:5Reserved.--
4RESET_POWMAN: If set to 1, a watchdog reset will restore powman defaults, reset the timer, reset the switched core power domain and run the full power-on state machine (PSM) sequence
This relies on clk_ref running. Use reset_powman_async if that may not be true
RW0x0
3:1Reserved.--
0RESET_POWMAN_ASYNC: If set to 1, a watchdog reset will restore powman defaults, reset the timer, reset the switched core domain and run the full power-on state machine (PSM) sequence
This does not rely on clk_ref running
RW0x0

POWMAN: SEQ_CFG Register

Offset: 0x34

Description

For configuration of the power sequencer

Writes are ignored while POWMAN_STATE_CHANGING=1

Table 491. SEQ_CFG Register

BitsDescriptionTypeReset
31:21Reserved.--
20USING_FAST_POWCK: 0 indicates the POWMAN clock is running from the low power oscillator (32kHz)
1 indicates the POWMAN clock is running from the reference clock (2-50MHz)
RO0x1
19:18Reserved.--
17USING_BOD_LP: Indicates the brown-out detector (BOD) mode
0 = BOD high power mode which is the default
1 = BOD low power mode
RO0x0
16USING_VREG_LP: Indicates the voltage regulator (VREG) mode
0 = VREG high power mode which is the default
1 = VREG low power mode
RO0x0
15:13Reserved.--
12USE_FAST_POWCK: selects the reference clock (clk_ref) as the source of the POWMAN clock when switched-core is powered. The POWMAN clock always switches to the slow clock (lposc) when switched-core is powered down because the fast clock stops running.
0 always run the POWMAN clock from the slow clock (lposc)
1 run the POWMAN clock from the fast clock when available
This setting takes effect when a power up sequence is next run
RW0x1
11:9Reserved.--
BitsDescriptionTypeReset
8RUN_LPOSC_IN_LP : Set to 0 to stop the low power osc when the switched-core is powered down, which is unwise if using it to clock the timer
This setting takes effect when the swcore is next powered down
RW0x1
7USE_BOD_HP : Set to 0 to prevent automatic switching to bod high power mode when switched-core is powered up
This setting takes effect when the swcore is next powered up
RW0x1
6USE_BOD_LP : Set to 0 to prevent automatic switching to bod low power mode when switched-core is powered down
This setting takes effect when the swcore is next powered down
RW0x1
5USE_VREG_HP : Set to 0 to prevent automatic switching to vreg high power mode when switched-core is powered up
This setting takes effect when the swcore is next powered up
RW0x1
4USE_VREG_LP : Set to 0 to prevent automatic switching to vreg low power mode when switched-core is powered down
This setting takes effect when the swcore is next powered down
RW0x1
3:2Reserved.--
1HW_PWRUP_SRAM0 : Specifies the power state of SRAM0 when powering up swcore from a low power state (P1.xxx) to a high power state (P0.0xx).
0=power-up
1=no change
RW0x0
0HW_PWRUP_SRAM1 : Specifies the power state of SRAM1 when powering up swcore from a low power state (P1.xxx) to a high power state (P0.0xx).
0=power-up
1=no change
RW0x0

POWMAN: STATE Register

Offset: 0x38

Description

This register controls the power state of the 4 power domains.

The current power state is indicated in POWMAN_STATE_CURRENT which is read-only.

To change the state, write to POWMAN_STATE_REQ.

The coding of POWMAN_STATE_CURRENT & POWMAN_STATE_REQ corresponds to the power states defined in the datasheet:

bit 3 = SWCORE

bit 2 = XIP cache

bit 1 = SRAM0

bit 0 = SRAM1

0 = powered up

1 = powered down

When POWMAN_STATE_REQ is written, the POWMAN_STATE_WAITING flag is set while the Power Manager determines what is required. If an invalid transition is requested the Power Manager will still register the request in POWMAN_STATE_REQ but will also set the POWMAN_BAD_REQ flag. It will then implement the power-up requests and ignore the power down requests. To do nothing would risk entering an unrecoverable lock-up state. Invalid requests are: any combination of power up and power down requests any request that results in swcore being powered and xip unpowered If the request is to power down the switched-core domain then POWMAN_STATE_WAITING stays active until the processors halt. During this time the POWMAN_STATE_REQ field can be re-written to change or cancel the request. When the power state transition begins the POWMAN_STATE_WAITING_flag is cleared, the POWMAN_STATE_CHANGING flag is set and POWMAN register writes are ignored until the transition completes.

Table 492. STATE Register

Bits 14:10 9:5 4:0 BitsDescription SHIFT DescriptionMASK_MSB : The most-significant bit allowed to pass by the mask (inclusive) MASK_LSB : The least-significant bit allowed to pass by the mask (inclusive) : Right-rotate applied to accumulator before masking. By appropriatelyType RW RW RW TypeReset 0x00 0x00 0x00 Reset
31:14Reserved.--
13CHANGING: Indicates a power state change is in progressRO0x0
12WAITING: Indicates the power manager has received a state change request and is waiting for other actions to complete before executing itRO0x0
11BAD_HW_REQ: Invalid hardware initiated state request, power up requests actioned, power down requests ignoredRO0x0
10BAD_SW_REQ: Invalid software initiated state request ignoredRO0x0
9PWRUP_WHILE_WAITING: Indicates that a power state change request was ignored because of a pending power state change requestWC0x0
8REQ_IGNORED: Indicates that a software state change request was ignored because it clashed with an ongoing hardware or debugger requestWC0x0
7:4REQ : This is written by software or hardware to request a new power stateRW0x0
3:0CURRENT POWMAN:: Indicates the current power state POW_FASTDIV RegisterRO0xf
Table 493. Offset Bits POW_FASTDIV: 0x3c DescriptionTypeReset
Register 31:11Reserved.--
10:0divides the POWMAN clock to provide a tick for the delay module and state machinesRW0x040
Table 494. Bits POW_DELAY RegisterDescriptionTypeReset
31:16Reserved.--
15:8SRAM_STEP steps: timing between the sram0 and sram1 power state machineRW0x20
7:4XIP_STEP: timing between the xip power state machine steps measured in units of the lposc period, 0 gives a delay of 1 unitRW0x1
3:0SWCORE_STEP: timing between the swcore power state machine steps measured in units of the lposc period, 0 gives a delay of 1 unitRW0x1

POWMAN: POW_FASTDIV Register

Offset: 0x3c

Table 493. POW_FASTDIV Register

POWMAN: POW_DELAY Register

Offset: 0x40

Description

power state machine delays

Table 494. POW_DELAY Register

POWMAN: EXT_CTRL0 Register

Offset: 0x44

Description

Configures a gpio as a power mode aware control output

Table 495. EXT_CTRL0 Register

BitsDescriptionTypeReset
31:15Reserved.--
14LP_EXIT_STATE : output level when exiting the low power stateRW0x0
13LP_ENTRY_STATE : output level when entering the low power stateRW0x0
12INIT_STATERW0x0
11:9Reserved.--
8INITRW0x0
7:6Reserved.--
5:0GPIO_SELECT : selects from gpio 0 →30 set to 31 to disable this featureRW0x3f
Table 496. EXT_CTRL1 BitsConfigures a gpio as a power mode aware control output DescriptionTypeReset
Register 31:15Reserved.--
14LP_EXIT_STATE : output level when exiting the low power stateRW0x0
13LP_ENTRY_STATE : output level when entering the low power stateRW0x0
12INIT_STATERW0x0
11:9Reserved.--
8INITRW0x0
7:6Reserved.--
5:0GPIO_SELECT : selects from gpio 0 →30 set to 31 to disable this featureRW0x3f
Table 497. BitsPOWMAN_TIMER register. DescriptionTypeReset
EXT_TIME_REF Register 31:5Reserved.--
4DRIVE_LPCK : Use the selected GPIO to drive the 32kHz low power clock, in place of LPOSC. This field must only be written whenRW0x0
3:2POWMAN_TIMER_RUN=0 Reserved.--

POWMAN: EXT_CTRL1 Register

Offset: 0x48

Description

Configures a gpio as a power mode aware control output

Table 496. EXT_CTRL1 Register

POWMAN: EXT_TIME_REF Register

Offset: 0x4c

Description

Select a GPIO to use as a time reference, the source can be used to drive the low power clock at 32kHz, or to provide a 1ms tick to the timer, or provide a 1Hz tick to the timer. The tick selection is controlled by the POWMAN_TIMER register.

Table 497. EXT_TIME_REF Register

BitsDescriptionTypeReset
1:0SOURCE_SEL: 0 → gpio12
1 → gpio20
2 → gpio14
3 → gpio22
RW0x0
Enumerated values:
0x0 → GPIO12
0x1 → GPIO20
0x2 → GPIO14
0x3 → GPIO22

POWMAN: LPOSC_FREQ_KHZ_INT Register

Offset: 0x50

Description

Inform the AON Timer of the integer component of the clock frequency when running off the LPOSC.

Table 498.
LPOSC_FREQ_KHZ_INT
Register

BitsDescriptionTypeReset
31:6Reserved.--
5:0Integer component of the LPOSC or GPIO clock source frequency in kHz.
Default = 32 This field must only be written when POWMAN_TIMER_RUN=0 or POWMAN_TIMER_USING_XOSC=1
RW0x20

POWMAN: LPOSC_FREQ_KHZ_FRAC Register

Offset: 0x54

Description

Inform the AON Timer of the fractional component of the clock frequency when running off the LPOSC.

Table 499.
LPOSC_FREQ_KHZ_FRAC
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0Fractional component of the LPOSC or GPIO clock source frequency in kHz.
Default = 0.768 This field must only be written when POWMAN_TIMER_RUN=0 or POWMAN_TIMER_USING_XOSC=1
RW0xc49c

POWMAN: XOSC_FREQ_KHZ_INT Register

Offset: 0x58

Description

Inform the AON Timer of the integer component of the clock frequency when running off the XOSC.

Table 500.
XOSC_FREQ_KHZ_INT
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0Integer component of the XOSC frequency in kHz. Default = 12000 Must be >1
This field must only be written when POWMAN_TIMER_RUN=0 or
POWMAN_TIMER_USING_XOSC=0
RW0x2ee0

POWMAN: XOSC_FREQ_KHZ_FRAC Register

Offset: 0x5c

Description

Informs the AON Timer of the fractional component of the clock frequency when running off the XOSC.

Table 501.
XOSC_FREQ_KHZ_FRA
C Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0Fractional component of the XOSC frequency in kHz. This field must only be
written when POWMAN_TIMER_RUN=0 or POWMAN_TIMER_USING_XOSC=0
RW0x0000

POWMAN: SET_TIME_63T048 Register

Offset: 0x60

Table 502.
SET_TIME_63T048
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0For setting the time, do not use for reading the time, use
POWMAN_READ_TIME_UPPER and POWMAN_READ_TIME_LOWER. This field
must only be written when POWMAN_TIMER_RUN=0
RW0x0000

POWMAN: SET_TIME_47T032 Register

Offset: 0x64

Table 503.
SET_TIME_47T032
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0For setting the time, do not use for reading the time, use
POWMAN_READ_TIME_UPPER and POWMAN_READ_TIME_LOWER. This field
must only be written when POWMAN_TIMER_RUN=0
RW0x0000

POWMAN: SET_TIME_31T016 Register

Offset: 0x68

Table 504.
SET_TIME_31T016
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0For setting the time, do not use for reading the time, use
POWMAN_READ_TIME_UPPER and POWMAN_READ_TIME_LOWER. This field
must only be written when POWMAN_TIMER_RUN=0
RW0x0000

POWMAN: SET_TIME_15T00 Register

Offset: 0x6c

Table 505.
SET_TIME_15T00
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0For setting the time, do not use for reading the time, use POWMAN_READ_TIME_UPPER and POWMAN_READ_TIME_LOWER. This field must only be written when POWMAN_TIMER_RUN=0RW0x0000

POWMAN: READ_TIME_UPPER Register

Offset: 0x70

Table 506.
READ_TIME_UPPER
Register

BitsDescriptionTypeReset
31:0For reading bits 63:32 of the timer. When reading all 64 bits it is possible for the LOWER count to rollover during the read. It is recommended to read UPPER, then LOWER, then re-read UPPER and, if it has changed, re-read LOWER.RO0x00000000

POWMAN: READ_TIME_LOWER Register

Offset: 0x74

Table 507.
READ_TIME_LOWER
Register

BitsDescriptionTypeReset
31:0For reading bits 31:0 of the timer.RO0x00000000

POWMAN: ALARM_TIME_63T048 Register

Offset: 0x78

Table 508.
ALARM_TIME_63T048
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0This field must only be written when POWMAN_ALARM_ENAB=0RW0x0000

POWMAN: ALARM_TIME_47T032 Register

Offset: 0x7c

Table 509.
ALARM_TIME_47T032
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0This field must only be written when POWMAN_ALARM_ENAB=0RW0x0000

POWMAN: ALARM_TIME_31T016 Register

Offset: 0x80

Table 510.
ALARM_TIME_31T016
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0This field must only be written when POWMAN_ALARM_ENAB=0RW0x0000

POWMAN: ALARM_TIME_15T00 Register

Offset: 0x84

Table 511.
ALARM_TIME_15T00
Register

BitsDescriptionTypeReset
31:16Reserved.--
15:0This field must only be written when POWMAN_ALARM_ENAB=0RW0x0000

POWMAN: TIMER Register

Offset: 0x88

Table 512. TIMER
Register

BitsDescriptionTypeReset
31:20Reserved.--
19USING_GPIO_1HZ : Timer is synchronised to a 1hz gpio sourceRO0x0
18USING_GPIO_1KHZ : Timer is running from a 1khz gpio sourceRO0x0
17USING_LPOSC : Timer is running from lposcRO0x0
16USING_XOSC : Timer is running from xoscRO0x0
15:14Reserved.--
13USE_GPIO_1HZ : Selects the gpio source as the reference for the sec counter. The msec counter will continue to use the lposc or xosc reference.RW0x0
12:11Reserved.--
10USE_GPIO_1KHZ : switch to gpio as the source of the 1kHz timer tickSC0x0
9USE_XOSC : switch to xosc as the source of the 1kHz timer tickSC0x0
8USE_LPOSC : Switch to lposc as the source of the 1kHz timer tickSC0x0
7Reserved.--
6ALARM : Alarm has fired. Write to 1 to clear the alarm.WC0x0
5PWRUP_ON_ALARM : Alarm wakes the chip from low power modeRW0x0
4ALARM_ENAB : Enables the alarm. The alarm must be disabled while writing the alarm time.RW0x0
3Reserved.--
2CLEAR : Clears the timer, does not disable the timer and does not affect the alarm. This control can be written at any time.SC0x0
1RUN : Timer enable. Setting this bit causes the timer to begin counting up from its current value. Clearing this bit stops the timer from counting.

Before enabling the timer, set the POWMAN_LPOSC_FREQ* and POWMAN_XOSC_FREQ* registers to configure the count rate, and initialise the current time by writing to SET_TIME_63TO48 through SET_TIME_15T00. You must not write to the SET_TIME_x registers when the timer is running.

Once configured, start the timer by setting POWMAN_TIMER_RUN=1. This will start the timer running from the LPOSC. When the XOSC is available switch the reference clock to XOSC then select it as the timer clock by setting POWMAN_TIMER_USE_XOSC=1
RW0x0
0NONSEC_WRITE : Control whether Non-secure software can write to the timer registers. All other registers are hardwired to be inaccessible to Non-secure.RW0x0

POWMAN: PWRUP0 Register

Offset: 0x8c Description

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option. An invalid selection will be ignored

source = 0 selects gpio0

  1. 1. +
  2. 2. + source = 47 selects gpio47
    source = 48 selects qspi_ss
    source = 49 selects qspi_sd0
    source = 50 selects qspi_sd1
    source = 51 selects qspi_sd2
    source = 52 selects qspi_sd3
    source = 53 selects qspi_sclk
    level = 0 triggers the pwrup when the source is low
    level = 1 triggers the pwrup when the source is high

Table 513. PWRUP0 Register

BitsDescriptionTypeReset
31:11Reserved.--
10RAW_STATUS: Value of selected gpio pin (only if enable == 1)RO0x0
9STATUS: Status of gpio wakeup. Write to 1 to clear a latched edge detect.WC0x0
8MODE: Edge or level detect. Edge will detect a 0 to 1 transition (or 1 to 0 transition). Level will detect a 1 or 0. Both types of event get latched into the current_pwrup_req register.RW0x0
Enumerated values:
0x0 → LEVEL
0x1 → EDGE
7DIRECTIONRW0x0
Enumerated values:
0x0 → LOW_FALLING
0x1 → HIGH_RISING
6ENABLE: Set to 1 to enable the wakeup source. Set to 0 to disable the wakeup source and clear a pending wakeup event.
If using edge detect a latched edge needs to be cleared by writing 1 to the status register also.
RW0x0
5:0SOURCERW0x3f
POWMAN: PWRUP1 Register Offset: 0x90 Description

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option. An invalid selection will be ignored

source = 0 selects gpio0

  1. 1. +

Table 514. PWRUP1 Register

BitsDescriptionTypeReset
31:11Reserved.--
10RAW_STATUS: Value of selected gpio pin (only if enable == 1)RO0x0
9STATUS: Status of gpio wakeup. Write to 1 to clear a latched edge detect.WC0x0
8MODE: Edge or level detect. Edge will detect a 0 to 1 transition (or 1 to 0 transition). Level will detect a 1 or 0. Both types of event get latched into the current_pwrup_req register.RW0x0
Enumerated values:
0x0 → LEVEL
0x1 → EDGE
7DIRECTIONRW0x0
Enumerated values:
0x0 → LOW_FALLING
0x1 → HIGH_RISING
6ENABLE: Set to 1 to enable the wakeup source. Set to 0 to disable the wakeup source and clear a pending wakeup event.
If using edge detect a latched edge needs to be cleared by writing 1 to the status register also.
RW0x0
5:0SOURCERW0x3f

POWMAN: PWRUP2 Register

Offset: 0x94

Description

4 GPIO powerup events can be configured to wake the chip up from a low power state. The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event. The number of gpios available depends on the package option. An invalid selection will be ignored.

level = 1 triggers the pwrup when the source is high

Table 515. PWRUP2 Register

BitsDescriptionTypeReset
31:11Reserved.--
10RAW_STATUS : Value of selected gpio pin (only if enable == 1)RO0x0
9STATUS : Status of gpio wakeup. Write to 1 to clear a latched edge detect.WC0x0
8MODE : Edge or level detect. Edge will detect a 0 to 1 transition (or 1 to 0 transition). Level will detect a 1 or 0. Both types of event get latched into the current_pwrup_req register.RW0x0
Enumerated values:
0x0 → LEVEL
0x1 → EDGE
7DIRECTIONRW0x0
Enumerated values:
0x0 → LOW_FALLING
0x1 → HIGH_RISING
6ENABLE : Set to 1 to enable the wakeup source. Set to 0 to disable the wakeup source and clear a pending wakeup event.
If using edge detect a latched edge needs to be cleared by writing 1 to the status register also.
RW0x0
5:0SOURCERW0x3f

POWMAN: PWRUP3 Register

Offset: 0x98

Description

4 GPIO powerup events can be configured to wake the chip up from a low power state.

The pwrups are level/edge sensitive and can be set to trigger on a high/rising or low/falling event

The number of gpios available depends on the package option. An invalid selection will be ignored

source = 0 selects gpio0

  1. 1. +
  2. 2. + source = 47 selects gpio47
    source = 48 selects qspi_ss
    source = 49 selects qspi_sd0
    source = 50 selects qspi_sd1
    source = 51 selects qspi_sd2
    source = 52 selects qspi_sd3
    source = 53 selects qspi_sclk
    level = 0 triggers the pwrup when the source is low
    level = 1 triggers the pwrup when the source is high

Table 516. PWRUP3 Register

BitsDescriptionTypeReset
31:11Reserved.--
10RAW_STATUS : Value of selected gpio pin (only if enable == 1)RO0x0
9STATUS : Status of gpio wakeup. Write to 1 to clear a latched edge detect.WC0x0
BitsDescriptionTypeReset
8MODE: Edge or level detect. Edge will detect a 0 to 1 transition (or 1 to 0 transition). Level will detect a 1 or 0. Both types of event get latched into the current_pwrup_req register.RW0x0
Enumerated values:
0x0 → LEVEL
0x1 → EDGE
7DIRECTIONRW0x0
Enumerated values:
0x0 → LOW_FALLING
0x1 → HIGH_RISING
6ENABLE: Set to 1 to enable the wakeup source. Set to 0 to disable the wakeup source and clear a pending wakeup event.
If using edge detect a latched edge needs to be cleared by writing 1 to the status register also.
RW0x0
5:0SOURCERW0x3f

POWMAN: CURRENT_PWRUP_REQ Register

Offset: 0x9c

Table 517.
CURRENT_PWRUP_REQ
Q Register

BitsDescriptionTypeReset
31:7Reserved.--
6:0Indicates current powerup request state
pwrup events can be cleared by removing the enable from the pwrup register.
The alarm pwrup req can be cleared by clearing timer.alarm_enab
0 = chip reset, for the source of the last reset see POWMAN_CHIP_RESET
1 = pwrup0
2 = pwrup1
3 = pwrup2
4 = pwrup3
5 = coresight_pwrup
6 = alarm_pwrup
RO0x00

POWMAN: LAST_SWCORE_PWRUP Register

Offset: 0xa0

Table 518.
LAST_SWCORE_PWRU
P Register

BitsDescriptionTypeReset
31:7Reserved.--
6:0Indicates which pwrup source triggered the last switched-core power up
0 = chip reset, for the source of the last reset see POWMAN_CHIP_RESET
1 = pwrup0
2 = pwrup1
3 = pwrup2
4 = pwrup3
5 = coresight_pwrup
6 = alarm_pwrup
RO0x00

POWMAN: DBG_PWRCFG Register

Offset: 0xa4

Table 519.
DBG_PWRCFG
Register

BitsDescriptionTypeReset
31:1Reserved.--
0IGNORE: Ignore pwrup req from debugger. If pwrup req is asserted then this will prevent power down and set powerdown blocked. Set ignore to stop paying attention to pwrup_reqRW0x0

POWMAN: BOOTDIS Register

Offset: 0xa8

Description

Tell the bootrom to ignore the BOOT0..3 registers following the next RSM reset (e.g. the next core power down/up).

If an early boot stage has soft-locked some OTP pages in order to protect their contents from later stages, there is a risk that Secure code running at a later stage can unlock the pages by powering the core up and down.

This register can be used to ensure that the bootloader runs as normal on the next power up, preventing Secure code at a later stage from accessing OTP in its unlocked state.

Should be used in conjunction with the OTP BOOTDIS register.

Table 520. BOOTDIS
Register

BitsDescriptionTypeReset
31:2Reserved.--
1NEXT: This flag always ORs writes into its current contents. It can be set but not cleared by software.

The BOOTDIS_NEXT bit is OR'd into the BOOTDIS_NOW bit when the core is powered down. Simultaneously, the BOOTDIS_NEXT bit is cleared. Setting this bit means that the BOOT0..3 registers will be ignored following the next reset of the RSM by powman.

This flag should be set by an early boot stage that has soft-locked OTP pages, to prevent later stages from unlocking it by power cycling.
RW0x0
BitsDescriptionTypeReset
0

NOW: When powman resets the RSM, the current value of BOOTDIS_NEXT is OR'd into BOOTDIS_NOW, and BOOTDIS_NEXT is cleared.

The bootrom checks this flag before reading the BOOT0..3 registers. If it is set, the bootrom clears it, and ignores the BOOT registers. This prevents Secure software from diverting the boot path before a bootloader has had the chance to soft lock OTP pages containing sensitive data.

WC0x0

POWMAN: DBGCONFIG Register

Offset: 0xac

Table 521.
DBGCONFIG Register

BitsDescriptionTypeReset
31:4Reserved.--
3:0

DP_INSTID: Configure DP instance ID for SWD multidrop selection. Recommend that this is NOT changed until you require debug access in multi-chip environment

RW0x0

POWMAN: SCRATCH0, SCRATCH1, ..., SCRATCH6, SCRATCH7 Registers

Offsets: 0xb0, 0xb4, ..., 0xc8, 0xcc

Table 522. SCRATCH0,
SCRATCH1, ...,
SCRATCH6,
SCRATCH7 Registers

BitsDescriptionTypeReset
31:0Scratch register. Information persists in low power modeRW0x00000000

POWMAN: BOOT0, BOOT1, BOOT2, BOOT3 Registers

Offsets: 0xd0, 0xd4, 0xd8, 0xdc

Table 523. BOOT0,
BOOT1, BOOT2,
BOOT3 Registers

BitsDescriptionTypeReset
31:0Scratch register. Information persists in low power modeRW0x00000000

POWMAN: INTR Register

Offset: 0xe0

Description

Raw Interrupts

Table 524. INTR
Register

BitsDescriptionTypeReset
31:4Reserved.--
3PWRUP_WHILE_WAITING: Source is state.pwrup_while_waitingRO0x0
2STATE_REQ_IGNORED: Source is state.req_ignoredRO0x0
1TIMERRO0x0
0VREG_OUTPUT_LOWWC0x0

POWMAN: INTE Register

Offset: 0xe4

Description

Interrupt Enable

Table 525. INTE Register

BitsDescriptionTypeReset
31:4Reserved.--
3PWRUP_WHILE_WAITING : Source is state.pwrup_while_waitingRW0x0
2STATE_REQ_IGNORED : Source is state.req_ignoredRW0x0
1TIMERRW0x0
0VREG_OUTPUT_LOWRW0x0

POWMAN: INTF Register

Offset: 0xe8

Description

Interrupt Force

Table 526. INTF Register

BitsDescriptionTypeReset
31:4Reserved.--
3PWRUP_WHILE_WAITING : Source is state.pwrup_while_waitingRW0x0
2STATE_REQ_IGNORED : Source is state.req_ignoredRW0x0
1TIMERRW0x0
0VREG_OUTPUT_LOWRW0x0

POWMAN: INTS Register

Offset: 0xec

Description

Interrupt status after masking & forcing

Table 527. INTS Register

BitsDescriptionTypeReset
31:4Reserved.--
3PWRUP_WHILE_WAITING : Source is state.pwrup_while_waitingRO0x0
2STATE_REQ_IGNORED : Source is state.req_ignoredRO0x0
1TIMERRO0x0
0VREG_OUTPUT_LOWRO0x0

6.5. Power reduction strategies

RP2350 retains the SLEEP and DORMANT states for dynamic power control from RP2040. It extends these states by introducing power domains (Section 6.2.1), which allow power to be removed from various components on chip, virtually eliminating the leakage currents, and allowing lower power modes to be supported.

6.5.1. Top-level clock gates

Each clock domain (for example, the system clock) may drive a large number of distinct hardware blocks, not all of which might be required at once. To avoid unnecessary power dissipation, each individual endpoint of each clock (for example, the UART system clock input) may be disabled at any time.

Enabling and disabling a clock gate is glitch-free. If a peripheral clock is temporarily disabled, and subsequently re-enabled, the peripheral will be in the same state as prior to the clock being disabled. No reset or reinitialisation should be required.

Clock gates are controlled by two sets of registers: the WAKE_ENx registers (starting at WAKE_EN0 ) and SLEEP_ENx registers (starting at SLEEP_EN0 ). These two sets of registers are identical at the bit level, each possessing a flag to control each clock endpoint. The WAKE_EN registers specify which clocks are enabled whilst the system is awake, and the SLEEP_ENx registers select which clocks are enabled while the processor is in the SLEEP state (Section 6.5.2).

The two processors do not have externally-controllable clock gates. Instead, the processors gate the clocks of their subsystems autonomously, based on execution of WFI/WFE instructions, and external Event and IRQ signals.

6.5.2. SLEEP state

RP2350 enters the SLEEP state when all of the following are true:

RP2350 exits the SLEEP state when either processor is awoken by an interrupt.

When in the SLEEP state, the top-level clock gates are masked by the SLEEP_ENx registers (starting at SLEEP_EN0 ), rather than the WAKE_ENx registers (starting at WAKE_EN0 ). This permits more aggressive pruning of the clock tree when the processors are asleep.

i NOTE

Though it is possible for a clock to be enabled during SLEEP and disabled outside of SLEEP, this is generally not useful.

For example, if the system is sleeping until a character interrupt from a UART, the entire system except for the UART can be clock-gated ( SLEEP_ENx = all-zeroes except for CLK_SYS_UART0 and CLK_PERI_UART0 ). This includes system infrastructure such as the bus fabric.

When the UART asserts its interrupt and wakes a processor, RP2350 leaves SLEEP mode and switches back to the WAKE_ENx clock mask. At the minimum, this should include the bus fabric and the memory devices containing the processor's stack and interrupt vectors.

A system-level clock request handshake holds the processors off the bus until the clocks are re-enabled.

6.5.3. DORMANT state

The DORMANT state is a true zero-dynamic-power sleep state, where all clocks (and all oscillators) are disabled. The system can awake from the DORMANT state upon a GPIO event (high/low level or rising/falling edge), or an AON Timer alarm: this restarts one of the oscillators (either ring oscillator or crystal oscillator) and ungates the oscillator output after it is stable. System state is retained, so code execution resumes immediately upon leaving the DORMANT state.

If relying on the AON Timer (Section 12.10) to wake from the DORMANT state, the AON Timer must run from the LPOSC or an external clock source. The AON Timer accepts clock frequencies as low as 1Hz.

DORMANT does not halt PLLs. To avoid unnecessary power dissipation, software should power down PLLs before entering the DORMANT state, and power up and reconfigure the PLLs again after exiting.

If you halt the crystal oscillator (XOSC), you must also halt the PLLs to prevent them losing lock when their input reference clock stops. The PLL VCO may behave erratically when the frequency reference is lost, such as increasing to a very high frequency. Reconfigure and re-enable the PLLs after the XOSC starts again. Do not attempt to run clocks from the PLLs while the XOSC is stopped.

The DORMANT state is entered by writing a keyword to the DORMANT register in whichever oscillator is active: ring oscillator (Section 8.3) or crystal oscillator (Section 8.2). If both are active, the one providing the processor clock must be stopped last because it will stop software from executing.

6.5.3.1. Waking from the DORMANT state

The system exits the DORMANT state on any of the following events:

When waking from the AON Timer you do not have to enable the IRQ output from POWMAN. It is sufficient for the timer to fire, without being mapped to an interrupt output. Any AON Timer alarm comparison event which causes TIMER.ALARM to assert causes the system to exit the DORMANT state. It is the actual alarm event which causes the exit, not the TIMER.ALARM status; if you enter the DORMANT state with the TIMER.ALARM status set to 1, but the timer alarm comparison logic disabled by TIMER.ALARM_ENAB , you will not exit the DORMANT state.

The GPIO Bank registers have interrupt enable registers for interrupts targeting the DORMANT mode wake logic, such as DORMANT_WAKE_INTE0 . These are identical to the interrupt enable registers for interrupts targeting the processors, such as PROCO_INTE0 .

Waking from the DORMANT state restarts the oscillator which was disabled by entry to the DORMANT state. It does not restart any other oscillators, or change any system-level clock configuration.

6.5.4. Memory peripheral power down

The main system memories ( SRAM0 → SRAM9 , mapped to bus addresses 0x20000000 to 0x20081fff ), as well as the USB DPRAM, can be partially powered down via the MEMPOWERDOWN register in the SYSCFG registers (see Section 12.15.2). This powers down the analogue circuitry used to access the SRAM storage array (the periphery of the SRAM) but the storage array itself remains powered. Memories retain their current contents, but cannot be accessed. Static power is reduced.

Caution icon CAUTION

Memories must not be accessed when powered down. Doing so can corrupt memory contents.

When powering a memory back up, a 20ns delay is required before accessing the memory again.

The XIP cache (see Section 4.4) can also be powered down, with CTRL.POWER_DOWN . The XIP hardware will not generate cache accesses whilst the cache is powered down. Note that this is unlikely to produce a net power savings if code continues to execute from XIP, due to the comparatively high voltages and switching capacitances of the external QSPI bus.

6.5.5. Full memory power down

RP2350 can completely power down its internal SRAM. Unlike the memory peripheral power down described in Section 6.5.4, this completely disconnects the SRAM from the power supply, reducing static power to near zero.

Contents are lost when fully powering down memories. When you power memories up again following a power down,

the contents is completely undefined.

There are three distinct SRAM power domains:

SRAM0

Contains main system SRAM for addresses 0x20000000 through 0x2003ffff (SRAM banks 0 through 3).

SRAM1

Contains main system SRAM for addresses 0x20040000 through 0x20081fff (SRAM banks 4 through 9).

XIP

Contains the XIP cache and the boot RAM.

The XIP power domain is always powered when the switched core domain is powered. The switched core domain is the domain which includes all core logic, such as processors, bus fabric and peripherals. This means the memories in this domain are always powered whenever software is running.

Besides powering memory down to save power, you can also leave memories powered up whilst powering down the switched core domain. This retains program state in SRAM while eliminating static power dissipation in core logic.

For more information see:

6.5.6. Programmer's model

6.5.6.1. Sleep

The hello_sleep example ( hello_sleep_aon.c in the pico-playground GitHub repository ) demonstrates sleep mode. The hello_sleep application (and underlying functions) takes the following steps:

  1. 1. Switches all clocks in the system to run from XOSC.
  2. 2. Configures an alarm in the AON Timer for 10 seconds in the future.
  3. 3. Sets the AON Timer clock as the only clock running in sleep mode using the SLEEP_ENx registers (see SLEEP_EN0 ).
  4. 4. Enables deep sleep in the processor.
  5. 5. Calls __wfi on processor, which will put the processor into deep sleep until woken by the AON Timer interrupt.
  6. 6. After 10 seconds, the AON Timer interrupt clears the alarm and then calls a user supplied callback function.
  7. 7. The callback function ends the example application.

i NOTE

To enter sleep mode, you must enable deep sleep on both proc0 and proc1 , call __wfi , and ensure the DMA is stopped.

hello_sleep makes use of functions in pico_sleep of the Pico Extras . In particular, sleep_goto_sleep_until puts the processor to sleep until woken up by an AON Timer time assumed to be in the future.

Pico Extras: https://github.com/raspberrypi/pico-extras/blob/master/src/rp2_common/pico_sleep/sleep.c Lines 159 - 183

159 void sleep_goto_sleep_until(struct timespec *ts, aon_timer_alarm_handler_t callback)
160 {
161
162     // We should have already called the sleep_run_from_dormant_source function
163     // This is only needed for dormancy although it saves power running from xosc while
    sleeping
164     //assert(dormant_source_valid(_dormant_source));
165
166     clocks_hw->sleep_en0 = CLOCKS_SLEEP_EN0_CLK_REF_POWMAN_BITS;
167     clocks_hw->sleep_en1 = 0x0;
168
169     aon_timer_enable_alarm(ts, callback, false);
170
171     stdio_flush();
172
173     // Enable deep sleep at the proc
174     processor_deep_sleep();
175
176     // Go to sleep
177     __wfi();
178 }

6.5.6.2. DORMANT

The hello_dormant example, hello_dormant_gpio.c in the pico-playground GitHub repository , demonstrates the DORMANT state. The example takes the following steps:

  1. 1. Switches all clocks in the system to run from XOSC.
  2. 2. Configures a GPIO interrupt for the dormant_wake hardware, which can wake both the ROSC and XOSC from dormant mode.
  3. 3. Puts the XOSC into dormant mode, which stops all processor execution (and all other clocked logic on the chip) immediately.
  4. 4. When GPIO 10 goes high, the XOSC restarts and program execution continues.

hello_dormant uses sleep_goto_dormant_until_pin under the hood:

Pico Extras: https://github.com/raspberrypi/pico-extras/blob/master/src/rp2_common/pico_sleep/sleep.c Lines 258 - 282

258 void sleep_goto_dormant_until_pin(uint gpio_pin, bool edge, bool high) {
259     bool low = !high;
260     bool level = !edge;
261
262     // Configure the appropriate IRQ at IO bank 0
263     assert(gpio_pin < NUM_BANK0_GPIOS);
264
265     uint32_t event = 0;
266
267     if (level && low) event = IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_LOW_BITS;
268     if (level && high) event = IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_LEVEL_HIGH_BITS;
269     if (edge && high) event = IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_HIGH_BITS;
270     if (edge && low) event = IO_BANK0_DORMANT_WAKE_INTE0_GPIO0_EDGE_LOW_BITS;
271
272     gpio_init(gpio_pin);
273     gpio_set_input_enabled(gpio_pin, true);
274     gpio_set_dormant_irq_enabled(gpio_pin, event, true);
275 }
276     _go_dormant();
277     // Execution stops here until woken up
278
279     // Clear the irq so we can go back to dormant mode again if we want
280     gpio_acknowledge_irq(gpio_pin, event);
281     gpio_set_input_enabled(gpio_pin, false);
282 }