posse

usb install

put posse on an m9

Plug an Elecrow ThinkNode M9 into this computer with a USB-C cable, pick a mode, and press install. The firmware is written straight from the browser over Web Serial; nothing is uploaded anywhere, and the page never sees the device beyond the serial port you hand it.

Writes the bootloader, the partition table and the app from 0x0. The gaps are padded with 0xFF, and one of those gaps is where settings live — name, colour, crew key and compass calibration are erased. This is the one to use on a new board, or on a board in an unknown state.

This browser cannot talk to USB serial ports. Use Chrome or Edge on a desktop, or flash from the command line below. Web Serial needs a secure context (https). Flash from the command line below.

Checking for the latest release…

Chrome or Edge, on a desktop. Web Serial does not exist in Safari or Firefox, and is not available on iOS or Android at all. Everything here can be done with esptool instead.

two images what gets written

one of them keeps your crew

first install

posse-thinknode-m9-merged.bin at 0x0. Bootloader, partition table, OTA selector and app as one image. esptool pads the space between them with 0xFF, which runs straight through the NVS partition at 0x9000, so the device comes up asking for a name again.

update

posse-thinknode-m9.bin at 0x10000, plus a blank otadata at 0xE000. The second part matters once a device has updated itself over the air: it may be running from its second firmware slot, and writing the app alone would leave the bootloader pointing there, so the device would reboot into the firmware it already had. Clearing otadata sends it to the first slot, which is the one just written. Nothing else is touched, and leaving the rest of the flash alone is what preserves the name, the colour, the crew key and the compass calibration.

A device that already runs posse can also update itself over Wi-Fi, from SETUP > u. Every update it downloads is signed and checked against a key built into the firmware before anything is written, so it is safe to do on a network you do not trust. The cable is for a first install, or for a device that cannot reach Wi-Fi.

by hand the command line

esptool, if you would rather

Once the latest release is found, the images to download appear here.

# update — settings preserved
# erase_region clears the bootloader's slot choice, so a device that updated
# itself over the air boots the image written here rather than its old one.
esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 \
  erase_region 0xe000 0x2000
esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 \
  write_flash -z 0x10000 posse-thinknode-m9.bin

# first install — settings erased
esptool.py --chip esp32s3 --port /dev/ttyUSB0 --baud 921600 \
  write_flash -z 0x0 posse-thinknode-m9-merged.bin

Building from source instead is pio run -e thinknode_m9 -t upload; see firmware/docs/M9-BUILD.md.

when it sulks troubleshooting

no port in the list

The M9's USB-C socket goes through a CH340K bridge into UART0, so the board appears as an ordinary serial port rather than as a USB device of its own. macOS does not bind that chip on its own: install WCH's CH34x driver (brew install --cask wch-ch34x-usb-serial-driver), open it, press Install and approve it in System Settings, then replug. Windows usually has it. Check the power slider is on.

it will not enter the bootloader

There is no BOOT button on this board — the bridge's DTR/RTS lines do the reset, which the flasher drives for you. If it fails anyway, cycle the power slider and press install again immediately.

which build is this?

SETUP shows the version on the device. Release builds carry their tag (posse-v0.1.0); a build that says dev came off someone's laptop. Quote whichever it says in a bug report.

next