Flash
Put firmware on the badge, from this page.
The badge speaks the Espressif ROM bootloader over its USB-C port, and Chromium browsers can open a serial port. So there is nothing to install — pick an image, connect the board, and it gets written here.
Everything runs locally. The images are static files served with this page, the serial port is granted by you to this tab only, and nothing about your board is sent anywhere.
01 Pick a firmware
The factory-test image. It walks the ILI9341 panel and its backlight, reads the six buttons through the TCA9534, drives both WS2812 LEDs, samples the battery divider, opens a T=1 link to the SE050 and reads its ATR, and captures both PDM microphones with live level bars.
This is what you flash to find out whether a board came back from assembly working. It answers that question and nothing else — there is no launcher and no app support.
Built from firmware/testkit/Badge-testkit-full.bin · tracked in the
repo
02 Connect the badge
Plug the badge into USB-C and switch S1 to the CH340C side. If the browser
shows no port, hold BOOT1, tap RST1, release BOOT1 and pick “Already in bootloader” below.
DTR/RTS through the auto-program circuit. Right for the USB-C port with S1 on the CH340C side.
03 Write it
What gets written
Offsets come from the images themselves. The badge is a 16 MB ESP32-S3 with 8 MB octal
of PSRAM; the compiled image is built against esp32:esp32:esp32s3:PSRAM=opi,FlashSize=16M,PartitionScheme=custom,CDCOnBoot=cdc.
Test kit
| Offset | Part | Size |
|---|---|---|
| 0x0000 | merged image | 654 KB |
firmware/testkit/Badge-testkit-full.bin
Solana OS
| Offset | Part | Size |
|---|---|---|
| 0x0000 | bootloader | 20 KB |
| 0x8000 | partition table | 3 KB |
| 0xe000 | OTA select | 8 KB |
| 0x10000 | application | 1748 KB |
firmware/solana-os/
If it will not connect
- No port in the picker
- The CH340C needs a driver on older macOS and on Windows. Check that
S1is on the CH340C side — flipped the other way, the port you want is the S3's own USB and you should pick the “Native USB” reset mode. - “Failed to connect” / no sync
- Put the board into download mode by hand: hold BOOT1, tap RST1, release BOOT1. Then choose “Already in bootloader” and connect.
- It connects, then fails partway
- Drop the baud rate to 115200. Long or unpowered hubs lose bytes at 921600 far more often than the cable being at fault.
- Port is busy
- Close any serial monitor holding it — the Arduino IDE,
screen, or another tab of this page.
Prefer a terminal? The same test-kit image flashes with esptool.py --chip esp32s3 write_flash 0x0 firmware/testkit/Badge-testkit-full.bin,
and Solana OS builds and uploads with arduino-cli — see the USB module for how the auto-program circuit gets the board into
the bootloader on its own.