picotool is Raspberry Pi's command-line tool for RP-series binaries and boards. The Pico VS Code extension manages the SDK tools for you; picotool can also be built from the raspberrypi/picotool repository.
Which device it can talk to
- By default: boards in BOOTSEL mode (the USB bootloader).
- With
-f/--force(picotool 1.1+): a board running a program built with the Pico SDK's USB stdio support. picotool resets it into the bootloader, runs the command and reboots it back into the application.-Fdoes the same but leaves it in the bootloader. - Many commands also work on files (ELF, UF2, BIN) with no device attached.
The commands you'll use most
picotool info -a # everything known about the connected board
picotool info firmware.uf2 # what's inside a file: name, version, build date, pins, ...
picotool load -v -x firmware.uf2 # flash, verify, then run it
picotool load -u -v -x fw.elf # skip unchanged sectors (faster re-flashing)
picotool reboot -u # reboot a running (forced) or BOOTSEL device into BOOTSEL
picotool reboot -c riscv # RP2350: reboot using the RISC-V cores (where possible)
picotool save firmware_backup.uf2 # read the program out of flash
Binary info: know what's on a board
The SDK embeds binary information (program name, description, version, build date, URL, features such as USB or UART stdio, and pin assignments) that picotool info reads back. Set it in your build (e.g. program name/version/URL) and you can identify any unlabelled board later.
RP2350 extras
picotool also covers RP2350 partition tables (partition info|create), OTP (otp get|set|load|dump|list|…), signing/hashing (seal) and encryption (encrypt). Treat OTP writes as permanent.
Tips
- On Linux, accessing the device without
sudoneeds udev rules; follow the picotool README/Getting Started guide for your OS. - If several boards are connected, filter with
--bus,--address,--vid,--pidor--ser.