Firmware and manual for the Pico Computer 3 and the Pico Computer 2 (RP2350B).
New in v0.17
-
USB flash drives. Plug a FAT-formatted stick into the hub and it mounts at
/usbas soon as it is recognised (USB drive mounted at /usb (59153 MB)), and unmounts cleanly when pulled.ls("/usb"),open("/usb/...")and the rest of the shell commands treat it exactly like/sd; reads measured on the machine at about 1.1 MB/s. For programs that want the raw device there is a newusbdrivemodule:usbdrive.Drive()is a block device speaking themachine.SDCardprotocol (sovfs.mountworks on it), withpresent(),info()—(block_count, block_size, vid, pid)— andon_change(fn)beside it. The manual's SD-card section has the details. -
Three devices behind the hub. A keyboard, a flash drive and a touch panel all plugged in at once now all enumerate, every boot, including from power-off; v0.16's stack could quietly lose all but one of them. The cause was three faults in TinyUSB 0.21's host stack, found on this machine and filed upstream (tinyusb#3874, #3875, #3876):
- a timed-out control transfer was failed with its buffer flag still set, so the retry panicked with
buf_ctrl already available; - a control read longer than two packets — a touch panel's 525-byte HID report descriptor, or a gaming keyboard's — hit the same panic through double buffering; long control transfers are single-buffered now;
- a freshly reset device got the spec-minimum 10 ms to start answering, and one that missed the window was abandoned for good; it now gets 100 ms, and the host's event queue is four times deeper so a burst of completions at power-up cannot drop one.
Proven over eight straight boots with all three devices attached.
- a timed-out control transfer was failed with its buffer flag still set, so the retry panicked with
-
TinyUSB 0.21 — the version upstream v1.29.0 actually pins. v0.16 stayed on 0.20.0 to keep one USB stack across the machine's environments; the RP2350 host rewrite in 0.21 plus the fixes above made the move worth it, and the Fuzix port has made the same jump — its updated v0.26 kernel carries the same three fixes — so the two environments built from this workbench move together. (The PicoMite MMBasic firmware remains on 0.20.)
-
PC emulator —
pc3emu-linux-x64.tar.gzrebuilt at v0.17; nothing emulator-side changed beyond the banner. As before: Linux, or Windows via WSL2 (INSTALL-WINDOWS.mdinside the tarball); the prebuilt binary needs glibc 2.43 / Ubuntu 26.04+, older systems build from source in a few minutes. -
Manual: a new USB flash drive —
/usbsection covering the mount behaviour and theusbdrivemodule.
Updated firmware (3 September). The firmware.uf2 on this page was rebuilt with a set of USB host-driver hardening changes validated against the PicoMite's own TinyUSB 0.21 work on this hardware — two keyboards, a touch panel and a flash drive behind one hub. The root cause of the marginal-enumeration failures is a documented silicon race (the RP2 SIE keeps one handshake-result latch shared between the control endpoint and the interrupt-endpoint poller); the fix tolerates it above the driver rather than rewriting the driver. Devices behind the hub now come up on every reset kind — software, hardware and cold power-on — where a burst of them powering up together could previously leave all but one behind. If your setup already worked, nothing changes; if a multi-device hub was unreliable, refresh the firmware.
Nothing changes in how the machine behaves unless you plug a flash drive in. No API moved, no setting is lost, and your files, keyboard layout, screen mode and Num Lock preferences all survive the update.
Flashing
USB HUB switch to DISABLE → connect the Prog port to a PC → hold BOOT, click RESET → drag firmware.uf2 onto the drive that appears → switch back to ENABLE. Your files and settings survive.