[Aporte] Restaurador y Programador para ESP8266 y ESP32

D@rkbytes

Moderador general
Buen día.
Otro aporte más para la comunidad.
Se trata de una aplicación para restaurar los ESP8266 y los ESP32.
Aunque esto se puede hacer por comandos o desde los mismos entornos de programación, esta aplicación es un "Stand-Alone"
O sea que no se requiere tener instalado Python para sus funciones.

Esta aplicación puede hacer lo siguiente:
1.- Restaura el sistema de archivos. (Repara el Bootloader y las particiones)
2.- Borra completamente la Memoria Flash.
3.- Copia el contenido de la memoria Flash (4 Opciones)
4.- Graba el firmware de usuario.
5.- Graba el archivo volcado. (No es lo mismo que el firmware de usuario)
6.- Obtiene el identificador del chip. (No es otra cosa que la misma MAC pero sin los dos puntos ":")

ESP Restorer.jpg

En fin, la idea de este programa surgió por la necesidad de actualizar el firmware de estos dispositivos por medio de Internet.
Como usé algunas de las funciones mostradas, se me ocurrió hacer algo simple como herramienta, ya que el programa que uso para actualizar mis proyectos por Internet, es mucho más complejo.

Nota importante:
Esta aplicación únicamente funciona en sistemas Windows x64

Espero que sea de utilidad.
 

Adjuntos

  • ESP Restorer.rar
    6.1 MB · Visitas: 197
Tengo la siguiente advertencia por parte del Windows al tratar de descomprimirlo y ejecutarlo.

Capt.JPG

Ya me había tirado Crome una advertencia al descargarlo y querer guardarlo.

Supongo que es alguna advertencia por haber reconocido una fracción del código con similitudes a algún código básico de algún virus.

Me interesaría saber si a alguien le paso lo mismo.

Uso este W10 de 64bit

wi.JPG
 
Subo una actualización.
1.- Se mejoró la velocidad de grabado y copia.
2.- Ahora se autodetecta la capacidad de la memoria flash durante la grabación.
3.- Se incluyó mostrar información del dispositivo.

Otro dato: También puede trabajar con los ESP12/E, ya que son chips ESP8266EX
Así que para estos dispositivos solo basta seleccionar ESP8266
 

Adjuntos

  • ESP Restorer.rar
    6.1 MB · Visitas: 93
Esta versión ya W10 no da ninguna advertencia, si el Chrome.

En lo personal, solo tengo ESP01 y ESP32 para hacer pruebas, este ultimo, perfecto, lectura/descarga, info, etc. y en el ESP01, da error de comunicación como si no estuviera colocado en modo boot/programación.
Ca.JPG

Algo que observo es que la información en ventana y al no tener la posibilidad de redimensionarlo, es un poco "chica" para lo que estoy acostumbrado pero es algo que viene con los años, nada mas. :)
Ca2.jpg

Posiblemente si usara como resolución de pantalla 800x600 o 1280x800 estaría bien pero es lo que noto a 1920x1080.
 
Última edición:
En lo personal, solo tengo ESP01 y ESP32 para hacer pruebas, este ultimo, perfecto, lectura/descarga, info, etc. y en el ESP01, da error de comunicación como si no estuviera colocado en modo boot/programación.
¿No es de los que se entra en modo de programación por medio de un pulsador?
Algo que observo es que la información en ventana y al no tener la posibilidad de redimensionarlo, es un poco "chica" para lo que estoy acostumbrado pero es algo que viene con los años, nada mas. :)
Adjunto la aplicación con la característica de poder ser redimensionada.
 

Adjuntos

  • ESP Restorer.rar
    6.1 MB · Visitas: 43
Ahora es otra cosa!!
ca3.JPG

Lee/reconoce el ESP01 perfectamente y escala perfectamente la pantalla.

Este ESP01, lo coloco en una de esas bases(genéricas) con el chip CH340 para adaptar USB a RS232. Vienen con el zócalo del ESP01 a la cual le puse una llave provisoria( para siempre) por el lado de "abajo" del PCB.

