Raspberry Pi — Pico
Raspberry Pi Pico — Introduction
The Raspberry Pi Pico is a low-cost, high-performance microcontroller board built around the RP2040 chip (Pico / Pico W) and the newer RP2350 chip (Pico 2 / Pico 2 W). Unlike the Raspberry Pi SBC, the Pico is a microcontroller — it runs bare-metal code, not Linux.
Pico vs. Pico 2
| Feature | Raspberry Pi Pico (RP2040) | Raspberry Pi Pico 2 (RP2350) |
|---|---|---|
| Chip | RP2040 | RP2350 |
| CPU Cores | 2× Cortex-M0+ at 133 MHz | 2× Cortex-M33 at 150 MHz (+ 2 RISC-V) |
| RAM | 264 KB SRAM | 520 KB SRAM |
| Flash | 2 MB (external) | 4 MB (external) |
| USB | USB 1.1 (device + host) | USB 1.1 (device + host) |
| GPIO | 26 multi-function pins | 26 multi-function pins |
| PIO | 2× PIO state machines | 3× PIO state machines |
| Security | None | TrustZone, secure boot |
| Price | ~$4 | ~$5 |
For Analog Data workshops, either board works. If you have a Pico W or Pico 2 W, you also get built-in Wi-Fi (CYW43439 chip).
Development Options
You have two main choices for developing on the Pico:
Option 1: MicroPython
- Language: Python (subset)
- Setup: Drag-and-drop firmware, use Thonny IDE or
mpremote - Best for: Rapid prototyping, beginners, scripting
- Guide: MicroPython on Pico →
Option 2: C/C++ SDK
- Language: C or C++
- Setup: CMake, arm-none-eabi-gcc, VS Code extension
- Best for: Performance-critical apps, custom hardware drivers, production
- Guide: C/C++ SDK Setup →
The RP2040 / RP2350 Architecture
What makes the Pico special:
PIO (Programmable I/O)
A unique feature — 8 tiny state machines that implement custom hardware protocols in software. PIO can implement WS2812 LED control, custom SPI/I2C/UART, even DVI video output — all without using the main CPU.
Dual-Core
Both cores (Cortex-M0+ on RP2040, Cortex-M33 on RP2350) can run code simultaneously. You can run your main application on Core 0 and a time-critical task (e.g., sensor reading) on Core 1.
USB in Firmware
The Pico can act as a USB device (e.g., appear as a keyboard, mouse, MIDI device, CDC serial port) or a USB host — all implemented in software using its USB hardware.
Pinout Reference
The Pico has 40 pins total:
RP2040 / RP2350
┌─────────────────────┐
UART0 TX │ GP0 VBUS │ USB Power (5V)
UART0 RX │ GP1 VSYS │ Power In (1.8–5.5V)
│ GND GND │
SPI0 SCK │ GP2 3V3EN │ 3.3V Enable
SPI0 TX │ GP3 3V3 │ 3.3V Output
SPI0 RX │ GP4 ADC_REF│
SPI0 CSn │ GP5 GP28 │ ADC2
│ GND GND │
I2C0 SDA │ GP6 GP27 │ ADC1 / I2C1 SCL
I2C0 SCL │ GP7 GP26 │ ADC0 / I2C1 SDA
│ GP8 RUN │ Reset
│ GP9 GP22 │
│ GND GND │
│ GP10 GP21 │
│ GP11 GP20 │
│ GP12 GP19 │ SPI0 TX
│ GP13 GP18 │ SPI0 SCK
│ GND GND │
│ GP14 GP17 │ SPI0 CSn
│ GP15 GP16 │ SPI0 RX
└─────────────────────┘
LED on GP25 (built-in)
Entering BOOTSEL Mode
To flash new firmware (either MicroPython or C/C++), you need to put the Pico into BOOTSEL mode:
- Disconnect the Pico from USB
- Hold the BOOTSEL button (white button on top of the board)
- Connect the USB cable while holding BOOTSEL
- Release BOOTSEL once connected
The Pico will appear as a USB mass storage device called RPI-RP2 (or RP2350 for Pico 2) on your computer.
You can now drag-and-drop a .uf2 firmware file onto this drive.

