Skip to content

Pico Computer 3 & 2 v0.17 (test)

Latest

Choose a tag to compare

@UKTailwind UKTailwind released this 02 Sep 08:09
· 5 commits to pico-computer-3 since this release

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 /usb as 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 new usbdrive module: usbdrive.Drive() is a block device speaking the machine.SDCard protocol (so vfs.mount works on it), with present(), info()(block_count, block_size, vid, pid) — and on_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.

  • 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 emulatorpc3emu-linux-x64.tar.gz rebuilt at v0.17; nothing emulator-side changed beyond the banner. As before: Linux, or Windows via WSL2 (INSTALL-WINDOWS.md inside 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 — /usb section covering the mount behaviour and the usbdrive module.

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.