Reinicio continuo del ESP32

Hola a toda la comunidad. Estoy atravesando un extraño y raro problema y no sé si a alguno de ustedes les ha pasado trabajando con el chip ESP32, les doy el contexto.

ANTECEDENTES.
Estoy trabajando con la tarjeta de desarrollo ESP32 usando el IDE de Arduino y las siguientes URL's para la configuración de la tarjeta y poder cargar mis programas:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
https://dl.espressif.com/dl/package_esp32_index.json

Hasta hace poco la tarjeta cargaba y ejecutaba sin ningún inconveniente mis sketches; sin embargo, de imprevisto el comportamiento de la tarjeta cambio súbitamente arrojándome cada vez que quería volver a cargar un nuevo programa el siguiente mensaje en el monitor serial:

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
ets Jun  8 2016 00:22:57

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
ets Jun  8 2016 00:22:57

rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc

PROBLEMA ACTUAL
Este mensaje es un reinicio continuo de la tarjeta, por alguna razón lo está haciendo y no sale de esta acción. Hasta donde llega mi experiencia no he podido resolver aunque sospecho que es quizás una corrupción de la tarjeta por memoria, mas adelante aporto mas información. Actualmente, tengo la librería 3.0.5 del fabricante Espressif instalado en el IDE. Trabajo para programar la tarjeta con un FTDI FT232RL. He trabajado también con otras tarjetas ESP32 bajo el mismo escenario y no se ha presentado este problema. Me gustaría ahondar mas en este tema ya que la tarjeta funciona pues puedo controlar pines de E/S con leds por lo que al ver este comportamiento sigo sin entender que sucede.

He buscado e investigado información sobre las posibles causas, algunas de las que he encontrado en varios foros y blogs las siguientes:

  • Problema de la frecuencia de flasheo al momento de subir el sketch, recomiendan bajar de 80MHz a 40MHz, realice pruebas y el problema persiste.
  • Algunos blogs mencionan que es un tema de alimentación, en lo personal a mi no me lo parece dado que funciona con otros programas que no impliquen la instalación de un webserver o conexión con red wifi.
  • Sugieren la actualización del core de la tarjeta pero, como mencione previamente, tengo la ultima reciente 3.0.5 del fabricante Espressif y que,dicho sea de paso, funciona con otras tarjetas sin mayores problemas.

Algo que si debo mencionar es que todas las veces que cargo mis programas a la tarjeta uso un jumper para poner en corto los pines ID0 y GND para ponerla en modo de programación; además de que cuando se presentó este problema por primera vez tuve el siguiente error que guarde en mis bitácoras:

rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
[+]: Comienza proceso de configuración y conexión de la red WiFi.
Guru Meditation Error: Core  0 panic'ed (IllegalInstruction). Exception was unhandled.
Memory dump at 0x4019446c: 0a6c83a2 d0f95844 f2568324
Core  0 register dump:
PC      : 0x40194470  PS      : 0x00060430  A0      : 0x80194644  A1      : 0x3ffcc920  
A2      : 0x00000000  A3      : 0x00000001  A4      : 0x00000001  A5      : 0x00000000  
A6      : 0xffffffb5  A7      : 0x00000000  A8      : 0x00000016  A9      : 0x00000021  
A10     : 0xffffffe0  A11     : 0x0000007f  A12     : 0x3ffcad7e  A13     : 0x00000016  
A14     : 0x00000000  A15     : 0x0000002b  SAR     : 0x00000007  EXCCAUSE: 0x00000000  
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0x00000000  

Backtrace: 0x4019446d:0x3ffcc920 0x40194641:0x3ffcc980 0x4019479b:0x3ffcc9d0 0x401915ea:0x3ffcc9f0 0x4019244b:0x3ffcca10 0x40153e29:0x3ffccb10 0x40153ebf:0x3ffccb40 0x4013a651:0x3ffccb60 0x401700ce:0x3ffccb80 0x4017098d:0x3ffccba0 0x4016e9f2:0x3ffccbc0 0x401ac731:0x3ffccbe0 0x40093e92:0x3ffccc10

He documentado lo mejor que he podido acerca de este problema esperando poder encontrar una solución y poder rescatar este hardware así como apoyar a quienes estén atravesando por algo similar. Desde ya muchas gracias por cualquier aporte que nos permita resolver este dilema.

Saludos a la comunidad.

Moderador
Todo lo que sea error o información del monitor serie que contribuye a encontrar un error va con etiquetas de código. Ya lo he modificado.

Tu tema ha sido movido a la sección en español del foro porque usaste el idioma español.

