github Quixotic7/ChoralRootFM1 v0.32
ChoralRoot 0.32

latest release: v0.32-smk37
2 hours ago

ChoralRoot 0.32 is 0.31 with a safer flash driver, for the FM-1s made from late 2026 with the slower flash chip:
an erase or a write that takes longer than expected is now waited out instead of cut short. Nothing you play changes,
and your settings, sounds, loops and favorites are stored as before.

Flash writes waited out (new in 0.32)

Newer FM-1s have a second flash chip (0xB36014, reported as the UC25HQ80; ChoralRoot accepts it since 0.29.1), which
can take longer than the original Puya chip to erase a sector or write a page.

  • Before: the driver waited at most 500 ms for an erase and 10 ms for a page write. If the chip was still busy
    then, it gave up and went back to running the firmware from the flash while the chip might still be working, so
    what it read next could be anything.
  • Now the driver never goes back to the flash while the chip says it is busy. It keeps waiting up to 2 s for
    an erase and 50 ms for a page write.
  • Late but finished counts as done: an erase or write that finishes after 500 ms / 10 ms but within 2 s / 50 ms
    succeeds. The save, the update or the restore goes through. Each late one is counted, and fm1_install.py --debug
    shows the count and the longest (flash_late_ops, flash_late_max_us).
  • Still busy at 2 s / 50 ms: the driver resets the flash chip and then restarts the FM-1, instead of carrying on
    with a chip in an unknown state.
  • An erase still holds the sound for as long as it takes (as before, about 18 ms on the Puya chip; longer on a slow
    chip). The update installer keeps its watchdog fed between erases, so a run of slow erases does not restart the
    FM-1 mid-install.
  • This is on the SMK-37 too (0.32-smk37).

Tried on units: the fix on an FM-1 with the Puya chip (saves, sound imports and deletes, a backup restored, an
install): everything as before, none late. Not yet tried on a unit with the slow chip: none here has one. The wait,
the reset and late-as-done are checked on a model of the chip, and a slow erase in the emulator. If your FM-1 shows
flash_late_ops above 0 in --debug, please report it.

The fix is felucca-bsp's (#12, by Julius Vitkauskas, merged by Charles Vestal), taken as RemoteFM1 0.3.4 took it.
Thank you. Its two files keep their MPL-2.0 licence; credits and licences: LICENSING.md.

Installing

  • The web installer's default is 0.32: press Install. Options > Version reads ChoralRoot 0.32.
  • From 0.30 or 0.31, or 0.27 to 0.29.2, nothing needs doing: your sounds, loops, favorites and settings are all
    there.
  • From 0.21 or older: install 0.29.2 first and switch the FM-1 on once to keep 0.21's sounds (the installer asks;
    0.30.md).
  • A Single core package: the web installer's Advanced > Hardware fallback. Options > Version then reads
    ChoralRoot 0.32 1-core.
  • From another firmware: M-Flasher with the M-Bootloader and
    choralroot-0.32.fwsc.
  • Signed builds: GitHub built these packages from the tag's source and signed them; 0.26.1.md
    "Checking a package" says how to check one (choralroot-0.32.fwsc).

Going back

  • To 0.31: the installer offers it under Other versions. 0.31 stores everything the same way, so your settings,
    sounds, loops and favorites stay. Its flash driver gives up on a slow erase or write after 500 ms / 10 ms again.
  • To another firmware: M-Flasher with the M-Bootloader (MANUAL.md
    "Switching firmwares"); back up ChoralRoot's data in the installer first.
  • To the stock firmware completely: M-VAVE's own updater, M-Updater.

ChoralRoot 0.32 for the M-VAVE FM-1 (identity FM-1_920).

Install from the browser at https://quixotic7.github.io/ChoralRootFM1/ (Chrome or Edge, the FM-1 connected by USB), or with the command-line installer: python3 tools/fm1_install.py choralroot-0.32.fwsc.

choralroot-0.32-1core.fwsc is the same firmware on one processor core, for an FM-1 that crashes or freezes with the standard package (the installer offers it under Advanced > Hardware fallback). Settings, sounds and loops stay when you switch between the two.

SHA256SUMS lists both packages and their apps. GitHub built and signed each from this tag's source (The Firmware Hub's shared workflow); check one with gh attestation verify choralroot-0.32.fwsc --repo Quixotic7/ChoralRootFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. The package holds three JieLi AC79 SDK files (Apache-2.0); LICENSE, LICENSING.md and LICENSES.zip carry every licence. Installing firmware is at your own risk.

Full Changelog: v0.31...v0.32

Don't miss a new ChoralRootFM1 release

NewReleases is sending notifications on new releases.