Skip to content

PicoMite V6.03.02b2

Latest

Choose a tag to compare

@UKTailwind UKTailwind released this 03 Sep 14:05
· 3 commits to main since this release

Updated 4 September 2026. The uf2 files on this release have been replaced. The original b2 binaries ran the interpreter about 7% slower than b1 on every variant. The cause was newlib's strlen and strchr, which the interpreter calls on every statement: the USB stack change moved them to a flash address where each call missed the XIP cache. Both are now RAM-resident on every variant, and the reference benchmark is now faster than b1 (12757 on PICORP2350 against b1's 12545-12663). A related tidy-up restores the number-scanner lookup table on all variants except PICOMIN. If you downloaded b2 before this date, please download it again. Source: commits 2541ccb, 3093540 and 6b88df2.

Beta for testing. This is 6.03.02b2, continuing the 6.03.02 beta cycle. Where b1 was
about arrays, b2 is about USB host: the USB flash drive is now genuinely fast, several
devices behind a hub enumerate reliably on every kind of reset, and the six USB-host
variants each gain 16 KB of flash drive space. As before, please report anything odd —
this release replaces the USB host stack, so anything USB-related in an existing setup
is worth a second look.

Fast USB flash drive (C:)

Reads from a USB flash drive were limited to roughly 64 KB/s, which made the C: drive
close to unusable for anything large. The USB host stack has been moved to TinyUSB 0.21,
whose driver schedules bulk transfers properly, and sequential reads now run at several
hundred KB/s — up to around 490 KB/s in testing, comfortably faster than the SD card on
the same board. Streaming audio straight off the stick works without underruns:

Play MP3 "C:/music/track.mp3"

Writes to the stick are unchanged in this release (around 50 KB/s) and will be looked at
separately; reads are where the pain was.

Reliable multi-device enumeration behind a hub

With several devices on one hub — two keyboards, a touch panel and a flash drive in the
test rig — earlier builds could bring up only some of them, and which ones varied from
boot to boot. This traced to two things: a race in the RP2 USB host silicon (a single
shared handshake latch that an interrupt-endpoint poll can overwrite mid-transfer) and
the connect chime being played from inside the enumeration callback, stalling the bus
long enough to lose a marginal device. Both are addressed. All four devices now
enumerate on every software reset, hardware reset and power-on.

The connect and disconnect chimes are now played after enumeration completes rather
than from inside it, so a batch of devices arriving together produces one chime rather
than one per device.

16 KB more flash drive on the USB-host variants

The smaller host stack (together with a tidy-up in the number scanner) left every
USB-host build with room to spare, so the flash filesystem (A:) start has been moved
down by one 16 KB step on each of them, giving 16 KB more A: drive space:

PICOUSB   PICOUSBRP2350   VGAUSB   VGAUSBRP2350   HDMIUSB   HDMIBTH

Note that this moves the A: drive boundary on those variants, so as with any change to
FLASH_TARGET_OFFSET the A: drive contents are not preserved across the update — back up
anything on A: first.

Documentation

The user manual has been rebuilt to cover the b1 array additions: functions returning
arrays with parameter-derived dimensions, and MATH-filled results. The USB Flash Drive
section has also been updated to reflect the new transfer speeds.

For anyone building from source

  • The USB-host fixes live as patches on TinyUSB 0.21.0, kept in a sibling ../tinyusb-0.21
    tree. That tree is now reproducible from a fresh clone: run tinyusb-patches/setup-tinyusb
    once and it fetches the exact 0.21.0 release and applies the three patches. The README
    build instructions have been rewritten around this, and now state the Pico SDK version
    (2.3.0) correctly.
  • buildpicomite.bat now pins a Release build type. The shared build directory could
    previously inherit a Debug configuration from a VSCode session and silently produce
    larger, less-optimised images.