PicoMite V6.03.02b3
Updated 7 September 2026. The user manual PDF attached to this release has been replaced. It now states that a constant created with CONST inside a subroutine or function is local to that routine, and cross-references the existing description of functions that return a whole array. The firmware binaries are unchanged - only re-download the manual.
Beta for testing. A bug-fix beta on top of V6.03.02b2, fixing two faults reported against the b2 USB-host builds. Please try it against your existing programs and report anything that behaves differently — particularly around the file manager and USB devices.
Fixed: file manager freezing when copying directories
Copying several directories from a USB flash drive to A: could freeze the firmware or drop out with *** FAULT PC=.... Listing directories was fine, and copying small individual files usually worked, which made it look like a file-system or USB problem. It was neither.
cmd_fm() had a 5824-byte stack frame — 72% of the whole 8 KB core 0 stack — and called the copy machinery from inside it. A recursive directory copy pushed the stack past its limit and into the C heap and static data below. Whatever happened to be sitting there got overwritten, which is why the symptoms looked so unrelated to each other: sometimes an out-of-memory abort, and on at least one board a bogus "Hardware limit switch trip - emergency stop" from the stepper module — on hardware with no stepper connected at all.
The panel cache's type index (1 KB per panel, 2 KB for the pair) has moved to the MMBasic heap, cutting the frame to 3796 bytes and roughly doubling the stack left for the copy itself.
Fixed: recoverable USB errors no longer kill the interpreter
Three recoverable conditions in the RP2 USB host driver — a data-toggle mismatch and two "buffer already available" cases — were handled with a hard panic(). Because PicoMite doesn't route the SDK's console output anywhere, the panic text was discarded and all that reached you was a bare *** FAULT PC=... line with no indication of what happened. On RP2040 it was even less helpful, since CFSR/HFSR don't exist on Cortex-M0+ and always printed as zero.
These now recover and report themselves on the console instead, for example:
[USB DATA_SEQ x1]
The line is capped at a few occurrences so a persistent fault can't flood the console. If you see one, please include it in any report — it names exactly which condition occurred.
Changed: MMBasic heap 4 KB smaller on four USB builds
The USB host stack's growth in b2 left very little room for the C heap that the file system and audio decoders allocate from. To restore that headroom the MMBasic heap is 4 KB smaller on:
PicoMiteRP2040USB(132 → 128 KB)PicoMiteRP2040VGAUSB(100 → 96 KB)PicoMiteRP2350USB(300 → 296 KB)PicoMiteRP2350VGAUSB(164 → 160 KB)
This also reduces the maximum program size on those four builds by the same 4 KB. No other variant is affected.
For anyone building from source
- The TinyUSB patches in
tinyusb-patches/have been updated: the three host-pathpanic()calls now recover and record, and the RP2040 EPX round-robin no longer preempts a transfer that has already moved data. The patches are still diffs against stock TinyUSB 0.21.0 — re-runtinyusb-patches/setup-tinyusb.shif you want a clean tree. - Two new CMake options, both off by default and diagnostic only:
-DFORCE_EPX_SOF=ONmakes an RP2350 build take the RP2040 EPX code path so it can be exercised on RP2350 hardware, and-DEPX_PREEMPT_UNGUARDED=ONrestores stock 0.21.0 preemption behaviour for A/B testing.