Esto sirve para colocar el ESP en modo boot o no y hacer un programador/cargador de FW.
Pro.jpg
ESP_Pro.jpg
 
Actualización 1.3

Agregué algunas opciones:
1.- (ESP32) La restauración ahora no afecta al programa de usuario. (Únicamente restaura errores del Bootloader y las particiones, dejando el programa de usuario intacto)
Esto nos da la idea de que, si el programa se vuelve a ejecutar normalmente, el error estaba en el Bootloader o en el bloque de las particiones, que es muy infrecuente.

2.- (ESP32) Se incluye definir el tipo de compilador para el cual será restaurado el chip.
Esto es porque no es lo mismo compilar en Arduino que en B4R u otro entorno.
Cada entorno crea un archivo para el Bootloader, por lo que distan de ser compatibles.

3.- Se agrega poder crear un archivo .bin a partir de un archivo .elf
El archivo binario creado a partir de un .elf (Archivo vinculable con información para depuración) siempre será creado como un archivo .bin creado por ESPTool de Phyton.
Así que la restauración deberá ser realizada para Arduino si se quiere programar el archivo . bin generado.

4.- Mostrar información del archivo binario (Imagen)
Esto nos muestra información sobre el archivo .bin compilado.
Es muy útil para saber el punto de entrada (Entry Point), los segmentos, el tamaño de memoria para el cual fue creado,
la frecuencia del chip, el modo de programación, (DIO, DOUT, QIO y QOUT), entre otras cosas más, incluyendo el hash de validación.

5.- (ESP32) Unir archivos.
Esto es muy interesante, pues nos crea un archivo único a partir de los elementales.
Con esta función podemos crear un archivo que ya incluye los offsets en donde serán grabados los programas.
Nos sirve para que una vez compilado nuestro programa, podamos generar un archivo único y grabarlo.
Con esto nos olvidamos del entorno de programación y podemos grabar en menor tiempo varios chips.
Una vez generado el archivo único, solo basta grabarlo al chip con la opción "Grabar Volcado"
Un volcado puede ser muy grande, hasta 4 MB o más si se ha cambiado la memoria SPI Flash.
En cambio, un archivo único que incluye el Bootloader, la información de particiones y el programa ejecutable,
solo contiene la información necesaria de los offsets de locación, sin bytes de sobra que serán 0xFF innecesarios.

Ejemplo básico de los archivos necesarios para crear un archivo boot único:
Merged Binary Files.jpg
En este proceso, al menos dos archivos pueden ser unidos, no importa el orden.
Lo que sí es muy importante, son las locaciones de alojamiento.
Este programa pone por defecto las recomendadas por el fabricante y pueden modificarse si se requiere.

Bueno, esto va así por ahora y tal vez pronto me anime a mostrarles cómo generar claves de protección y encriptación para nuestros chips.
Como se podrán dar cuenta, con esta aplicación se pueden crear clones.
Así que sean inteligentes y protejan sus programas basándose en el Identificador. (Chip_ID), pero eso ya es otra historia. :cool:
 

Adjuntos

  • ESP Restorer v1.3.rar
    6.1 MB · Visitas: 47
Actualización v1.4

Básicamente solo se corrigió el congelamiento aleatorio durante los procesos.

El problema era que tenía un error al pasar un puntero a un objeto usando la API CopyMemory.
Ahora los procesos se ejecutan si presentar este inconveniente que, en ciertas ocasiones no permitía ver el proceso hasta que este terminara, lo cual daba la impresión de que el programa se colgaba.

Por cierto, también le agregué una barra de progreso.
 

Adjuntos

  • ESP Restorer v1.4.rar
    6.1 MB · Visitas: 39
Actualización v1.5

Se agregó el modo de conexión RS-232 al microcontrolador vía consola.
Muy útil para comenzar a visualizar el log después de ciertas operaciones.

Actualización v1.5.1

Se actualizaron dos funciones que posiblemente podrían causar error en el modo UART.
Se corrigió una ventana de diálogo.
 

