Skip to content
ATS Mini Controller
Offline
Radio + appFirmware & recovery7 min read

Installing firmware on the ATS Mini

Which of the three firmware builds your ATS Mini needs, how to tell an OSPI board from a QSPI one, and four ways to write it — starting with the installer on this site.

Every ATS Mini firmware release ships three archives, and only one of them belongs on your radio. Nothing inside the images says which is which, so picking the right one is the part worth getting right — the writing itself is the easy half. The firmware installer on this site reads the answer off the chip, and a mismatched archive is refused unless you deliberately override it; this page explains what it is checking, and how to do the same by hand.

Three archives, one of them yours

A release publishes an ospi archive, a qspi archive and a lilygo-t-embed archive. Each one expands to a single folder named ats-mini-v<version>-<variant> — for example ats-mini-v2.38-ospi. That folder name is the only reliable marker of what is inside.

It has to be, because the images themselves barely differ. The bootloader and the partition table are byte-identical across all three archives — confirmed here by hashing them. Only ats-mini.ino.bin, the application image, changes, and it changes by roughly 2 kB of PSRAM driver configuration. That is the whole difference between the builds, and it is why a loose .bin separated from its folder can never be traced back to the hardware it was meant for.

OSPI or QSPI: telling them apart

The two ATS Mini builds differ only in how the ESP32-S3 module’s PSRAM is wired: octal (OSPI), 8 MB, or quad (QSPI), 2 MB. Same board otherwise, same radio chip, same display, and nothing on the outside tells them apart — the question comes up often enough that the firmware project has a discussion thread titled “OSPI vs QSPI: How can I see what I have?”.

The installer does this in its second step: it reads the PSRAM capacity out of the chip’s eFuse and names the build the board needs. To check by hand, run esptool flash-id (flash_id on esptool 4.x) and read the Features: line. An 8 MB reading means OSPI, a 2 MB reading means QSPI. The first direction is the firmware maintainer’s own, from the project’s discussion #174: “Embedded PSRAM 8MB … is only available via OSPI”; the second was checked against a QSPI radio while this page was written — capacity code 2, reported as Embedded PSRAM 2MB. Read the capacity, never the vendor: the same vendor string (AP_3v3) turns up on both an 8 MB and a 2 MB part, so it tells you nothing about which build you need.

There is a third check, but only after the fact: on a radio that already boots, Menu → Settings → About shows a PSRAM figure, and that figure is non-zero when the running build matches the hardware. Useful for confirming you got it right; no help at all in choosing, since it needs working firmware to read.

Installing from this site

The firmware installer writes to the radio over its USB cable from the browser, with nothing to install. It needs the same Chromium-based browser the controller needs, and a data-capable USB-C cable — see Connecting your ATS Mini. Five steps:

  1. Connect over USB. You pick the radio’s port in the browser’s chooser. If the controller is already connected over USB, that connection is closed and the port handed over.
  2. Identify the hardware. The app reads the chip and its PSRAM capacity, and names the build this board needs. This is the step everything else depends on.
  3. Download the matching release. The live release list from the firmware project, with the archive that matches your board marked and the ones that do not flagged as mismatches.
  4. Load and verify the image. Drop the archive back in. The app reads the version and variant out of the folder name and compares them with what step 2 found. A mismatch is refused unless you deliberately override it.
  5. Back up, then write. Read a copy of the current flash first, choose three-file or merged, accept the risk, write.

The archive is read in the browser and never uploaded anywhere. Bluetooth cannot do any of this: the ESP32-S3’s bootloader is only reachable over the USB serial link, so the radio has to be on a cable.

Two things to do once the write finishes

