The RP2040 microcontroller features 30 multifunction GPIO pins, but physical board layouts vary wildly between the standard Raspberry Pi Pico, the wireless Pico W, and third-party formats like Adafruit Feather or SparkFun Thing+. If you are designing a custom PCB or wiring a breadboard, assuming the Pico pinout applies to every RP2040 module will lead to fried traces and failed uploads. Below is the master silicon reference, followed by board-specific variants and the hardware traps that catch most makers.
The Master RP2040 Pinout & GPIO Allocation Table
The RP2040 silicon itself exposes 30 GPIO pins (GPIO0–GPIO29) plus dedicated QSPI pins for the external flash. While the silicon is identical across all boards, the breakout dictates what you actually see on the header. This table maps the core silicon pins to their primary and secondary functions based on the official Raspberry Pi RP2040 Datasheet.
| GPIO | Pico Header Pin | Primary Function | Secondary / Special Function | 5V Tolerant? |
|---|---|---|---|---|
| GPIO0 | 1 | SPI0 RX / I2C0 SDA / UART0 TX | BOOT SEL (Must be LOW for USB boot) | No (3.3V max) |
| GPIO1 | 2 | SPI0 CSn / I2C0 SCL / UART0 RX | BOOT SEL (Must be LOW for USB boot) | No (3.3V max) |
| GPIO4 | 6 | SPI0 RX / I2C0 SDA / UART1 TX | PIO0 / PWM | No (3.3V max) |
| GPIO5 | 7 | SPI0 CSn / I2C0 SCL / UART1 RX | PIO0 / PWM | No (3.3V max) |
| GPIO16 | 21 | SPI0 RX / I2C0 SDA / UART0 TX | PIO0 / PWM | No (3.3V max) |
| GPIO25 | LED | Onboard LED (Pico) | PWM / PIO | No (3.3V max) |
| GPIO26 | 31 (ADC0) | General I/O / ADC Channel 0 | I2C1 SDA / SPI1 SCK | No (3.3V max) |
| GPIO27 | 32 (ADC1) | General I/O / ADC Channel 1 | I2C1 SCL / SPI1 TX | No (3.3V max) |
| GPIO28 | 34 (ADC2) | General I/O / ADC Channel 2 | SPI1 RX / PIO | No (3.3V max) |
| GPIO29 | 35 (ADC3) | ADC Channel 3 (Tied to VSYS/3) | SPI1 CSn / Reference | No (3.3V max) |
The RP2040 I/O bank is strictly 3.3V. There are no 5V-tolerant GPIO pins on the silicon. Feeding a 5V logic signal (like from a standard Arduino Uno or a 5V I2C sensor) directly into any GPIO pin will permanently damage the pad and potentially kill the ARM Cortex-M0+ core. Always use a bidirectional logic level shifter (e.g., TXS0108E or BSS138 MOSFET circuit) when interfacing with 5V peripherals. The only pin on a standard Pico that safely accepts 5V is the
VBUS pin, which is tied directly to the USB 5V line.
Board Variant Standards & Form Factor Differences
While the silicon pinout is fixed, the physical board standards dictate power delivery, ground placement, and specialized routing. If you are migrating a design from a Pico to a third-party board, you must account for these form-factor standards.
| Feature | Raspberry Pi Pico / Pico W | Adafruit Feather RP2040 | SparkFun Thing Plus RP2040 |
|---|---|---|---|
| Form Factor | DIP-40 (Breadboard friendly) | Feather Standard (1.0" x 2.0") | Thing Plus / Qwiic Standard |
| Flash Memory | 2MB (Standard) / 4MB (W) | 8MB QSPI Flash | 16MB QSPI Flash |
| LiPo Charging | No (Requires external BMS/charger) | Yes (MCP73831, 100mA charge) | Yes (MCP73831, 450mA charge) |
| Specialized I2C | None (Standard headers) | Stemma QT (JST-SH 4-pin) | Qwiic (JST-SH 4-pin) |
| Default I2C0 Pins | GPIO4 (SDA) / GPIO5 (SCL) | GPIO24 (SDA) / GPIO25 (SCL) | GPIO6 (SDA) / GPIO7 (SCL) |
Notice the default I2C0 pins shift drastically between boards. The Adafruit Feather RP2040 pinout routes I2C to GPIO24/25 to accommodate the Stemma QT connector on the edge of the board, whereas the standard Pico uses GPIO4/5. If you copy-paste Arduino/C++ code from a Pico tutorial to a Feather without updating the Wire.setSDA() and Wire.setSCL() definitions, your I2C sensors will silently fail to initialize.
The 'Rows People Get Wrong' & Boot Strapping Rules
Even experienced embedded engineers trip over specific RP2040 hardware quirks. Here are the most common pinout misinterpretations and how to avoid them.
1. The GPIO29 (ADC3) Trap
On the Raspberry Pi Pico, GPIO29 is not a free-floating ADC pin. It is hardwired through a 200kΩ/100kΩ resistor divider to the VSYS line. Its intended purpose is to allow the microcontroller to read its own input voltage. If you wire an external analog sensor (like a potentiometer or NTC thermistor) to GPIO29, the internal voltage divider will skew your readings, and the sensor will backfeed the VSYS rail. Use GPIO26, 27, or 28 for external analog sensors.
2. Boot Pin Strapping (GPIO0 and GPIO1)
The RP2040 has no internal flash; it boots from the external QSPI chip. To enter the USB Mass Storage bootloader mode (so you can drag-and-drop a .uf2 file), GPIO0 must be pulled LOW while the chip resets. On the Pico, this is handled by the white 'BOOTSEL' button. If you are designing a custom PCB, you must include a pull-up resistor (typically 10kΩ) on GPIO0 and a tactile switch to ground. If you leave GPIO0 floating, the chip may randomly boot into USB mode or fail to execute your code entirely upon power-up.
3. ADC Noise and the 50mV Offset
The RP2040’s internal ADC is notoriously noisy and exhibits a DC offset of roughly 50mV out of the box. When measuring precision signals, do not rely on raw analogRead() values. Implement a software moving-average filter (minimum 16 samples) and calibrate the offset in your setup routine by reading the internal temperature sensor or a known ground reference to subtract the baseline error.
Safe Interpretation for Unmarked Clones & Worn Silkscreen
The market is flooded with unmarked, barebones RP2040 clone boards from overseas vendors, and well-used Picos often have their silkscreen rubbed off by repeated breadboarding. If you have a board with faded or missing pin markings, do not guess. Use these bench techniques to safely map the board before applying power.
- Find Ground First: Set your multimeter to continuity mode. Probe the metal shield of the USB connector. The USB shield is universally tied to the system ground (GND). Map all GND pins on the headers by finding continuity to the USB shield.
- Identify VBUS and 3V3: With the board powered via USB, switch your multimeter to DC Voltage. Measure against your known GND. The pin reading ~4.8V to 5.1V is VBUS. The pin reading exactly 3.3V is the 3V3(OUT) rail. Never assume the pin next to VBUS is GND; some clones rearrange the power header to optimize trace routing.
- Locate the Boot Pins: Visually trace the copper traces from the tactile reset and boot buttons on the PCB. The button closest to the USB connector almost always routes to GPIO0 (BOOT). The other routes to the
RUNpin (hardware reset). If the board lacks buttons, GPIO0 is typically broken out to a test pad near the flash chip. - Identify Pin 1: On standard DIP-40 Pico clones, Pin 1 (GPIO0) is located on the top-left when the USB connector is facing away from you. Look closely at the PCB pad with a magnifying glass; Pin 1 usually features a square copper pad instead of a round one, or has a tiny via placed immediately adjacent to it as a factory orientation marker.
By treating the silicon datasheet as the absolute source of truth and verifying your physical board's routing with a meter, you can safely integrate any RP2040 variant into your project without risking a short circuit or a bricked module.






