Overview

The Raspberry Pi Pico is Raspberry Pi's first microcontroller board and the debut product built around the RP2040 — the organisation's own custom silicon. Launched in January 2021, it brought a capable dual-core ARM Cortex-M0+ microcontroller to market at approximately $4 USD, making it one of the most cost-effective platforms for embedded development available.

The RP2040 was designed entirely by Raspberry Pi and manufactured on a 40 nm process. It pairs two Cortex-M0+ cores running at up to 133 MHz with 264 KB of SRAM spread across six independent banks, allowing both cores and the DMA controller to operate with reduced bus contention. Flash memory is not on the chip itself — the Pico uses a 2 MB QSPI Flash device soldered separately, which is one reason the RP2040 can be used in modules with different Flash sizes.

The most distinctive feature of the RP2040 is its Programmable I/O (PIO) subsystem. Two PIO blocks each contain four state machines that execute compact assembly programs in hardware, entirely independent of the processor cores. This allows the Pico to implement nearly any clocked serial protocol — WS2812 NeoPixel control, stepper motor step generation, custom SPI and I2C variants, I2S audio, and more — purely in software without external protocol chips.

The board ships without pre-soldered headers. Users solder their own 0.1" male or female headers to suit their project. The Pico H variant ships with headers already soldered and adds a 3-pin SWD debug connector.

Key Features

  • RP2040 dual-core ARM Cortex-M0+ running up to 133 MHz — Raspberry Pi's own silicon
  • 2 MB QSPI Flash (off-chip), 264 KB SRAM (6 independent banks)
  • 26 user-accessible GPIO pins via 0.1" headers (30 total on the RP2040)
  • 3 × 12-bit ADC channels plus 1 internal temperature sensor ADC channel
  • Up to 16 PWM channels across 8 independent slices
  • 2 × PIO blocks with 4 state machines each — 8 total user-programmable state machines
  • 2 × I2C, 2 × SPI, 2 × UART
  • USB 1.1 with built-in controller (device and host mode)
  • Micro-USB power or VSYS pin (1.8–5.5 V); on-board 3.3 V switching regulator
  • On-board LED on GPIO 25
  • No Wi-Fi, no Bluetooth (see Pico W for wireless)
  • MicroPython, CircuitPython, C/C++ SDK, and Arduino framework supported
  • Compact 51 × 21 mm footprint, 3 g weight
  • ~$4 USD

Technical Specifications

