Release assets

A release should include these downloadable assets:

Verify downloads

sha256sum -c SHA256SUMS

On macOS, install GNU coreutils or compare individual files with shasum -a 256 <file>.

Initial flash

For development boards, the normal first install is still an ESP-IDF flash from source because it writes the bootloader, partition table, and factory app together:

. "$IDF_PATH/export.sh"
idf.py set-target esp32s3
idf.py build
idf.py flash monitor

Updating main firmware

Once recovery is installed, prefer the recovery web UI. Connect to ThistleOS-Recovery, connect the device to WiFi, choose the board, run the dry-run plan, then download and install.

For manual serial flashing, write the main firmware to ota_1 using the offsets in partitions.csv. In the current 16 MB layout, ota_1 starts at 0x720000.

esptool.py --chip esp32s3 write_flash 0x720000 thistle_os-<version>.bin

Updating recovery

Recovery lives in ota_0. In the current 16 MB layout, ota_0 starts at 0x4A0000 and has 0x280000 bytes available.

esptool.py --chip esp32s3 write_flash 0x4A0000 thistle-recovery-<version>
Do not cross-flash slots
The main firmware and recovery firmware are different binaries. Flashing either one into the wrong app slot can leave the board unable to boot without a serial reflash.