domingo, septiembre 09, 2018

Unbrick ESP12-F

domingo, septiembre 09, 2018

La verdad es que he tenido bastantes dolores de cabeza con este chip, y no sabía por qué.

El hermano mayor del ESP-01 en mis proyectos de domótica se estaba portando mal, y no entendía por qué. 

En primer lugar a la hora de flashear el esquema que se comenta en la documentación oficial no coincide con el que realmente funciona:

Esquema funcional en modo flasheo
Utilizando este esquema el pin que decide qué modo lanzar es el GPIO0, si apunta a GROUND es modo flasheo, si apunta a VCC (con y sin resistencia) o se deja libre arranca normal. El reset aunque esté en la imagen al VCC no es necesario (y la lógica te pide que no lo pongas).

Las resistencias que he utilizado son de 1k, pero hay gente que haciendo esquemas parecidos utilizando pull ups con resistencias de 10k ha conseguido el mismo resultado.

Al parecer, investigando bastante encontré por casualidad que existía un bug relacionado con la herramienta esptool (aunque no estoy seguro que se generaba desde ahí) cuando se quería probar un firmware de iniciación a este tipo de chips que funcionaba bien en ESP-12E pero no en el ESP-12F (dejaba de arrancar).

El código que devolvía, a 76800 baudios (que no era fácil saber a cuantos se quejaba era el siguiente).

ets Jan  8 2013,rst cause:2, boot mode:(1,7)

La solución es más sencilla de lo que parece (una vez que la encuentras pues todo parece más sencillo), y es que hay que reflashear el bootloader (0x00000), el init_data (0x3fc000) y además hay que limpiar una serie de partes de la memoria (0x3e000 y 0x3fe000):

  • 0x00000 -> (boot)
  • 0x3fc000 -> (esp_init_data_default)
  • 0x3e000 -> (blank)
  • 0x3fe000 -> (blank)
El sdk y los binarios se pueden encontrar en la siguiente dirección:


Los datos relacionados con las direcciones de memoria de cada chip aquí:


Los blank los puedes generar con dd apuntando a /dev/zero y hacer bloques de 1MB para cada dirección de memoria. He leído que hay gente que lo que hace es generar uno del tamaño de la memoria y reflashear, aunque de la otra manera queda más ordenado.

Una vez terminado se obtiene una respuesta correcta con el firmware que se desee subir.
Bit
Hide Me!