Getting started with the Raspberry Pi Pico 2
Applies to: the plain Raspberry Pi Pico 2 (RP2350, 4 MB flash, no wireless). Pico 2 W adds wireless and has its own firmware file — it is out of scope here. First-generation Pico owner? Use the Pico getting-started guide instead.
The identity check
The Pico 2 is the second-generation board: RP2350, 4 MB flash, micro-USB, the same 40-pin DIP outline as the Pico. The BOOTSEL drag-and-drop mechanics are identical to the first generation — what changes is every firmware file and one name on the drive, so the two generations’ guides are separate pages.
| Pico | Pico 2 | |
|---|---|---|
| Chip | RP2040 | RP2350 |
| BOOTSEL volume | RPI-RP2 | RP2350 |
| MicroPython file | rp2-pico-latest.uf2 | RPI_PICO2-latest.uf2 |
| C/C++ board target | PICO_BOARD=pico (default) | PICO_BOARD=pico2 |
Confirm the board itself first — plain Pico or Pico 2, and W or not, from the model and silkscreen. The BOOTSEL volume is a chip-generation clue, not a full board identification: RPI-RP2 points to RP2040, RP2350 to RP2350. Each firmware file above is built for one generation’s chip, so the volume tells you which guide’s file to drag — it does not promise that a wrong-generation file will be accepted or run. For what else changed between the generations, see Pico vs Pico 2.
Pick a language first
Same two official paths as the Pico, and the choice changes which file you drag:
| Path | You drag | You get |
|---|---|---|
| MicroPython | the Pico 2 .uf2 from micropython.org | an interpreter; you write Python over USB serial (REPL) |
| C/C++ SDK | your own compiled .uf2 | a bare-metal binary; no interpreter on the board |
MicroPython: drag, drop, REPL
From the official drag-and-drop guide:
- Push and hold BOOTSEL, connect USB to the computer, release BOOTSEL when the board appears as a mass-storage device called RP2350.
- Drag the Pico 2 MicroPython UF2 onto that volume. The board reboots — you are now running MicroPython.
- Access the REPL through USB serial.
Expected, then verified: with the correct firmware for this board, a drive literally named RP2350 appears and disappears after the drag — the official guide describes that reboot as the point where MicroPython is running. The disappearance itself is the expected flow, not proof of a working setup; verification is the next step — connect over USB serial and enter the MicroPython REPL. If the volume never appears, or it vanished but no serial port shows up, the USB board-not-detected checklist is the continuation.
C/C++ SDK: same flow, PICO_BOARD=pico2
The official quick-start steps are the same as for the Pico (CMake, Arm cross-compiler, pico_sdk_import.cmake, build a hello_world). One thing changes on the Pico 2: pass -DPICO_BOARD=pico2 to CMake — per the official examples README, that automatically selects PICO_PLATFORM=rp2350 and the board’s default pin configuration.
Two stdout expectations from the official sources, before you wonder where your prints went:
- Default stdout is UART, not USB. The quick-start’s
hello_worldcallssetup_default_uart(); on the Pico 2 the SDK board header defaults UART0 to GP0 (TX) / GP1 (RX). Without a serial adapter you will see nothing. - The USB route is a different example.
hello_world/usbenables USB stdio and disables UART stdio (pico_enable_stdio_usb 1,pico_enable_stdio_uart 0, verbatim in that CMakeLists.txt); if the SDK’s TinyUSB submodule is not initialized, that example’s build is skipped with an explicit CMake message. Building it is the official path — this site has not built or run it.
What this page cannot tell you
- We did not run these steps on hardware here. The flow is transcribed from the pinned official documents below; no MCUID device bring-up receipt exists for it.
- Which MicroPython build you got — the download link tracks the latest release; this page does not pin a MicroPython version number or checksum.
- Pico 2 W wireless setup — a different firmware file (
RPI_PICO2_W) and a separate connectivity document; not covered here. - Windows/macOS step-by-step — the official quick-start and books are the source of truth for toolchain install details.
Sources
- Drag-and-drop MicroPython — Pico 2 UF2 link, RP2350 volume name, reboot and REPL behavior (commit
21d772e7) - C/C++ SDK quick-start — default UART stdout,
-DPICO_BOARD=board selection (commit21d772e7) - pico-examples README — the board-target note:
-DPICO_BOARD=pico2auto-selectsPICO_PLATFORM=rp2350(commit0d62f75b) - hello_world/usb/CMakeLists.txt — the stdio flags and the TinyUSB skip condition, in the file that carries them (commit
0d62f75b) - pico-sdk pico2.h board header —
PICO_PLATFORM rp2350, default UART0 GP0/1 (commit079c6f39) - MCUID data record: Raspberry Pi Pico 2 — RP2350A, 4 MB flash, header mapping with fixed sources