Page 1 of 1

ESP32 SD Card Bootloader for TTGO VGA32 — Load multiple firmware from SD card

Posted: Fri Jun 12, 2026 6:44 pm
by fg1998
ESP32 SD Card Bootloader for ESP32 — Load multiple firmware from SD card

Hi everyone!

I'd like to share a project I've been working on: an SD Card Bootloader for the TTGO VGA32 v1.4 board, but works on any ESP32 instead.

WHAT IS IT?

It's a small firmware that turns your ESP32 into a multi-firmware loader. Instead of flashing a new firmware every time you want to try a different app, you just drop a firmware.bin file on an SD card, power up the board, and it does the rest automatically.

HOW DOES IT WORK?

- The bootloader lives in the factory partition.
- On boot, it shows a splash screen and checks the SD card for a firmware.bin and version.txt.
- If the version on the SD card is different from what's stored in NVS, it flashes the new firmware to the ota_0 partition and reboots into it.
- If the version matches, it boots directly into the already-flashed emulator — no need to reflash every time.
- Swap the SD card with a different emulator + version.txt, reset the board, and it flashes the new one automatically.

It's basically like a poor man's "Multicore" for the ESP32 — one bootloader, many emulators, just by swapping SD cards.

WHICH app/firmwares CURRENTLY WORK?

- ESPectrum (ZX Spectrum 48K/128K) — EremusOne/ESPectrum
- CPC (Amstrad CPC) — EremusOne/CPCEsp
- MSPX (MSX) — EremusOne/MSPX
- VIC20 — fdivitto/FabGL (adapted for PlatformIO)
- PCEmulator (PC XT, CGA/Hercules) — fdivitto/FabGL (adapted for PlatformIO)


Emulators compiled with ESP-IDF / PlatformIO work out of the box. Emulators compiled with the Arduino framework need one small addition to setup() to keep the bootloader intact across reboots (documented in the repo's known issues section).

WHERE TO GET IT

GitHub: github.com/fg1998/esp32-bootloader

The README covers everything: how it works, partition table, how to extract firmware.bin from merged binaries, known issues, and compatibility notes.

HOW TO FLASH IT

Easiest way — Web Flasher (no software install needed):

1. Go to alternativebits.com/esp32
2. Connect your TTGO VGA32 via USB
3. Click connect, select the port, and flash — done in under a minute

Or compile it yourself:

git clone https://github.com/fg1998/esp32-bootloader.git
cd esp32-bootloader
pio run --target upload

---

Heads up: this is still early stage / beta. It works well for the emulators listed above, but there are some known quirks (documented in the README) — PS2 keyboard occasionally needing a power cycle, PocketTRS not yet compatible due to WiFi/partition conflicts, etc.

Feedback, bug reports, and PRs are very welcome!