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:

  1. GPIO reset — wire the Pico’s BOOTSEL pad and RUN pin to host GPIO lines.

  2. 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 flashing

  • j 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. target is the destination filename (default Firmware.uf2).

  • enter_bootloader() — Enters BOOTSEL mode via GPIO reset or 1200-baud serial touch.

  • bootloader_info() — Parses INFO_UF2.TXT from the mounted volume.

  • dump — Not supported over UF2 mass storage.