Cannot flash klipper on Pico 2 (2350)

Basic Information:

Printer Model: Irrelevant?
MCU / Printerboard: Raspberry Pi Pico 2 (RP2350)
Host / SBC: Raspberry Pi 4B
klippy.log: Irrelevant

Describe your issue:

I’m trying to flash Klipper on a Raspberry Pi Pico 2 with a RP2350.

In make menuconfig my settings are as follows:

  • Micro-controller architecture: Raspberry Pi RP2040/RP235x
  • Processor model: rp2350
  • Bootloader offset: No bootloader
  • Communication Interface: USBSERIAL

Using make, the klipper.ulf file is created.

When I plug in my Pico 2, the device shows up in /dev as sdb1. I can mount it, and see two files:

user@3dprinter:~/klipper $ sudo mount /dev/sdb1 /mnt/pico
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
user@3dprinter:~/klipper $ ls /mnt/pico
INDEX.HTM  INFO_UF2.TXT

I then copy the file onto it:

user@3dprinter:~/klipper $ sudo cp ~/klipper/out/klipper.uf2 /mnt/pico
user@3dprinter:~/klipper $ ls /mnt/pico
INDEX.HTM  INFO_UF2.TXT  klipper.uf2

I then umount sdb1, at which point I expect to start seeing the Pico 2’s Klipper instance showing up on /dev/serial/by-id, but:

user@3dprinter:~/klipper $ sudo umount /mnt/pico
user@3dprinter:~/klipper $ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 < this is my Ender mainboard, not the Pico

But, I can then see sdb1 again, and when I mount it again:

user@3dprinter:~/klipper $ sudo mount /dev/sdb1 /mnt/pico
mount: (hint) your fstab has been modified, but systemd still uses
       the old version; use 'systemctl daemon-reload' to reload.
user@3dprinter:~/klipper $ ls /mnt/pico
INDEX.HTM  INFO_UF2.TXT

It looks like it’s back into bootloader mode. I didn’t press the button, or unplugged it.

I plugged it into my Windows machine, and was able to install Micropython on it through Thonny, so I’m assuming the Pico is good. I also tried copying klipper.uf2 onto the Pico while it was connected to the Windows machine, to no avail. I’ve also tried multiple USB cables just to make sure.

I’m assuming it’s supported, given the option in make menuconfig to specify it… so what am I doing wrong?

Put the 2350 in boot mode and try with:

make flash FLASH_DEVICE=2e8a:000f

then unplug and replug.

Unfortunately, the rpi foundation made changes to their uf2 file format with the rp2350 release that Klipper does not currently support.

One can flash Klipper to an rp2350 chip using Klipper’s make flash tool (as Sineos mentions above). One can flash Klipper to an rp2350 chip using the official picotool utility.

One can not flash Klipper to an rp2350 chip by copying the uf2 file to the usb drive created when the rp2350 in its bootrom mode. It does not work - use one of the two above methods.

-Kevin

Thanks!

For reference, you can query what the device’s identifier is by running lsusb:

user@3dprinter:~/klipper $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 012: ID 2e8a:000f Raspberry Pi RP2350 Boot
Bus 001 Device 003: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.