ESP32 firmware inspector
Drop a firmware file to see what it is and what it says about itself: chip, version, project, build date, ESP-IDF version, flash mode and size, segments, and whether its checksum and hash are intact. Merged images are split into their parts.
An app image (build/<project>.bin), a bootloader, a partition table, or a merged image from esptool merge_bin or Arduino's "Export Compiled Binary".
What it checks
- The image header: the chip it is built for, flash mode, frequency and size, the entry point and the supported chip revisions.
- The app description (
esp_app_desc_t): version, project name, compile time and date, ESP-IDF version and the SHA-256 of the ELF it came from, which tells you which ELF decodes its crashes. - Integrity: the checksum and the appended SHA-256, as the bootloader checks them before booting. A file cut short in a download or an OTA fails here.
- Segments: what is loaded into IRAM, DRAM and RTC memory and what stays in flash.
- Merged images: the bootloader, the partition table and each app partition, with a button to save the app as a separate .bin for OTA.
- The right ELF: drop the .elf with the .bin and it tells you whether that ELF is from the same build, so crashes are decoded with the right file.
The same information as esptool.py image_info, without installing anything. The file stays in your browser.
Which file goes over the air
An OTA update takes the app image alone, build/<project>.bin, never a merged image or the bootloader. Pinscope checks the same things before it sends an image to a device: that it is an app image, built for that chip, and intact, and it rolls back if the new firmware does not come back online. OTA over the internet.
Try it
Three devices are free, and no card is needed. Create an account, or read the five-minute guide first.
More
- Remote access to an ESP32 without TLS: what it measured and what it costs
- Reaching an ESP32 web server from outside its network
- Updating ESP32 firmware over the internet, with rollback
- Guru Meditation Error: decoding the backtrace, and crashes from the field
- Remote logging: ESP_LOG without a serial cable
- Heap and stack monitoring in the field
- An ESP32 behind CGNAT, 4G or Starlink
- TLS memory usage on the ESP32, and how to reduce it
- Sharing an ESP32 sensor page with anyone, without port forwarding
- ArduinoOTA over the internet, with a rollback
- ESP32 remote access compared: port forwarding, ngrok, Cloudflare Tunnel, Tailscale
- esp_http_server slow? The 250 ms delay and the fix
- Before the first ESP32 ships: a field support checklist
- ESP32 exception decoder: a Guru Meditation backtrace to lines, in the browser