Utiliza el idioma inglés en las secciones en inglés del foro.

1 Like

Cómo alimentas el micro y que tipo de módulo es? Esp32-cam, por ej.?

También experimenté problemas y uso esa ahora

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

que es la primera que marcaste.
y luego en las placas tengo, esp32 de Expressif


Listo, esa configuración me funciona con todos los ESP32.

Hola, te comparto un diagrama de como tengo las conexiones para alimentar y subir mis sketches con el programador FTDI, la placa que uso es la ESP32-CAM y carece de puerto USB por lo que este programador FT232RL hace ese trabajo para conectar a la computadora.

Hola @Surbyte, en mi caso he probado esta misma liga, misma placa en los IDE's 1.8.19 y 2.3.2 y el resultado es el mismo. Como he comentado, este problema se suscitó cuando apareció el error Guru Meditation Error: Core 0 panic'ed (IllegalInstruction). Exception was unhandled. He encontrado en la documentación oficial mas información al respecto y que nos dice en gran medida porque surge el error pero no aporta una solución (cosa rara que el fabricante debería considerar publicar).

https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/fatal-errors.html#guru-meditation-errors

Pero puedes entrar en modo boot y volver a cargar el programa? Si después de cargar sigue igual el problema puede ser de varias cosas: Estas usando un gpio que se usa para la memoria flash, no se deben usar estos pines. Una tarea de freertos retornó, no deben retornar nunca. También puedes probar a borrar la flash e intentar de nuevo. Si esto no funciona entonces creo que la flash está mal...

Hola @harkonnen, buena observación la que haces y que olvide describir. La tarjeta ESP32-CAM solo cuenta con un botón de reset, no tiene un botón de boot. Lo que mencionas sobre pines, el único pin que uso es el ID0 en combinación con un pin GND para subir mis programas. En los sketches que subo a la tarjeta no estoy usando ningún pin, dado que estoy trabajando en proyectos con webserver y en esta fase en realidad no uso pines, por ahora, pero este problema se me presento.

Ahora bien, debido a que esta tarjeta tiene un led integrado lo que hago para probar si el hardware funciona subiendo mis programas es cargar un sketch que encienda y apague dicho led integrado. El resultado es positivo, funciona. Coincido contigo plenamente que posiblemente el problema sea de la memoria flash pues estos errores, de los cuales hay documentación y están identificados por el fabricante, pudiéramos encontrar una respuesta en uno de estas dos posibilidades:

  1. In C++ code, exiting from a non-void function without returning a value is considered to be an undefined behavior. When optimizations are enabled, the compiler will often omit the epilogue in such functions. This most often results in an IllegalInstruction exception. By default, ESP-IDF build system enables -Werror=return-type which means that missing return statements are treated as compile time errors. However if the application project disables compiler warnings, this issue might go undetected and the IllegalInstruction exception will occur at run time.
  2. This CPU exception indicates that the CPU could not read an instruction because the address of the instruction does not belong to a valid region in instruction RAM or ROM. Usually, this means an attempt to call a function pointer, which does not point to valid code. PC (Program Counter) register can be used as an indicator: it will be zero or will contain a garbage value (not 0x4xxxxxxx).

Creo que una solución rápida sería devolver a valores de fábrica la tarjeta, pero desconozco como, estoy investigando al respecto. Si tienes fuentes que me puedas aportar para hacer este proceso de fábrica te lo agradecería muchísimo.

ACTUALIZACION.

Tras realizar mas pruebas, me encuentro con un nuevo error al cargar el sketch de mi interés:

rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
Guru 1 panic'ed (InstrFetchProhibited). Exception was unhandled.

Core 1 register dump:
PC : 0x80082b14 PS : 0x00060031 A0 : 0x80090aa6 A1 : 0x3ffc0c7c
A2 : 0x3ffc4cbc A3 : 0x00000000 A4 : 0x80090747 A5 : 0x3ffbca70
A6 : 0x00000003 A7 : 0x00060023 A8 : 0x800833a4 A9 : 0x3f4077a4
A10 : 0x80000000 A11 : 0x00060021 A12 : 0x00000000 A13 : 0x3ffbca40
A14 : 0x00000005 A15 : 0x00000001 SAR : 0x00000000 EXCCAUSE: 0x00000014
EXCVADDR: 0x80082b14 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000

Backtrace: 0x40082b11:0x3ffc0c7c |<-CORRUPTED

Sus opiniones comunidad, son de gran valor para mi, muchas gracias de antemano.

Saludos.

Borraste en algún momento la flash, antes de subir el sketch?

