Blog
Firmware y datos ESP32: particiones, archivos y lectura
Firmware, particiones y los archivos escondidos en tu flash: qué flashear, dónde va, cómo leerlo. El simulador del navegador refleja el mismo layout.
¿Cómo leer una partición de flash del ESP32 en C?
Usa la API esp_partition: esp_partition_find_first() localiza una partición por tipo y etiqueta, esp_partition_read() copia bytes, y ya estás leyendo flash desde C sin esptool. Las direcciones son relativas al inicio de la partición, no del flash. Preguntar cómo leer la tabla de particiones del esp32 normalmente significa esptool.py read_flash 0x8000 0x1000 pt.bin decodificado con gen_esp32part.py.
¿Cómo flashear el firmware del ESP32?
Firmware en sentido estricto es la imagen de la app: esptool.py write_flash 0x10000 firmware.bin. Ojo con 0x10000, no 0x0 — flashear una app en 0x0 es el clásico error de boot loop silencioso, y yo lo he cometido.
¿Cómo flashear un archivo BIN al ESP32?
Un .bin es solo firmware en un archivo, así que el comando es el mismo write_flash con el offset que corresponda a lo que es el archivo: 0x1000 para un bootloader, 0x8000 para una tabla de particiones, 0x10000 para una app. Las imágenes de fábrica combinadas de los instaladores de Espressif son la excepción, empezando en 0x0. Offset equivocado: boot loop, y la subida reporta éxito.
¿Cómo descargar un archivo de un servidor con ESP32 Arduino?
HTTPClient: http.begin(url), http.GET(), lee el body. Así se descarga un archivo de un servidor con esp32 arduino en diez líneas, y el mismo cliente hace POSTs cuando necesitas lo contrario — cómo enviar datos del esp32 al servidor. Para firmware, usa la clase Update en su lugar: Update.begin(size) y luego Update.writeStream(stream) instalan un .bin con seguridad. El clásico: TLS — HTTPS necesita un certificado raíz; uno que falta parece un problema de red. HTTP plano casi siempre funciona en tu LAN.
¿Cómo extraer código del ESP32?
Código fuente, no — código máquina, sí. esptool.py read_flash 0x0 0x400000 dump.bin saca todo el flash, y el mismo comando responde a cómo leer código del esp32: los bytes están ahí, el fuente legible no. Para identificar una imagen de firmware sin placa, esptool.py image_info reporta chip y modo de flash — así se determinan los builds de firmware del esp32.
¿Tiene el ESP32 EEPROM?
EEPROM física, no — está emulada en flash. EEPROM.h y la librería Preferences escriben ambas en la partición NVS, una pequeña zona clave-valor en el flash SPI. Respuesta práctica: sí, pagado en endurance de flash en lugar de un chip dedicado. ¿Cómo borrar la eeprom del esp32? Preferences.clear() lo hace en una llamada.
¿Qué vive dónde en el flash?
Layout por defecto de 4 MB: bootloader 0x1000, NVS 0x9000 (credenciales Wi-Fi, ajustes), app 0x10000, filesystem de datos hacia el final. La tabla de particiones en 0x8000 es el mapa — nuestra base de conocimiento tiene la referencia completa por placa.
¿Cómo vuelco todo el flash?
esptool.py read_flash 0x0 0x400000 backup.bin en un chip de 4 MB, con --verify para comprobar que volvió intacto; restaurar con write_flash en los mismos offsets. Un volcado completo es la única red de seguridad real antes de firmware experimental — guardo uno antes de cada placa que planeo maltratar, y ha rescatado a dos de ellas.
¿SPIFFS o LittleFS?
LittleFS: más rápido, sobrevive mejor a las caídas de energía y viene con el core Arduino-ESP32. SPIFFS es legado, todavía vale para datos estáticos, y ambos suben con el mismo plugin Sketch Data Upload. La documentación oficial es vaga sobre la migración, así que formatea el filesystem nuevo en el primer arranque y copia los archivos.
¿Puedo actualizar el firmware por Wi-Fi?
Sí — OTA. La clase Update toma el mismo stream .bin de la respuesta de descarga del servidor y escribe la partición OTA mientras la app corre. Esa es la vía práctica para cómo acceder al esp32 desde cualquier sitio — el dispositivo llama a casa en lugar de que tú abras puertos. app.sensbench.com prueba el flujo en un navegador.
Los proyectos de este tema se ejecutan directamente en el simulador gratuito de sensbench: circuito preconectado, firmware incluido, sin cuenta y sin instalación.