Warning
This documentation is actively being updated as the project evolves and may not be complete in all areas.
PiPicoFlasher Driver¶
jumpstarter-driver-pi-pico flashes Raspberry Pi Pico (RP2040), Pico W, and Pico 2 (RP2350) by copying a UF2 file onto the BOOTSEL USB mass-storage volume.
The driver supports two methods for entering BOOTSEL mode programmatically:
GPIO reset — wire the Pico’s BOOTSEL pad and RUN pin to host GPIO lines.
1200-baud serial touch — uses a USB CDC serial child. Only works when the running firmware implements the convention (Pico SDK
pico_stdio_usb, CircuitPython, Arduino).
Configuration¶
Serial-based BOOTSEL entry¶
export:
storage:
type: jumpstarter_driver_pi_pico.driver.PiPicoFlasher
config: {}
children:
serial:
ref: serial
serial:
type: jumpstarter_driver_pyserial.driver.PySerial
config:
url: /dev/ttyACM0
baudrate: 115200
GPIO-based BOOTSEL entry¶
When the firmware doesn’t support the 1200-baud reset, you can wire two host GPIO pins to the Pico:
Host GPIO |
Pico pin |
Notes |
|---|---|---|
Pin A |
BOOTSEL (TP6 on Pico) |
Pull low to select bootloader on reset |
Pin B |
RUN |
Pull low to reset the RP2040/RP2350 |
Both GPIO outputs should use open-drain drive and active-low polarity so
that on() pulls the line LOW and off() releases to high-impedance (the
Pico’s internal pull-ups keep the lines high when released).
export:
storage:
type: jumpstarter_driver_pi_pico.driver.PiPicoFlasher
config: {}
children:
serial:
ref: serial
bootsel:
ref: bootsel
run:
ref: run
serial:
type: jumpstarter_driver_pyserial.driver.PySerial
config:
url: /dev/ttyACM0
baudrate: 115200
bootsel:
type: jumpstarter_driver_gpiod.driver.DigitalOutput
config:
device: "/dev/gpiochip4" # RPi5 GPIO chip — adjust for your host
line: 17 # GPIO pin wired to BOOTSEL
drive: open_drain
active_low: true
initial_value: inactive
run:
type: jumpstarter_driver_gpiod.driver.DigitalOutput
config:
device: "/dev/gpiochip4"
line: 27 # GPIO pin wired to RUN
drive: open_drain
active_low: true
initial_value: inactive
When both GPIO and serial children are present, GPIO reset is preferred.
Shell commands¶
j storage flash ...— flash a UF2 file (auto-enters BOOTSEL if needed)j storage bootloader— request BOOTSEL mode without flashingj serial ...— USB CDC console (when serial child is configured)
API¶
flash(source, target=None)— Copies a UF2 from a Jumpstarter resource to the BOOTSEL volume.targetis the destination filename (defaultFirmware.uf2).enter_bootloader()— Enters BOOTSEL mode via GPIO reset or 1200-baud serial touch.bootloader_info()— ParsesINFO_UF2.TXTfrom the mounted volume.dump— Not supported over UF2 mass storage.