makeIRLEngineering notes

Modules

RP2040 Minimal Design: The Essential Circuit

Build an RP2040 minimal circuit with correct 3.3 V and 1.1 V rails, QSPI flash, clock, USB, SWD, RUN reset, BOOTSEL, and practical layout checks.

Published Updated

Minimal does not mean a chip and one capacitor

RP2040 has USB, SRAM, clock generation, and its boot ROM on-chip, but no nonvolatile program flash. A practical standalone board needs the QFN-56 microcontroller, external QSPI flash, power-rail capacitors, a clock source or a deliberately supported clock arrangement, reset/boot access, and a programming/debug path.

Start from Raspberry Pi’s “Minimal Viable Board” KiCad design and the current Hardware design with RP2040 guide. Reusing that topology is safer than rebuilding it from a Pico screenshot because the guide explains which parts are required, optional, or device-dependent.

Connect both voltage domains correctly

In the common 3.3 V arrangement:

  • All IOVDD pins, USB_VDD, ADC_AVDD, and VREG_VIN receive 3.3 V.
  • VREG_VOUT, the internal regulator’s nominal 1.1 V output, connects to every DVDD core-supply pin.
  • The exposed ground pad and all ground connections join a low-impedance ground plane.
  • TESTEN is tied to ground for normal operation.

Do not connect DVDD directly to 3.3 V. Do not leave USB_VDD floating even on a design that does not use USB. Place the datasheet-recommended 100 nF at each supply pin group, a 1 µF capacitor close to VREG_VIN, and the specified capacitance on VREG_VOUT. Use the latest reference schematic for exact values and count rather than merging capacitors to make the BOM look smaller.

The schematic should use distinct net labels such as +3V3 and +1V1_CORE; calling both VDD invites an accidental short. Placement matters as much as the symbols. Each high-frequency decoupler needs a short route from supply pin through capacitor to a nearby ground via. See decoupling capacitor placement.

Treat QSPI flash as part of the processor

RP2040 executes code from an external flash through its dedicated QSPI interface. Choose a flash that the boot ROM and SDK support, using the reference design’s known part for the lowest-risk first revision. Connect QSPI_SCLK, QSPI_SD0 through SD3, and QSPI_SS exactly by name and pin number.

Place the flash beside the RP2040 and route these six signals directly and briefly. Avoid vias, test-point stubs, and unrelated traces threading through the bus. Decouple the flash supply at its pin.

QSPI_SS also participates in BOOTSEL. Raspberry Pi’s reference circuit connects the flash chip select directly to QSPI_SS, then connects a BOOTSEL button to ground through a 1 kΩ resistor. The resistor lets RP2040 drive flash chip-select normally after boot even if the button remains held. A footprint for an optional 10 kΩ pull-up from QSPI_SS to 3.3 V is useful because some flash parts require chip select held high reliably during power-up; whether it is fitted depends on the selected flash and current reference design.

Do not wire the button as a direct permanent short across flash chip select. This small topology is a common reason custom boards enumerate in BOOTSEL but never run stored firmware.

Add RUN, BOOTSEL, SWD, and USB

RUN is the global active-low reset input. A reset button connects RUN to ground; implement the pull-up and any capacitor according to Raspberry Pi’s reference. BOOTSEL is not a dedicated RP2040 pin. To enter the ROM USB bootloader, hold the QSPI_SS-derived BOOTSEL circuit low through its 1 kΩ path while releasing reset or applying power.

The exact sequencing and its contrast with ESP32 strapping are covered in reset and boot circuits for ESP32 and RP2040.

Expose SWDIO, SWCLK, ground, and a voltage reference on test pads even if USB drag-and-drop is the normal programming method. SWD can program and debug a board when the USB connector, clock, or boot button is wrong. Keep the pads accessible after assembly and key the fixture so it cannot be reversed.

RP2040 includes a USB 1.1 PHY. Route USB_DP and USB_DM as a short differential pair over continuous ground, using any termination components specified by the reference design. A USB-C receptacle still needs its own CC resistors and duplicated data-pin connections; those are connector requirements, not features inside the MCU. Follow the USB-C power and data checklist.

Use a proven 12 MHz clock circuit

The standard RP2040 reference design uses a 12 MHz crystal on XIN and XOUT with its specified load network. Select the exact crystal by frequency, load capacitance, equivalent series resistance, tolerance, package, and drive level—not just “12 MHz.” Calculate load capacitors using the crystal’s specified load and estimated board/pin stray capacitance, then compare with the reference.

Place the crystal and capacitors directly beside the pins. Keep both traces short, symmetric, and isolated from USB, QSPI clock, and switching power nodes. Do not route another signal under the crystal. A ground guard can help only if it does not create long routes or violate the reference layout.

RP2040 can use other clock approaches, but changing the known-good minimal circuit adds boot and firmware assumptions. Save that optimization for a revision with a reason and test equipment.

Layout the QFN and ground pad for assembly

The exposed center pad is the chip’s only ground connection and a thermal/mechanical anchor. Use Raspberry Pi’s recommended footprint, paste segmentation, and ground-via pattern. Confirm whether your assembler fills, tents, or leaves those vias open; excessive solder loss through open vias can starve the pad.

Fan out power and decoupling before GPIO. Keep the 1.1 V loop compact, QSPI clustered on one side, crystal on its pins, and USB away from switch nodes. Check that the package pin-one marker is visible in fabrication and assembly outputs. The datasheet layout review method is especially useful for the QFN exposed pad and crystal notes.

Bring up rails before firmware

With the board unpowered, inspect the QFN and flash for bridges and measure resistance from 3.3 V and 1.1 V to ground. Apply current-limited 3.3 V and verify:

3V3 rail       near 3.3 V
VREG_VOUT/DVDD near 1.1 V
RUN            logic high when reset is released
QSPI_SS        not stuck low

Next, hold BOOTSEL and reset the board. USB should enumerate as the ROM mass-storage boot device. Load a minimal blink build, power-cycle without touching BOOTSEL, and confirm it starts from flash. Finally attach SWD, exercise every GPIO used by the product, and run USB under cable movement. Passing these stages proves power, ROM boot, flash execution, and debug access separately—the evidence a minimal design actually needs.