← How-Tos
electronics Jul 3, 2026 ◑ 21 views ◯ 2 min read

Flashing ATS Mini V4 Firmware: ESP32-S3 Update via USB

ats minifirmwareesp32 s3flashingesptool

Read This Warning First

Flashing firmware can genuinely make your receiver unusable if done wrong. Back up your current firmware before flashing anything new (see below), and if your board has BOOT and RESET buttons soldered on, you have a real recovery path if something goes wrong — some units ship without them soldered, which makes recovery from a bad flash much harder.

Step 1: Back Up Your Current Firmware

With esptool.py installed (works via uv on Windows/macOS/Linux):

uvx --from esptool esptool.py --chip esp32s3 --port SERIAL_PORT --baud 921600 read_flash 0x0 ALL original-flash.bin

Replace SERIAL_PORT with your actual port (check Device Manager on Windows, /dev/tty.usbmodemXXXX on macOS, /dev/ttyACMX on Linux). Keep this backup file somewhere safe — it's your rollback path.

Step 2: Identify Your PSRAM Variant

This matters a lot — flashing the wrong variant causes a "PSRAM not detected" error. Check Settings > About on the current firmware for PSRAM info, or open the case and check the board's markings against the OSPI/QSPI reference table in the official docs. Most commercial ATS Mini V4 units use the OSPI variant, but don't assume — verify before flashing.

Step 3: Get the Firmware

Firmware releases are on the esp32-si4732/ats-mini GitHub repo (the actively-maintained community fork). Download either the three separate files (bootloader, partitions, main app) or the single merged binary — matching your identified OSPI/QSPI variant.

Step 4: Flash It

Using esptool.py directly (cross-platform):

uvx --from esptool esptool.py --chip esp32s3 --port SERIAL_PORT --baud 921600 \ --before default-reset --after hard-reset write_flash -z \ --flash-mode keep --flash-freq keep --flash-size keep \ 0x0 ats-mini.ino.bootloader.bin \ 0x8000 ats-mini.ino.partitions.bin \ 0x10000 ats-mini.ino.bin

Or, if using the merged single-file build:

uvx --from esptool esptool.py --chip esp32s3 --port SERIAL_PORT --baud 921600 \ --before default-reset --after hard-reset write-flash -z \ --flash-mode keep --flash-freq keep --flash-size keep \ 0x0 ats-mini.ino.merged.bin

Alternative: Browser-Based ESP Web Flasher

If you'd rather avoid the command line, the official docs also list a browser-based flasher (WebSerial-based, works in Chrome/Edge) — connect, select port, add the firmware files, press Program, wait for "Leaving... Hard resetting via RTS pin" in the log.

Windows Alternative: Espressif Flash Download Tool

Set Chip Type: ESP32-S3, WorkMode: Develop, LoadMode: UART, add your firmware files at the correct addresses, set your COM port, and press START. Wait for "is stub and send flash finish" in the log window.

Verify the Flash Worked

Power cycle the receiver, then check Menu > Settings > About — confirm the new firmware version shows correctly and PSRAM is detected (non-zero value) if you flashed a PSRAM-enabled build.

If Something Goes Wrong

See the recovery process — if your board has BOOT/RESET buttons, a specific button-hold sequence puts the ESP32-S3 into recovery mode for reflashing regardless of firmware state. If it only has a BOOT button, a slightly different sequence applies — check current recovery documentation for the exact steps, since this detail can shift between hardware revisions.