Hola @Surbyte, no en absoluto. Mi costumbre de trabajo es subir mis sketches a la placa, nunca antes habia borrado la flash.

Fíjate que lo que me llama particularmente la atención es que suben mis programas y se ejecutan sin contratiempos siembre que no tengan código relacionado al web server. Quizás no signifique nada pero es de notar. Sketches sencillos como el manejo del led integrado funcionan sin ningún problema, por eso menciono que es un problema extraño.

Saludos

Hay veces que el borrado de la flash ha resuelto algunos problemas en mi caso.
Quiero decir, por si no me explico bien, que uso el Erase Flash previo para tener una instalación limpia, luego lo desactivo.

1 Like

Y temo decirles que, en mi caso, el borrado de la memoria flash tampoco resuelve el reinicio continuo de la tarjeta. Recapitulando, no puedo cargar sketches grandes relacionados con la instalación de un webserver pero si puedo subir sketches que puedan controlar periféricos y pines gpio. Un caso de este hardware extremadamente raro.

El ESP32 tiene algunas veces como vida propia pero en realidad solo muestra que tenemos que estudiarlo mucho.
Yo he pasado por todo eso. Las versiones de los core y de las librerías son muy delicadas.
Algo que antes funcionaba ahora no, y solo ocurrió una actualización y chau con todo el código que estaba 100% operativo.

A ver, llevamos con mi posteo 14 respuestas y no has publicado el código.
Indica la placa que estas usando, ESP32-CAM y algún detalle mas
Sube el código y veamos si alguien puede hacerlo funcionar.
Yo tengo la ESP32-CAM y recuerdo que hacerlo funcionar me dio su trabajillo.

1 Like

Hola @Surbyte, gracias por tu interés y apoyo. Creo que estoy llegando a una sospecha firme de lo que está sucediendo y es que precisamente ayer, trabajando en otra placa ESP32-CAM que tengo, me apareció un nuevo error y lo comparto:

rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
[+]: configuración exitosa de la memoria spiffs del dispositivo.
[+]: Revisando si hay credenciales de autenticación a alguna red WiFi cercana del vecindario.
[+]: No hay datos para conectar a una red WiFi.
[+]: iniciando configuración de la Red Local Wifi del dispositivo.
[+]: creando Punto de Acceso del dispositivo ESP32-CAM.
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0).

Core 0 register dump:
PC : 0x4008fbb4 PS : 0x00060235 A0 : 0x8008f3a8 A1 : 0x3ffbae00
A2 : 0x3ffbdd74 A3 : 0xffffffff A4 : 0x0000cdcd A5 : 0x00060223
A6 : 0x0d220217 A7 : 0xb33fffff A8 : 0x8008fbb4 A9 : 0x3ffbade0
A10 : 0x00000000 A11 : 0xb33f5454 A12 : 0x0000abab A13 : 0x3f407dd0
A14 : 0x3ffc3c34 A15 : 0x3ffc3c3c SAR : 0x00000000 EXCCAUSE: 0x00000005
EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000

Backtrace: 0x4008fbb1:0x3ffbae00 0x4008f3a5:0x3ffbae30 0x400e7748:0x3ffbae50 0x4008f9ee:0x3ffbae80

ELF file SHA256: 211782aa8369859b

Rebooting...
ets Jul 29 2019 12:21:46

Mi sospecha es que lo que esta ocasionando estos errores son debido a que estoy usando SPIFFS. Buscando información (en google escribe la busqueda asi: "spiffs Guru Meditation Error") y dado a que estoy trabajando con archivos que forman parte de un webserver, es decir archivos html, css, js; estos errores aparecen.

Debo reconocer que fue mi necedad por probar SPIFFS, ya había leído que estaba obsoleto y que podria levantar algunos errores. Si somos un poco analíticos, los problemas que he comentado (Errores detectados en Tarjeta ESP32.txt (4,1 KB)) todos se deben a código que involucra un webserver donde he subido mis archivos via SPIFSS.

@Surbyte, apenas vengo llegando a mi oficina para continuar trabajando en este tema, dejenme hacer pruebas y les comparto resultados, regreso mas tarde.

Saludos.

Prueba por acá

corre algun ejemplo de la librería y mira como se comporta.
paso a paso.. luego que pruebes esto que ahora parece ser lo responsable, de a poco vas incorporando cosas de tu código.
Asi podrías ver en qué momento tienes o no una falla.

Claramente se que vas a proceder asi, pero por si acaso debo decirlo.

Yo cuando tengo problemas asi, me aparto 180 grados de mi código. Y empiezo de nuevo hasta ubicar el punto que genera el inconveniente.

1 Like