Adjuntos

  • ESP Restorer v1.5.rar
    6.2 MB · Visitas: 59
  • ESP Restorer v1.5.1.rar
    6.2 MB · Visitas: 111
Una pregunta. Ahora tengo el archivo .bin que he leído de la flash del ESP32
¿Alguna idea cómo puedo abrirlo para ver el código fuente?
 
Última edición por un moderador:
El código fuente únicamente lo tiene quien escribió el programa.
Lo que obtienes tras volcar los datos de la memoria SPI Flash de un ESP, solo serán datos binarios.
No contienen el código fuente porque se trata de un archivo ejecutable compilado.
En dado caso que existiera un descompilador para ESP, te mostraría un código fuente en ensamblador.
Y eso si es que el programador no protegió al ESP con claves de seguridad. (Flash Encryption Key y Secure Boot Key)
Si el programador realizó operaciones de seguridad, los datos de la memoria SPI Flash estarán encriptados.
 
El código fuente únicamente lo tiene quien escribió el programa.
Lo que obtienes tras volcar los datos de la memoria SPI Flash de un ESP, solo serán datos binarios.
No contienen el código fuente porque se trata de un archivo ejecutable compilado.
En dado caso que existiera un descompilador para ESP, te mostraría un código fuente en ensamblador.
Y eso si es que el programador no protegió al ESP con claves de seguridad. (Flash Encryption Key y Secure Boot Key)
Si el programador realizó operaciones de seguridad, los datos de la memoria SPI Flash estarán encriptados.
Mucisimas gracias por
El código fuente únicamente lo tiene quien escribió el programa.
Lo que obtienes tras volcar los datos de la memoria SPI Flash de un ESP, solo serán datos binarios.
No contienen el código fuente porque se trata de un archivo ejecutable compilado.
En dado caso que existiera un descompilador para ESP, te mostraría un código fuente en ensamblador.
Y eso si es que el programador no protegió al ESP con claves de seguridad. (Flash Encryption Key y Secure Boot Key)
Si el programador realizó operaciones de seguridad, los datos de la memoria SPI Flash estarán encriptados.

Mucisimas gracias por la respuesta, pero aquí me surgen las dos dudas:

1. dónde se guada la key de encriptacion, se puede leer ?

2. yo copié 4mb de la flash de esp32, hay tres zonas que primero se copia el bootloader y segundo se copia, me imagino la carga de los driver y en tercer lugar se copia el sketch, cuando veo en consola veo que me sale que se coprime los datos , al hacer read_flash lo recupero descomprimidos o en claro, en caso de comprimidos que se usa para discomprimir, perdon por si no me explicado bien, mi español no es tan bueno, gracias.
 
hola. Intento regrabar un esp32 que perdió los datos wifi pero no me deja cargar el nuevo programa encima ni borrar la flash ni restaurar. da error flash.
Alguna opción? paso copia pantallazos.

Stub running...
WARNING: Failed to communicate with the flash chip, read/write operations will fail. Try checking the chip connections or removing any other hardware connected to IOs.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 17344 bytes to 12063...
Writing at 0x00001000... (100 %)

A fatal error occurred: Serial data stream stopped: Possible serial noise or corruption.
--
Identificación: esptool.py v4.3
Serial port COM3
Connecting....
Chip is ESP32-D0WDQ6 (revision v1.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 26MHz
MAC: c8:f0:9e:85:58:78
Uploading stub...
Running stub...
Stub running...
WARNING: Failed to communicate with the flash chip, read/write operations will fail. Try checking the chip connections or removing any other hardware connected to IOs.
Manufacturer: ff
Device: ffff
Detected flash size: Unknown
Hard resetting via RTS pin...
--
Borrar memoria Flash:
Tampoco deja borrar la memoria


Al pulsar termina diciendo: el programa no responde
 
.- Verifica que estés usando la última versión de ESP Restorer.
.- El ESP32 no debe tener conexiones a hardware externo.
.- Asegurarse que se encuentre en modo Boot al momento del flasheo.
.- Utilizar un cable USB de buena calidad.
.- Cambiar de puerto USB.
 
Atrás
Arriba