The Raspberry Pi Pico 2 W features 26 accessible multi-function GPIOs (GP0–GP22, GP26–GP28), 3 dedicated ADC channels, and 4 hardware-reserved pins dedicated to the onboard Infineon CYW43439 WiFi/Bluetooth module. Unlike the original Pico W based on the RP2040, the Pico 2 W utilizes the dual-core RP2350 (Arm Cortex-M33 / RISC-V), which introduces new power-routing behaviors and expanded peripheral mappings. Below is the direct reference you need to wire your next project without shorting the wireless SPI bus or frying the ADC.
The Complete Raspberry Pi Pico 2 W Pinout Reference Table
This table maps the logical GPIO names used in the C/C++ SDK and MicroPython to their primary and alternate functions. Physical pin numbers (1-40) follow the standard DIP footprint, starting from the bottom-left square pad when the micro-USB port is facing upward.
| Logical Pin | Primary Function | Alternate / Peripheral Functions | W-Module Status |
|---|---|---|---|
| GP0 - GP3 | General I/O | UART0, I2C0, SPI0, PWM | Available |
| GP4 - GP5 | General I/O | I2C0 (SDA/SCL default), SPI0 | Available |
| GP6 - GP9 | General I/O | I2C1, SPI0, UART1, PWM | Available |
| GP10 - GP13 | General I/O | SPI1 (default mapping), UART1 | Available |
| GP14 - GP15 | General I/O | I2C1, SPI1, PWM | Available |
| GP16 - GP19 | General I/O | SPI0 (alternate), UART0, I2C0 | Available |
| GP20 - GP22 | General I/O | I2C0, SPI0, PWM | Available |
| GP23 | Wireless Control | WL_ON (Wireless chip enable) | Reserved |
| GP24 | Wireless SPI | SPI MISO to CYW43439 | Reserved |
| GP25 | Wireless SPI | SPI CSn to CYW43439 | Reserved |
| GP26 (ADC0) | Analog / GPIO | I2C1 SDA, SPI1 SCK | Available |
| GP27 (ADC1) | Analog / GPIO | I2C1 SCL, SPI1 TX | Available |
| GP28 (ADC2) | Analog / GPIO | SPI1 RX, PWM | Available |
| GP29 (ADC3) | Wireless VREF | ADC3 / WL_VREF (1.1V nominal) | Reserved |
Reserved Pins and 'Rows People Get Wrong'
When migrating from the standard Pico 2 or the older Pico 1 W, developers consistently trip over three specific hardware traps on the Pico 2 W.
1. The GP29 / ADC3 VREF Trap
On a standard Pico 2, GP29 functions as ADC3. On the Pico 2 W, GP29 is hardwired to the CYW43439 wireless chip's internal voltage reference. If you attempt to read an external analog sensor on GP29, your readings will clamp around 1.1V to 1.2V regardless of the actual input voltage. Rule: Never use GP29 for external analog inputs on the W variant; stick to GP26, GP27, and GP28.
2. The Onboard LED is Not a Standard GPIO
On the original non-W Pico, the green LED was on GP25. On both the Pico 1 W and Pico 2 W, the LED is physically routed through the Infineon wireless chip (WL_GPIO0), not the main RP2350. You cannot toggle it with a standard machine.Pin(25) call in MicroPython. You must initialize the wireless driver first:
import network
import machine
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Toggle LED via the cyw43 driver wrapper
wlan.active(True) # LED usually blinks during active WiFi
3. Backfeeding VSYS vs VBUS
If you are powering the Pico 2 W from an external 5V battery while simultaneously plugging in USB for serial debugging, do not wire 5V into VSYS. The board lacks an ideal diode between VBUS and VSYS. Backfeeding 5V into VSYS while USB is connected will cause current to flow backward through the RT6154 regulator, potentially destroying it. Always use VBUS if you want the board to OR the USB and external power safely via the onboard Schottky diode.
Identifying Pins When Silk Screen Markings Are Faded or Missing
In harsh environments or after rework, the white silk screen on the Pico 2 W can wear off. If you need to identify pins safely without guessing:
- Locate Pin 1: Hold the board with the micro-USB port pointing away from you (up). Pin 1 is the bottom-left corner. It is physically distinct: it has a square copper pad instead of the circular plated through-holes used for all other pins.
- Verify Grounds: Set your multimeter to continuity mode. Probe the outer metal shield of the micro-USB port (this is tied to system GND). Pins 3, 8, 13, 18, 23, 28, 33, and 38 should all beep continuous.
- Identify 3V3(OUT): With the board powered via USB, measure DC voltage relative to the USB shield. Pin 36 (right side, 5th pin down from the top) will read exactly 3.28V to 3.32V.
- Find the Reserved SPI Bus: If you need to confirm the wireless SPI lines, GP24 and GP25 will show a slight forward-bias diode drop (approx 0.4V to 0.6V) when measured from GND with the red probe on the pin, due to the ESD protection diodes on the Infineon chip inputs.
Regional Module Variants and SDK Naming Standards
While the physical copper pinout of the Pico 2 W is identical globally, the internal RF module and software standards vary by region and framework.
Hardware Regulatory Variants
Raspberry Pi manufactures the Pico 2 W with region-specific RF certifications to comply with local spectrum laws. You may see different markings on the metal RF can:
- FCC / IC: US and Canada. Firmware defaults to FCC transmit power limits.
- CE / UKCA: Europe and UK. ETSI power limits apply.
- MIC / SRRC: Japan and China. Specific channel restrictions apply (e.g., channels 12-13 behavior).
Practical Impact: The pinout does not change, but you must set the correct country code in your firmware (e.g., wlan.config(country='US') in MicroPython) to unlock the correct WiFi channels and legally comply with local RF emission standards.
Framework Naming Standards (C SDK vs MicroPython)
The RP2350 introduces a new Hardware Abstraction Layer (HAL). When referencing pinouts in code:
- Pico C/C++ SDK: Uses raw integer definitions.
#define LED_PIN CYW43_WL_GPIO_LED_PIN. I2C0 SDA is explicitly mapped viai2c_init(i2c0, 100 * 1000)followed bygpio_set_function(4, GPIO_FUNC_I2C). - MicroPython: Uses string or integer aliases.
machine.Pin('LED')automatically resolves to the wireless chip's LED pin on the W variant. I2C is initialized asmachine.I2C(0, sda=machine.Pin(4), scl=machine.Pin(5)).
Decision Path: Which Interface and Pins Should You Use?
Use this decision tree to select the optimal pins for your peripheral. This terminates in concrete pin picks based on the RP2350's internal PIO and peripheral routing matrices, minimizing trace crossovers on your custom PCB or breadboard.
| If your project needs... | Then choose this interface... | Concrete Pin Pick (GP#) | Why this is the optimal pick |
|---|---|---|---|
| I2C Sensors (BME280, MPU6050) | I2C0 (Default) | GP4 (SDA), GP5 (SCL) | Matches the default silicon routing for I2C0; avoids internal pinmux swapping. |
| SPI Display (ILI9341, ST7789) | SPI1 (Default) | GP10 (SCK), GP11 (TX), GP12 (RX), GP13 (CS) | Leaves SPI0 (GP16-19) free for high-speed DMA or secondary storage. |
| UART GPS / Cellular Modem | UART0 (Default) | GP0 (TX), GP1 (RX) | Standard debug/primary UART mapping; hardware flow control available on GP2/GP3. |
| High-Freq PWM (Motor Control) | PWM Slice 0-3 | GP0-GP7 | Maps cleanly to PWM slices 0-3 without overlapping the ADC or wireless SPI pins. |
| Analog Voltage Reading | ADC0, ADC1, ADC2 | GP26, GP27, GP28 | Dedicated ADC channels. Never use GP29 on the W variant. |
| Custom Protocol (WS2812B LEDs) | PIO (Programmable I/O) | GP14 or GP15 | Keeps PIO state machines isolated from standard hardware SPI/I2C buses. |
For the most current silicon errata and absolute maximum ratings, always cross-reference your physical board revision with the official Raspberry Pi Pico 2 documentation and the MicroPython RP2 quick reference.






