First stable 2.x release. The beta label is gone: the SRAM loader failure that
made 2.0.0 a prerelease is fixed and proven on hardware.
What's new
The AT32 loader watchdog fix
The swdart SRAM loader failed intermittently during pre-fix stress runs.
The cause was the AT32 watchdog: a system reset clears the watchdog-freeze bits
in the debug-control register, so freezing the watchdog only at connect was not
enough — it also has to be reloaded before every programming chunk.
Two supporting fixes landed with it: loader exceptions are isolated through VTOR,
and DHCSR.S_RESET_ST is latched across the run so a reset during programming
cannot be missed.
The fix then passed 100/100 destructive cycles on Windows/native libusb with an
AT32F415CBT7 and ST-Link/V2 V2J37. This is why 2.1.0 is a minor bump rather than
another beta: flashing behaviour on real hardware changed.
Desktop ships on swdart
A fresh desktop install now selects the swdart backend and the SRAM loader.
OpenOCD stays bundled and selectable, and there is no automatic fallback in
either direction. An operator who explicitly chose OpenOCD keeps it — only an
unset preference is treated as a fresh install.
Phone-tier web build
/m/ is a phone-shaped web build carrying a subset of the desktop tools, in the
same layout as the Android app. Using the same guarded-write flow, measured
times were about 9–10 s on a Galaxy A52s using phone WebUSB over OTG, 6 s in
desktop Chrome using WebUSB, and 6–7 s through the Android app on the A52s.
Settings
- On desktop, a new
Advancedgroup at the foot of Settings is collapsed by
default and holds the swdart backend, SRAM loader and Advanced logging
switches. Web and Android show their single Advanced logging switch directly. - Advanced logging records a register baseline before flashing plus every
programming chunk, so an intermittent failure leaves full evidence. It is on
by default on desktop and off on Web/Android, where the console is the only
transcript. - Save log to file is now on by default on desktop.
- About now reports v2.1.0 and the currently selected hardware engine.
Phone layout fixes
The hero title wraps instead of truncating on narrow phones, and the Android
hero panel background, halo and margin now match desktop. On firmware screens,
redundant idle helper text and the ZIP3 hint were removed so Start stays clear
of the pinned Actions panel. The gap ladder is now keyed to screen content
rather than viewport height, restoring about 29 px of spacing on non-firmware
screens.
Known limits
Power-race ships as explicitly best-effort. It can catch on the 3V3 disconnect
transition and sustain valid dump and flash operations, but it is not deterministic.
Loader evidence is broad but not exhaustive — other AT32F415 package IDs and
other probe revisions have not been through the same cycle count.
Downloads
- Windows installer (x64)
- Linux x86_64 AppImage
- macOS universal ZIP
- Android arm64 APK (sideload — debug-signed)
Web app: x3utils-web.pages.dev for desktop
browsers, /m/ for Android phones. Both need
Chrome or Edge; no iPhone or iPad browser supports WebUSB.
Full changes:
gui-v2.0.0-beta…gui-v2.1.0