Pico W / Pico 2 W — the right UF2, BOOTSEL, and the on-board LED
Firmware targets differ three ways (pico_w / pico2_w / pico2), BOOTSEL works like every Pico, and the on-board LED is on the radio chip — code written for GP25 will not light it. Official sources for each fact.
Question this page answers: "How do I flash a Pico W or Pico 2 W, which UF2 do I download, and why won't my LED-blink code light the on-board LED?"
Step 1 — download the right UF2
The official documentation links four separate MicroPython builds; the W suffix is a different build, not a bonus feature of the same file. Each entry below is the official download page for that board — on the page, pick the latest stable `.uf2` under Releases:
- Pico: micropython.org/download/rp2-pico/
- Pico W: [micropython.org/download/rp2-pico-w/](https://micropython.org/download/rp2-pico-w/)
- Pico 2: micropython.org/download/RPI_PICO2/
- Pico 2 W: [micropython.org/download/RPI_PICO2_W/](https://micropython.org/download/RPI_PICO2_W/)
For C/C++ the SDK build target carries the same distinction: PICO_BOARD=pico_w or pico2_w — never pico/pico2. A non-W build has no radio support and the wrong LED wiring; the failure is quiet.
Step 2 — BOOTSEL, same as every Pico
Hold BOOTSEL while connecting USB; release when the board appears as a mass-storage device (RPI-RP2 on Pico W, RP2350 on Pico 2 W). Drag the UF2 onto the volume; the board reboots into your firmware. The BOOTSEL code lives in mask ROM — it cannot be overwritten, so the board cannot be permanently bricked through software.
Note the trap: the volume name identifies the generation (RP2040 vs RP2350), not the wireless variant — see Pico W vs non-W.
Step 3 — the LED: it is NOT on GP25
The single most common W-board surprise. Officially:
- On non-W boards the on-board LED connects to the MCU's GP25.
- On Pico W / Pico 2 W it connects to the radio chip (
WL_GPIO0); the SDK board headers define no `PICO_DEFAULT_LED_PIN` for these boards.
So a GP25 blink from a Pico tutorial compiles and runs — and nothing lights. The official way to drive the LED:
- MicroPython — the connectivity guide (RP-008257-DS, section 3.4) uses
Pin("LED", Pin.OUT): ```python from machine import Pin led = Pin("LED", Pin.OUT) led.toggle() ``` - C/C++ SDK — the official
pico-examplesblink builds both generations from one source: for W boards it initializes the CYW43 driver and callscyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, on); the plain-GPIO path (gpio_put) is compiled only for boards that definePICO_DEFAULT_LED_PIN.
Expected, and failure exits
| Step | Expected | If it fails |
|---|---|---|
| BOOTSEL + USB | volume RPI-RP2 (Pico W) / RP2350 (Pico 2 W) appears | charge-only cable — USB board-not-detected |
| Drop the W-specific UF2 | volume ejects, board reboots into MicroPython | re-check the download page name against the board name before re-flashing |
| Blink "the LED" | nothing on GP25 code — by design | the LED is on the radio chip; see Step 3 |
What this page cannot tell you
- Radio bring-up (Wi-Fi scans, connecting) — that is the connectivity guide's territory, and licence terms for the radio libraries are summarized on the board pages.
- Whether your particular board is a W at all — see Pico W vs non-W first if unsure.
Boards
- Raspberry Pi Pico W — full record: radio wiring claims, SWD position, licence.
- Raspberry Pi Pico 2 W — the RP2350 generation of the same board.
Sources
- Raspberry Pi Pico-series documentation (commit 21d772e7) — the four MicroPython UF2 links, BOOTSEL steps and volume names, LED-on-radio-chip layout wording, ROM/BOOTSEL statement.
- pico_w.h / pico2_w.h board headers (tag 2.3.1) — no
PICO_DEFAULT_LED_PIN;CYW43_WL_GPIO_LED_PIN 0;CYW43_WL_GPIO_SMPS_PIN 1. - Wi-Fi and Bluetooth connectivity on Pico W-series devices (RP-008257-DS), section 3.4 — the
Pin("LED", Pin.OUT)MicroPython form for the on-board LED. - pico-examples blink.c — the official two-path blink:
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, ...)for W boards,gpio_putfor boards withPICO_DEFAULT_LED_PIN. - Raspberry Pi Pico Python SDK (RP-008355) — official MicroPython reference for W boards.