This website relies on WebUSB to communicate with microcontrollers. WebUSB is a somewhat niche technical standard which, as of now, is only supported by Chrome-based browsers.
On Windows, this website is fully compatible with RP2350-based boards (such as Raspberry Pi Pico 2). The flashing tool may not work properly with RP2040-based boards (Pico / Pico W).
I've never had any problems using the flashing tool on my Android phone. If you're having a different experience, please let me know.
On Linux, due to its security architecture, you may need apply the adjustments outlined below.
On my Ubuntu laptop I had to adjust USB device files access rights. This can be tricky, as those files are re-created every time you connect your Pico. There are two ways to do it: you can either make an one-off change, or you can set up udev rules in order for this to happen automatically. Skipping this step may leave you with your browser presenting an EACCES (access denied) error.
I suggest to take take a look at the README file included with picotool for information on how to configure the new udev rules. This may be the preferred way of dealing with the access problem.
Alternatively, In order to perform a one time file attribute change, you'd need to first obtain the USB device path of the newly plugged in Pico bootloader. The path will show up in
chrome://device-log after the access is denied (remember to refresh). Afterwards, adjust the attributes to your liking
with chmod 666 PATH
, or chown root:plugdev PATH
. You may need to manually copy the above device-log address into your browser's address bar.
This may not be enough, however. On Ubuntu, if your Chrome installation came from a snap package, it may be blocked from accessing the USB device files by an AppArmor policy, regardless of the device files' access attributes. In this case, you'd be getting an EPERM (permission denied) status. I did not find an easy workaround for this. Instead, I downloaded a Chrome deb package straight from its website.
You probably won't need to adjust the chrome://flags, but they're there in case you'll need to debug further.