Neither is optional, and skipping the second one looks exactly like a failed flash: the radio works, and the app cannot see it.

  1. Switch the radio off and on. The installer asks the chip to restart itself when the write completes, but that request travels on a control line the board has to wire up, and not every one does. Where it is not wired the request still succeeds and the radio simply stays on the flasher until you power it off. A dark screen after a write is not a failed write.
  2. Set USB Port → Ad hoc on the radio again. From firmware 2.34 the USB remote interface is off by default. A merged write always clears that setting, and a three-file write can. Until you switch it back on the radio ignores the app completely — see Connecting your ATS Mini.

What goes where

An archive contains a CHANGELOG.md and four images. You write either the first three at their own addresses or the fourth on its own — never both.

FileFlash addressWhat it is
ats-mini.ino.bootloader.bin0x0The bootloader
ats-mini.ino.partitions.bin0x8000The partition table
ats-mini.ino.bin0x10000The firmware itself
ats-mini.ino.merged.bin0x0The three above combined into one image

The choice is not only about convenience. The merged image is 8 MB, and about 6.3 MB of it is padding — the real payload is around 1.7 MB. Writing it covers the entire flash chip, including the region where the radio keeps its own settings, so the merged write always resets them. The three-file write transfers only the payload, roughly 1.7 MB, and leaves everything outside those three regions alone, so your settings usually survive.

Doing it without this site

The firmware project documents three routes of its own, and all three want the same files at the same addresses. Use one of these if you would rather work with the tool the firmware authors use — and the last two if your browser has no Web Serial at all.

esptool-js, in a browser
Espressif’s own web flasher at espressif.github.io/esptool-js. Connect, add the files at their addresses, press Program, and wait for Leaving... Hard resetting via RTS pin... in the log. Windows, macOS and Linux; Chromium-based browsers only, the same limit this site has.
Flash Download Tool, on Windows
Espressif’s desktop tool. Chip Type ESP32-S3, WorkMode Develop, LoadMode UART; add the files, tick the box next to each one, set the COM port, press START. It is finished when the log says is stub and send flash finish.
esptool.py, on the command line
One command with --chip esp32s3 and --baud 921600, then the addresses and file names. The firmware documentation gives the exact line for both the three-file and the merged route.

Whichever you use, power the radio off and back on afterwards, then check Menu → Settings → About for the version — and for that non-zero PSRAM figure.

Before you write anything

  • Take a backup. It is the only way back to the firmware the radio has now, and you can only take one while it still runs. Firmware backup and recovery covers it.
  • Use a data cable, and keep the radio powered. An interrupted write is the failure that turns a five-minute job into a recovery job.
  • Look for BOOT and RESET buttons on the board before you start, not after. With them, forcing the radio to listen to a flasher is a two-button sequence; without them it is considerably more awkward.
  • Do not flash the T-Embed archive to an ATS Mini.

What a new version actually changes for you is in Firmware versions — the 2.34 threshold for Bluetooth and fast tuning, and the CB band range that gets narrower when you cross it. If you are considering something other than the official firmware, start at Alternative firmware.

Recommended gear

  • Short USB-C data cableAccessoryA charge-only lead powers the radio but never shows it to the flasher — and a cable that drops mid-write is the one failure that needs a recovery flash.

Frequently asked questions

