Raspberry Pi Pico vs Pico W vs Pico 2: RP2040 and RP2350 Explained
The Raspberry Pi Pico is not a small Linux computer like the Raspberry Pi 4 or Zero. It is a microcontroller board: it runs one program directly on the chip, starts in milliseconds, has no operating system and draws very little power. That makes it the right tool for reading sensors, driving motors, generating precise timing signals and building IoT nodes, while a full Raspberry Pi is better for cameras, desktops and web applications.
Four boards now share the same 40-pin footprint: Pico, Pico W, Pico 2 and Pico 2 W. They look almost identical but use different chips and radio options. This article explains what is inside each board, how the pins are numbered, and which one to pick before you start the tutorials that follow.
The Two Chips: RP2040 and RP2350
The original Pico and Pico W use the RP2040, the first microcontroller designed in-house by Raspberry Pi. It has two ARM Cortex-M0+ cores, 264 KB of on-chip SRAM and no internal flash; program code lives in a 2 MB QSPI flash chip on the board and is executed in place through a cache. The chip is officially rated at 133 MHz, and the MicroPython firmware runs it at 125 MHz by default.
The Pico 2 and Pico 2 W use the newer RP2350. It has two ARM Cortex-M33 cores with a hardware floating-point unit and DSP instructions, plus two Hazard3 RISC-V cores. At boot you choose which pair runs; you cannot mix one ARM and one RISC-V core in the same program image. It runs at 150 MHz, has 520 KB of SRAM, and the Pico 2 board carries 4 MB of flash. The RP2350 also adds security features such as ARM TrustZone, signed boot and OTP memory for keys.
Both chips have the feature that makes the Pico family special: PIO, programmable I/O. PIO blocks are tiny state machines that run their own nine-instruction assembly language and can bit-bang protocols such as WS2812 LEDs, VGA, extra UARTs or quadrature encoders without loading the CPU. The RP2040 has 2 PIO blocks with 4 state machines each (8 in total); the RP2350 has 3 blocks (12 state machines).
Side-by-Side Comparison
| Feature | Pico | Pico W | Pico 2 | Pico 2 W |
|---|---|---|---|---|
| Chip | RP2040 | RP2040 | RP2350 | RP2350 |
| CPU cores | 2 x Cortex-M0+ | 2 x Cortex-M0+ | 2 x Cortex-M33 or 2 x Hazard3 RISC-V | 2 x Cortex-M33 or 2 x Hazard3 RISC-V |
| Clock (default) | 125 MHz in MicroPython, 133 MHz rated | Same as Pico | 150 MHz | 150 MHz |
| SRAM | 264 KB | 264 KB | 520 KB | 520 KB |
| Board flash | 2 MB | 2 MB | 4 MB | 4 MB |
| PIO state machines | 8 | 8 | 12 | 12 |
| Wireless | None | 2.4 GHz Wi-Fi and Bluetooth (CYW43439) | None | 2.4 GHz Wi-Fi and Bluetooth (CYW43439) |
| Onboard LED | GP25 | Wireless chip GPIO, use "LED" | GP25 | Wireless chip GPIO, use "LED" |
All four boards share the same peripheral set at the pin level: 26 usable multi-function GPIO pins brought out to the header, 2 UARTs, 2 SPI controllers, 2 I2C controllers, 16 PWM channels, a USB 1.1 controller that can be device or host, and a 12-bit ADC with three channels on the header. The RP2350 adds a few extras such as more PWM slices and an HSTX high-speed serial output, but code written for the RP2040 pins carries over almost unchanged.
Understanding the Pinout
The most common beginner mistake is confusing physical pin numbers with GPIO numbers. Physical pins are numbered 1 to 40 around the board, starting at the top-left next to the USB connector and running down the left side, then up the right side. GPIO numbers (GP0 to GP28) are what you use in code. For example, physical pin 1 is GP0, but physical pin 3 is a ground pin, and GP25 is not on the header at all on the original Pico because it drives the onboard LED.
USB GP0 1 |o o| 40 VBUS GP1 2 |o o| 39 VSYS GND 3 |o o| 38 GND GP2 4 |o o| 37 3V3_EN GP3 5 |o o| 36 3V3(OUT) GP4 6 |o o| 35 ADC_VREF GP5 7 |o o| 34 GP28 / ADC2 GND 8 |o o| 33 AGND GP6 9 |o o| 32 GP27 / ADC1 GP7 10 |o o| 31 GP26 / ADC0 GP8 11 |o o| 30 RUN GP9 12 |o o| 29 GP22 GND 13 |o o| 28 GND GP10 14 |o o| 27 GP21 GP11 15 |o o| 26 GP20 GP12 16 |o o| 25 GP19 GP13 17 |o o| 24 GP18 GND 18 |o o| 23 GND GP14 19 |o o| 22 GP17 GP15 20 |o o| 21 GP16
- VBUS (pin 40) is the 5 V from the USB cable; useful to power 5 V modules while on USB.
- VSYS (pin 39) is the main input to the onboard regulator; you can feed roughly 1.8 V to 5.5 V here from batteries.
- 3V3(OUT) (pin 36) is the regulated 3.3 V output for sensors; keep the load modest.
- ADC_VREF and AGND (pins 35 and 33) are the analog reference and analog ground for the ADC.
Which Board Should You Buy?
For learning GPIO, PWM, ADC, I2C and motors, the plain Pico is enough and is the cheapest option. If your project needs to send data to a phone, a web dashboard or an MQTT broker, buy the Pico W or Pico 2 W; the wireless chip is on the board, so you do not need an ESP8266 module. Choose the Pico 2 family when you need more RAM, faster floating-point maths (for example filters or sensor fusion), more PIO state machines, or secure boot.
The "H" versions (Pico H, Pico WH and so on) come with headers already soldered, which is convenient for breadboard work.
Common Mistakes When Starting Out
- Using the physical pin number in code, for example writing
Pin(20)when the wire is on physical pin 20, which is actually GP15. - Expecting
Pin(25)to blink the LED on a Pico W. On the W boards the LED is wired to the wireless chip, so usePin("LED")in MicroPython. - Flashing Pico firmware onto a Pico 2 or the reverse. Each board needs its own UF2 file because the chips are different.
- Driving motors or relays straight from a GPIO pin. The pins can supply only a few milliamps; use a transistor or driver module.
Summary
The Pico family gives you a dual-core microcontroller, flexible PIO hardware and a clean 40-pin layout at a very low price. The RP2040 boards (Pico and Pico W) are mature and widely documented; the RP2350 boards (Pico 2 and Pico 2 W) add faster cores, double the RAM and more PIO. Learn the difference between physical pins and GPIO numbers, remember that everything is 3.3 V, and note where your board's LED is connected. In the next tutorial you will install MicroPython with Thonny and run your first program.