Raspberry Pi · Dev board
Raspberry Pi Pico 2 (RP2350)
Pin-compatible successor to the Pico, with twice the RAM, a choice of Arm or RISC-V cores, and the security hardware the first one lacked. Same 40-pin layout, USB at the top.
- Logic level
- 3.3 V
- Package
- 2x20 castellated / 2.54 mm, 51 x 21 mm
1.Pinout diagram
Highlight a signalhover to preview, click to keep
Pins 1-20
Pins 21-40
Pin detail
Hover a pin for its mappings and gotchas. Click to keep it here.
- Logic level
- 3.3 V
- Package
- 2x20 castellated / 2.54 mm, 51 x 21 mm
Fig. 1. Raspberry Pi Pico 2 (RP2350), 2x20 castellated. Hover or tap a signal to light up every pin that carries it.
2.Watch out
- The header is the same as the Pico 1: same 40 pins, same positions, same GP numbers. A carrier board or a HAT built for a Pico takes a Pico 2 without changes.
- You pick the architecture at build time. The RP2350 carries two Cortex-M33 cores and two Hazard3 RISC-V cores on the same die, and the bootloader selects which pair runs. Only one pair at a time.
- 520 KB of SRAM against the Pico 1's 264 KB, 4 MB of flash against 2 MB, and 12 PIO state machines across three blocks against 8 across two.
- PWM slice numbering does not carry over. The RP2350 has 12 slices where the RP2040 had 8, so the slice and channel a given GPIO lands on differs above GP15. Let the SDK work it out rather than porting hard-coded slice numbers.
- Still 3.3 V and still not 5 V tolerant.
- Peripheral mappings are not fixed: each pin lists the SPI, I2C or UART instance it can reach and you choose in software. Two pins on one instance cannot serve the same role at once.
- ADC_VREF is a filtered 3.3 V reference and AGND is the analog return. Use those for analog work rather than a digital ground pin.
- The RP2350 A2 stepping has a documented errata on GPIO input latching when a pin is switched from output to input with a pull-down. If an input reads stuck high, check the errata before blaming your wiring.
- On the Pico 2 W the wireless chip takes GP23, GP24, GP25 and GP29 internally, exactly as on the Pico W. None of those are on the header anyway.
3.Register configuration
Turning a pin on the diagram into a configured pin.
Drive a pin and read one
Pico SDK
#include "pico/stdlib.h" #define LED 25 /* on-board LED, not on the header */ gpio_init(LED); gpio_set_dir(LED, GPIO_OUT); gpio_put(LED, 1); gpio_init(15); gpio_set_dir(15, GPIO_IN); gpio_pull_up(15); /* pulls are off until you ask */ if (!gpio_get(15)) { }gpio_init resets the pin to SIO and clears both pulls, so call it before set_dir, not after. On a Pico W the LED is on the wireless chip and GPIO 25 does nothing.
4.Full pin reference
Every pin, alias and mapping. This is the table that prints.
Table 1. Pin assignments.
| Pin | Name | Also called | Functions | Notes |
|---|---|---|---|---|
| 1 | GP0UARTI²CSPIPWM | - | UART0 TX, I2C0 SDA, SPI0 RX | |
| 2 | GP1UARTI²CSPIPWM | - | UART0 RX, I2C0 SCL, SPI0 CSn | |
| 3 | GND | - | Ground | |
| 4 | GP2I²CSPIPWMClock | - | I2C1 SDA, SPI0 SCK | |
| 5 | GP3I²CSPIPWM | - | I2C1 SCL, SPI0 TX | |
| 6 | GP4UARTI²CSPIPWM | - | UART1 TX, I2C0 SDA, SPI0 RX | |
| 7 | GP5UARTI²CSPIPWM | - | UART1 RX, I2C0 SCL, SPI0 CSn | |
| 8 | GND | - | Ground | |
| 9 | GP6I²CSPIPWMClock | - | I2C1 SDA, SPI0 SCK | |
| 10 | GP7I²CSPIPWM | - | I2C1 SCL, SPI0 TX | |
| 11 | GP8UARTI²CSPIPWM | - | UART1 TX, I2C0 SDA, SPI1 RX | |
| 12 | GP9UARTI²CSPIPWM | - | UART1 RX, I2C0 SCL, SPI1 CSn | |
| 13 | GND | - | Ground | |
| 14 | GP10I²CSPIPWMClock | - | I2C1 SDA, SPI1 SCK | |
| 15 | GP11I²CSPIPWM | - | I2C1 SCL, SPI1 TX | |
| 16 | GP12UARTI²CSPIPWM | - | UART0 TX, I2C0 SDA, SPI1 RX | |
| 17 | GP13UARTI²CSPIPWM | - | UART0 RX, I2C0 SCL, SPI1 CSn | |
| 18 | GND | - | Ground | |
| 19 | GP14I²CSPIPWMClock | - | I2C1 SDA, SPI1 SCK | |
| 20 | GP15I²CSPIPWM | - | I2C1 SCL, SPI1 TX | |
| 21 | GP16UARTI²CSPIPWM | - | UART0 TX, I2C0 SDA, SPI0 RX | |
| 22 | GP17UARTI²CSPIPWM | - | UART0 RX, I2C0 SCL, SPI0 CSn | |
| 23 | GND | - | Ground | |
| 24 | GP18I²CSPIPWMClock | - | I2C1 SDA, SPI0 SCK | |
| 25 | GP19I²CSPIPWM | - | I2C1 SCL, SPI0 TX | |
| 26 | GP20UARTI²CPWMClock | - | UART1 TX, I2C0 SDA, GPIN0 | |
| 27 | GP21UARTI²CPWMClock | - | UART1 RX, I2C0 SCL, GPOUT0 | |
| 28 | GND | - | Ground | |
| 29 | GP22PWMClock | - | GPIN1 | |
| 30 | RUN | RESET | Chip enable / reset | Pull low to reset. Wire a button here to RESET without unplugging USB. |
| 31 | GP26ADCI²CPWM | ADC0, A0 | ADC0, I2C1 SDA | |
| 32 | GP27ADCI²CPWM | ADC1, A1 | ADC1, I2C1 SCL | |
| 33 | AGND | - | Analog ground | Return for ADC and ADC_VREF. Keep analog returns off the digital GND pins. |
| 34 | GP28ADCPWM | ADC2, A2 | ADC2 | |
| 35 | ADC_VREF3.3 V | - | ADC reference | Filtered 3V3. Do not load it; it is a reference, not a rail. |
| 36 | 3V3(OUT)3.3 V | - | 3.3 V supply out | Up to ~300 mA for peripherals. |
| 37 | 3V3_EN | - | Regulator enable | Pulled high on board. Pull low to shut the 3V3 regulator down. |
| 38 | GND | - | Ground | |
| 39 | VSYS1.8-5.5 V | - | System supply in | Main input to the buck-boost regulator. Battery goes here, through a diode if USB may also be connected. |
| 40 | VBUS5 V | - | USB bus voltage | Straight from the micro-USB connector; floats when USB is unplugged. |
Primary sources
Found a wrong pin? The whole board is one file, data/boards/raspberry-pi-pico-2.json.