Datasheet

Table Of Contents
The debug host (which initiated the rescue) will provide further instruction.
If watchdog scratch registers set to indicate pre-loaded code exists in SRAM, jump to that code
Check if SPI CS pin is tied low ("bootrom button"), and skip flash boot if so.
Set up IO muxing, pad controls on QSPI pins, and initialise Synopsys SSI for standard SPI mode
Issue XIP exit sequence, in case flash is still in an XIP mode and has not been power-cycled
Copy 256 bytes from SPI to internal SRAM (SRAM5) and check for valid CRC32 checksum
If checksum passes, assume what we have loaded is a valid flash second stage
Start executing the loaded code from SRAM (SRAM5)
If no valid image found in SPI after 0.5 seconds of attempting to boot, drop to USB device boot
USB device boot: appear as a USB Mass Storage Device
Can program the SPI flash, or load directly into SRAM and run, by dragging and dropping an image in UF2
format.
Also supports an extended PICOBOOT interface
2.7.2.1. Watchdog Boot
Watchdog boot allows users to install their own boot handler, and divert control away from the main boot sequence on
non-POR/BOR resets. It also simplifies running code over the JTAG test interface. It recognises the following values
written to the watchdog’s upper scratch registers:
Scratch 4: magic number 0xb007c0d3
Scratch 5: Entry point XORed with magic -0xb007c0d3 (0x4ff83f2d)
Scratch 6: Stack pointer
Scratch 7: Entry point
If either of the magic numbers mismatch, watchdog boot does not take place. If the numbers match, the Bootrom zeroes
scratch 4 before transferring control, so that the behaviour does not persist over subsequent reboots.
2.7.2.2. Flash Boot Sequence
One of the main challenges of a warm flash boot is forcing the external flash from XIP mode to a mode where it will
accept standard SPI commands. There is no standard method to discontinue XIP on an unknown flash. The Bootrom
provides a best-effort sequence with broad compatibility, which is as follows:
CSn=1, IO[3:0]=4b0000 (via pull downs to avoid contention), issue x32 clocks
CSn=0, IO[3:0]=4b1111 (via pull ups to avoid contention), issue x32 clocks
CSn=1
CSn=0, MOSI=1b1 (driven low-Z, all other IOs Hi-Z), issue x16 clocks
This is designed to miss the XIP continuation codes on Cypress, Micron and Winbond parts. If the device is already in SPI
mode, it interprets this sequence as two FFh NOP instructions, which should be ignored.
As this is best effort only, there may be some devices which obstinately remain in XIP mode. There are then two options:
Use a less efficient XIP mode where each transfer has an SPI instruction prefix, so the flash device remains
communicative in SPI mode.
Boot code installs a compatible XIP exit sequence in SRAM, and configures the watchdog such that a warm boot will
jump straight into this sequence, foregoing our canned sequence.
RP2040 Datasheet
2.7. Bootrom 115