Hermes v1.0 — UART baud detector + console tap
Clip onto an unknown serial line. Hermes measures the bit time on the pin, checks its answer against the real UART, and hands you the console.
Drop hermes.fap onto your Flipper at SD Card / apps / GPIO /, then open Apps → GPIO → Hermes.
How it finds the rate
Two stages, because they fail in opposite directions.
It measures. The RX pin becomes an interrupt input and every edge is timestamped with the ARM cycle counter — 15 ns resolution. Every run on a UART line is a whole number of bit times, so the question becomes which bit time turns these measurements into integers? Each standard rate is tested directly, and the slowest rate that explains the data wins: the faster ones are harmonics, and they give themselves away by needing more bits in a run than a frame can physically hold.
It checks. The same pin is reopened as a real UART, and each candidate is scored on hardware framing errors and printable ratio — evidence, not inference. That pass also settles the framing, which is why the answer is 115200 8N1 and not just a number. Overruns are tracked but never scored: an overrun means Hermes was too slow, not that the rate is wrong.
Edge timing works off a single boot burst but tops out near 230400; the UART sweep needs live traffic but is accurate to 921600. When the timing fit comes up empty, Hermes sweeps the whole table instead. When the line goes quiet, the verdict says timing only rather than dressing a guess up as a measurement.
In the app
- Live scope — reconstructs the target’s actual square wave from the captured timings.
- Verdict — confidence, provenance (
412 edges · 96% fit), and a ladder of runner-ups you can open directly. - Console — DMA receive, 96 lines of scrollback, ASCII/hex, an ANSI parser so boot logs read as text, a Ctrl-key palette (Ctrl+C/D/Z, Esc, Tab), CR/LF/CRLF.
- Wiring guide — animated, relabels itself per port profile, plus the rules.
- Ports — USART on 13/14, LPUART on 15/16.
Before you clip on
GND first, always. 3.3V logic only. RS-232 swings ±12V and will destroy your Flipper — use a MAX3232. Flipper RX (14) goes to target TX; RX and TX always cross.
Detection releases the TX pin outright, so the target’s RX line is never driven until you open the console and type. Settings → Transmit: OFF keeps a whole session read-only.
Verified
Built against official firmware fw 7 / API 87.1, and CI also builds against the dev SDK (API 88.0). The fit ships with a host test suite (make -C test) that compiles the real autobaud.c against a stubbed HAL and drives the actual interrupt handler with synthetic waveforms — 21 checks under ASan/UBSan, green in CI alongside both channels.
For your own boards, or ones you are authorised to test.