How do I know whether my ATS Mini needs the OSPI or the QSPI firmware?
It depends on the PSRAM on the ESP32-S3 module. An 8 MB reading means the OSPI build and a 2 MB reading means the QSPI build; both directions have been checked against real radios. Read the capacity rather than the vendor, because the same vendor string appears on parts of both sizes. The installer on this site reads the capacity off the chip and tells you which build it points to. By hand, run esptool flash-id, or flash_id on esptool 4.x, and read the Features line. On a radio that already boots, Menu → Settings → About shows a non-zero PSRAM figure when the running build matches the hardware.
Can I tell which firmware variant a .bin file is for?
No. The bootloader and the partition table are byte-identical across all three release archives, and the application image differs by only about 2 kB of PSRAM configuration. The name of the folder inside the release archive, such as ats-mini-v2.38-ospi, is the only reliable marker, which is why a loose .bin separated from that folder cannot be checked against your hardware by any tool.
Will flashing new firmware erase my memory channels and settings?
The merged image always does: it spans the whole flash chip, including the region the radio stores its settings in. The three-file write transfers only the bootloader, partition table and firmware, so the settings usually survive — but the firmware documentation notes they might still be reset in some versions, so treat it as likely rather than certain.
What are the flash addresses for ATS Mini firmware?
The bootloader goes at 0x0, the partition table at 0x8000 and the firmware itself at 0x10000. Official archives also carry boot_app0.bin for 0xe000, which makes the radio start the firmware just written even if an earlier Wi-Fi update left it starting the other app slot; the installer writes it with the three files. The merged image, which contains all three, goes at 0x0 on its own. You write either the three separate files or the merged image, never both.
What is the lilygo-t-embed archive for?
The LILYGO T-Embed SI4732, which is a different receiver rather than a third PSRAM variant of the ATS Mini. The firmware project warns that flashing it to an ATS Mini can damage the receiver, so it should never be used on one.
Do I need to install anything to flash an ATS Mini?
No. The installer on this site and Espressif’s esptool-js both run in the browser over the USB cable, with nothing to install. Desktop alternatives exist — the Flash Download Tool on Windows, and esptool.py on the command line — and they write exactly the same files to exactly the same addresses.

More

Device

Explore

Settings

Theme

Welcome to ATS Mini Controller

This web app connects to your ATS Mini radio over USB or Bluetooth LE and lets you control it directly from a computer or phone. It adds remote tuning, memory slot management, screenshot capture, audio streaming, spectrum scanning, theme editing and other features on top of the device's built-in firmware.

Firmware 2.34+: pick a connection method

Starting with firmware 2.34 the radio accepts remote control over USB or Bluetooth LE. Pick by what matters more for you: fast screenshots (USB) or clean audio from the radio’s 3.5 mm output (Bluetooth) — the two transports trade off in opposite directions.

  • USB Serial

    Settings USB Port change Off to Ad hoc

    Works in any Chromium-based browser. Requires a data-capable USB-C cable (opens in a new tab).

    Best for screenshots and theme work. Transfers complete in a second or two. Audio capture is noisy while the cable is connected — the radio lacks the filtering needed to isolate its 3.5 mm output from the USB power rail, so hum and switching noise bleed into the audio path.

  • Bluetooth LE

    Settings Bluetooth set mode to Ad hoc

    Chrome / Edge / Opera on desktop or Android. BLE is experimental in firmware 2.34.

    Best for clean audio. Bluetooth LE carries the remote control only, never sound: the audio still travels by cable from the radio’s 3.5 mm output to your computer. With no USB cable attached the radio runs on its battery, so that output stays free of the USB power-rail noise that bleeds through on a wired connection. Screenshots are much slower (~30 s) because of the firmware's BLE throughput cap.

More than one firmware

Besides the official firmware, the app carries profiles for the Monster fork and for H. J. Berndt's firmware. It works out which one your radio runs from the replies it gets, so there is nothing to pick. When nothing matches, it says so instead of guessing.

  • Berndt firmware is never assumed. It reuses some of the official firmware's keys and what they do there is not established, so the app asks you before switching to it.
  • Missing controls are deliberate. Whatever a firmware cannot do is left off the page rather than greyed out, and on Berndt firmware, commands go out one at a time, a few seconds apart.
How the app handles other firmwares (opens in a new tab)

Keyboard shortcuts

Single keys control the radio on the Controller page, except while you type in a field.

←→
Tune one step
↑↓
Volume up / down
Enter
OK
BN
Next / previous band
MV
Next / previous mode
SA
Next / previous step
WQ
Next / previous bandwidth
GF
AGC up / down
LK
Backlight up / down
IU
Calibration up / down
OP
Sleep on / off
T
Toggle status log
C
Screenshot
H
Log reception
D
Cockpit view
⌘K
Search pages & stations