Attribute Value
SKU SC0915
MCU RP2040 (dual-core ARM Cortex-M0+)
Clock Speed Up to 133 MHz
SRAM 264 KB (6 independent banks)
Flash 2 MB QSPI (off-chip)
GPIO (accessible) 26 (via 0.1" header)
GPIO (RP2040 total) 30
ADC 3 × 12-bit + 1 internal temperature sensor
PWM Channels Up to 16 (8 independent slices)
PIO 2 blocks × 4 state machines = 8 total
I2C 2
SPI 2
UART 2
USB USB 1.1 (device and host mode)
Wi-Fi None
Bluetooth None
On-board LED GPIO 25
Operating Voltage 1.8–5.5 V
Power Input Micro-USB or VSYS pin
On-board Regulator 3.3 V switching regulator
Headers Unpopulated (solder required)
Dimensions 51 × 21 mm
Weight 3 g
Release Year 2021
Price (approx.) ~$4 USD

Microcontroller

The Raspberry Pi Pico is built around the RP2040 — the first microcontroller chip designed in-house by Raspberry Pi. It represents a deliberate choice to move beyond using existing silicon and create a device optimised for the kinds of projects the Raspberry Pi community builds.

Dual-Core ARM Cortex-M0+

The RP2040 contains two ARM Cortex-M0+ cores. Each core operates independently and can be clocked at up to 133 MHz. Both cores share access to the same SRAM and peripherals but have independent execution paths, enabling true simultaneous computation.

In MicroPython, the _thread module provides access to Core 1. In the C/C++ SDK, multicore_launch_core1() starts an arbitrary function on Core 1. Typical use patterns place time-sensitive work (PWM generation, protocol handling) on Core 1 while Core 0 manages application logic.

PIO — Programmable I/O

PIO is the RP2040's most unique feature. Each of the two PIO blocks contains four state machines running a specialised instruction set (MOV, IN, OUT, PUSH, PULL, JMP, WAIT, IRQ, SET, NOP) at up to the system clock rate. PIO state machines run entirely in hardware, consuming no CPU cycles and adding no jitter.

PIO programs can implement:

  • WS2812 / NeoPixel LED strip control (tight timing requirements met deterministically)
  • Stepper motor pulse sequences
  • Custom SPI, I2C, UART variants with non-standard speeds or framing
  • I2S audio input and output
  • DMX512 lighting protocol
  • Rotary encoder reading
  • VGA or composite video generation (with careful timing)

PIO programs are written in PIO assembly and compiled into 32-instruction program memories at runtime, making the peripheral flexible and reusable across wildly different applications.

USB 1.1 Controller

The RP2040 includes a full-speed USB 1.1 controller supporting both device and host modes with no external transceiver required. In device mode the board can enumerate as a CDC serial port (providing the Python REPL over USB), a HID keyboard or mouse, or a USB mass-storage device. In host mode it can drive keyboards, mice, and other USB 1.1 devices.

The USB controller also powers the built-in UF2 bootloader: hold BOOTSEL while applying power, and the board presents as a USB mass-storage drive. Dropping a .uf2 firmware file onto that drive programs the Flash and reboots automatically.

SRAM Architecture

The 264 KB of SRAM is split into six independent banks connected via a crossbar switch. This means two different masters (e.g., Core 0 and Core 1, or Core 0 and DMA) can simultaneously access different banks without stalling. Stack and data for each core can be placed in separate banks to maximise throughput.

Getting Started

Requirements

  • Raspberry Pi Pico board
  • Micro-USB cable (data-capable, not charge-only)
  • Computer with USB port
  • Soldering iron and headers (if using GPIO — board ships unsoldered)

Installing MicroPython

  1. Download the Pico MicroPython .uf2 from https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html
  2. Hold the BOOTSEL button on the Pico while connecting the micro-USB cable to your computer
  3. Release BOOTSEL — the board appears as a USB drive named RPI-RP2
  4. Drag and drop the .uf2 file onto the drive
  5. The board reboots automatically and MicroPython is running
  6. Open Thonny IDE, select the Pico's serial port, and access the REPL

MicroPython Blink Example

The on-board LED on the Pico is directly connected to GPIO 25:

from machine import Pin import time led = Pin(25, Pin.OUT) while True: led.toggle() time.sleep(0.5)

Programming

MicroPython

MicroPython is the most popular language for the Pico. Thonny IDE provides a one-click installer and an integrated REPL for interactive development. The machine module exposes GPIO, PWM, ADC, I2C, SPI, UART, and Timer peripherals. The rp2 module provides access to PIO programming.

C/C++ SDK

The official Raspberry Pi Pico SDK (pico-sdk) is a CMake-based toolchain supporting all RP2040 hardware at the register level. It produces the smallest, fastest binaries and is the standard choice for production firmware. PIO programs are written in .pio files and compiled by the pioasm tool included in the SDK.

CircuitPython

Adafruit's CircuitPython port provides Python development with a different module structure (board, digitalio, analogio, busio). Files are edited directly on the board's USB mass-storage volume, making for a fast edit-save-run cycle.

Arduino

The community arduino-pico core by Earle Philhower adds full Arduino IDE support for the Pico. Most Arduino libraries targeting hardware-independent APIs work without modification. The core also exposes PIO through an rp2040 library.

Applications

  • Learning embedded programming (MicroPython and C)
  • Sensor data acquisition with ADC, I2C, and SPI sensors
  • PWM motor and servo control
  • WS2812 NeoPixel and LED matrix driving via PIO
  • USB HID devices — keyboards, gamepads, MIDI controllers
  • Data loggers writing to SPI Flash or SD cards
  • Audio synthesis and I2S interfaces via PIO
  • Low-cost industrial controller nodes
  • Robotics and autonomous vehicle controllers

Where to Buy

Equivalent Boards

Board Wireless Headers Notes
Raspberry Pi Pico W Wi-Fi + BLE 5.2 Unpopulated Adds CYW43439 wireless module; LED on GPIO expander
Raspberry Pi Pico 2 None (Pico 2W for wireless) Unpopulated RP2350; faster, more memory, RISC-V option
Arduino Nano RP2040 Connect Wi-Fi + BLE Pre-soldered RP2040 in Arduino Nano form factor with u-blox wireless

Notes

  • The on-board LED is on GPIO 25 and is directly driven by the RP2040 — unlike the Pico W, where the LED is connected through the CYW43439 GPIO expander.
  • The four GPIO pads on the underside of the PCB (GPIO 29 and the ADC reference pad among them) are not accessible from the standard 0.1" header.
  • The RP2040 has no internal Flash; all program storage is on the external QSPI Flash chip. The Flash is memory-mapped via XIP (execute-in-place) caching.
  • The board's 3.3 V switching regulator (RT6150) can supply up to 300 mA to external peripherals via the 3V3 pin.
  • Operating frequency can be configured in software from approximately 48 MHz up to 133 MHz (and beyond with overclocking, though stability is not guaranteed above 133 MHz).

Community

Revision History

Version Date Notes
v1.0 2026-06 Initial entry