Flashing

How to get UMSH firmware onto a radio.

A browser-based flasher is on the way. The plan is the usual thing: plug the radio into a USB port, pick it from a list, click a button, and let the page do the rest — no toolchain, no downloads, no command line. It will need Chrome, Edge, or Opera, since those are the browsers that can talk to serial devices.

It is not built yet, and it is waiting on a firmware release process so that there is something for it to install. Until then, flashing means building from source, which is not difficult.

Building and flashing from source

You will need a Rust toolchain, and for the nRF52840 boards, arm-none-eabi-objcopy from the GNU Arm Embedded toolchain. Clone the repository, put your board into its bootloader as described below, and run the one command for it. The firmware only links in release mode, which the make targets already handle.

git clone https://github.com/darconeous/umsh.git

Espressif boards need one extra step, because the Xtensa processors need their own Rust compiler:

cargo install espup espflash && espup install

The instructions below cover getting each board into its bootloader, which is the part that differs. If a flash appears to succeed but the board comes back running the same firmware it had before, read the notes for your board — on some of them that failure is completely silent.

Per-board instructions

Every board runs the same firmware built for its own hardware, and the same command builds and flashes it. What differs is how you get the board into its bootloader.

Seeed Studio

SenseCAP T1000-E

Getting into the bootloader. Hold the button while plugging in the magnetic cable, or run a 1200-baud touch on the serial port.

Building and flashing.

make flash-t1000e
  • Bootloader driveT1000-E
  • UF2 family0x28860057
  • Application start0x27000
  • SoftDeviceS140 7.3.0

Worth knowing about this board

  • The button bootloader exposes a serial DFU endpoint only — there is no UF2 drive on that path. Use make flash-t1000e-serial for it.
  • The board is factory-sealed with no debug header, so there is no recovery from a damaged bootloader. Do not replace it.
LilyGO

T-Echo

Getting into the bootloader. Double-tap the reset button, or run a 1200-baud touch on the serial port.

Building and flashing.

make flash-techo
  • Bootloader driveTECHOBOOT
  • UF2 family0xADA52840
  • Application start0x26000
  • SoftDeviceS140 6.1.1

Worth knowing about this board

  • This is the only board whose application starts at 0x26000 — it ships an older SoftDevice than the rest. An image built for another board will not boot here.
Seeed Studio

Wio Tracker L1

Getting into the bootloader. Double-tap the reset button, or run a 1200-baud touch on the serial port.

Building and flashing.

make flash-wio-tracker-l1
  • Bootloader driveTRACKER L1
  • UF2 family0x28861667
  • Application start0x27000
  • SoftDeviceS140 7.3.0

Worth knowing about this board

  • The GNSS receiver keeps time for this board, so a full power-switch cut costs it the clock as well as the fix.
Seeed Studio

SenseCAP Solar Node P1

Getting into the bootloader. Double-tap the reset button. On a board still running the factory firmware this is the only way in — that firmware ignores the 1200-baud touch.

Building and flashing.

make flash-sensecap-solar
  • Bootloader driveSENSECAP
  • UF2 family0x28860044
  • Application start0x27000
  • SoftDeviceS140 7.3.0

Worth knowing about this board

  • Once UMSH firmware is on the board, the 1200-baud touch works normally.
  • From the powered-off state, any press of the PWR button enters the bootloader, however brief. USR is the button that turns the node on.
Heltec

WiFi LoRa 32 V3

Getting into the bootloader. None needed — the board enters its ROM bootloader on its own when the flashing tool asserts the USB serial control lines.

Building and flashing.

make flash-heltec-v3

Worth knowing about this board

  • Flashing rewrites the partition table, which carries the 64 KB partition UMSH stores its data in. A board coming from a different layout loses whatever was past the old application partition.
  • Building this board needs Espressif's Xtensa Rust toolchain, installed with espup.
Seeed Studio

XIAO nRF52840 + Wio-SX1262 Kit

Getting into the bootloader. Double-tap the reset button on the module.

Building and flashing.

make flash-xiao-nrf52
  • Bootloader driveXIAO-SENSE
  • UF2 family0xADA52840
  • Application start0x27000
  • SoftDeviceS140 7.3.0

Worth knowing about this board

  • A UF2 file carrying the wrong family identifier is copied without any error and then silently discarded — the drive stays mounted and the board keeps running its old firmware, which looks exactly like a successful flash. If an update seems not to have taken, check the family identifier first.
  • Retail kits mount as XIAO-SENSE; a re-flashed bootloader may present XIAO-BOOT instead.