Raspberry Pi Pico


This target is in an early state and is under active development. Usability is not very polished, and many features/configuration options that work in upstream Pi Pico CMake build have not yet been ported to the GN build.


To use this target, Pigweed must be set up to build against the Raspberry Pi Pico SDK. This can be downloaded via pw package, and then the build must be manually configured to point to the location of the downloaded SDK.

pw package install pico_sdk

gn args out
  # Add these lines, replacing ${PW_ROOT} with the path to the location that
  # Pigweed is checked out at.
  PICO_SRC_DIR = "${PW_ROOT}/.environment/packages/pico_sdk"


The Pi Pico is currently configured to output logs and test results over UART via GPIO 1 and 2 (TX and RX, respectively) at a baud rate of 115200. Because of this, you’ll need a USB TTL adapter to communicate with the Pi Pico.

Once the pico SDK is configured, the Pi Pico will build as part of the default GN build:

ninja -C out

Pigweed’s build will produce ELF files for each unit test built for the Pi Pico. While ELF files can be flashed to a Pi Pico via SWD, it’s slightly easier to use the Pi Pico’s bootloader to flash the firmware as a UF2 file.

Pigweed currently does not yet build/provide the elf2uf2 utility used to convert ELF files to UF2 files. This tool can be built from within the Pi Pico SDK with the following command:

mkdir build && cd build && cmake -G Ninja ../ && ninja
# Copy the tool so it's visible in your PATH.
cp elf2uf2/elf2uf2 $HOME/bin/elf2uf2


Flashing the Pi Pico is as easy as 1-2-3:

  1. Create a UF2 file from an ELF file using elf2uf2.

  2. While holding the button on the Pi Pico, connect the Pico to your computer via the micro USB port.

  3. Copy the UF2 to the RPI-RP2 volume that enumerated when you connected the Pico.