Imposible subir codigo a ESP32

He diseñado una PCB, cuyo cerebro principal es una ESP32. Todas las conexiones refertes al conversor USB-UART estan copiadas de la siguiente placa:

Esquemas de referencia

Cuando intento subir algo de código usando la interfície de Arduino IDE, me sale un mensaje de Conectando... que permanece ahí hasta que aparece el error de timeout. Independientemente de los botones que pulse o de cualquier otro factor, aparece el siguiente mensaje:

esptool.py v3.0-dev
Serial port COM8
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

Además de esto, tengo añadidos un par de LEDs, conectados a RX-TX y a TX-RX. En ocasiones, mientras está tratando de conectarse a la placa, parpadean como si estuvieran transmitiendo algo.

Me estoy perdiendo algo? Algún proceso previo a cargar el código...

Gracias!

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @pepitogrillo7281.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Ese problema se debe muchas veces al cable con el que alimentas el ESP32.

  1. que sea un cable de datos o no podrás hacerlo funcionar
  2. debe ser un buen cable, de calidad, porque los cables baratos, tienen mucha una importante caída de tensión debido a su resistencia x metro.

Si no funciona te daré luego mas instrucciones, vamos de menos a mas.

Gracias por tus respuestas!

He probado con varios cables. La mayoría de ellos eran cables de datos, ya que con los cables que no son de datos no me aparece ningun dispositivo conectado en ningun puerto.

Estoy usando una fuente externa para alimentar la placa, por evitar alimentarla toda desde el cable. Tengo 3,252V en la propia placa.

Pese a esto, sigo sin poder hacer desaparecer el mensaje.

Si pero no sabes si hay momentos que cae la tensión a 2.0 por decirte algo.

No comprendes lo que digo.
Por un lado el cable de datos, por lo visto, esta bien.
Por otro lado, a veces el cable no funciona bien en los momentos que el ESP consume mucha corriente, durante TX Y RX, eso no lo puedes ver con un tester.

Estoy usando una fuente commutada de 3A para alimentar la placa, en donde tengo dos reguladores AMS1117-3.3 para estabilizar hasta los 3,3V que necesita el ESP. En todos los pines de alimentación del microcontrolador tengo condensadores de desacoplo de 100nF, y un bulk a la salida del regulador de 100uF.

Según cálculos, los reguladores son capaces de sumistrar un corriente constante de 2A, y los condensadores deberían ayudar a mantener la tensión algo constante en momentos puntuales de alto consumo.

En ningún momento los reguladores se calientan.

Sumado a todo esto, está la alimentación del cable.

Qué otras alternativas tengo para verificar si el consumo es el problema? Y en caso contrario, qué otra opción hay? He probado a conectar un FTDI al TX y RX (y al GND), y hacer un reset manual con los botones, pero sigue apareciendo el mismo error...

Gracias!

Supongo que el error estará en la gestión de los pines de BOOT y EN. Haciendo pruebas con el FTDI y controlando dichos pines con los botones, consegúi hacer aparecer el siguiente error:

Con mucho esfuerzo he visto que dice que no reconoce tu chip.
Asi que empieza por determinar correctamente el chip ESP32.
No inventes, empieza por ESP32 dev module y luego prueba con otros.
Si no, agrega un link con el sitio donde lo compraste para poder ayudarte.
Ahora mira lo que te pongo mas abajo

Moderador
Lee las normas, no pongas capturas de errores sino el error con etiquetas de código
Ahora no borres lo posteado.
Responde en un nuevo post con el error indicado. Copia y pega usando etiquetas.

Hi
Haz tratado de compilar el sketch con el esp32 fuera de la tarjeta que disenastes?

Simplemente actualizando la libreria por defecto de ESP32 en Arduino IDE ya me solucionó este error. Salen varias cosas:

Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00003fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x00051fff...
Compressed 14880 bytes to 10569...
Writing at 0x00000000... (100 %)
Traceback (most recent call last):
  File "esptool\__init__.py", line 1064, in _main
  File "esptool\__init__.py", line 859, in main
  File "esptool\cmds.py", line 595, in write_flash
  File "esptool\loader.py", line 131, in inner
  File "esptool\loader.py", line 1032, in flash_defl_block
  File "esptool\loader.py", line 435, in check_command
  File "esptool\loader.py", line 404, in command
  File "esptool\loader.py", line 337, in read
StopIteration

A fatal error occurred: The chip stopped responding.
A fatal error occurred: The chip stopped responding.

En este punto me salen diferentes errores, uno es este, otro es el siguiente:

A fatal error occurred: Invalid head of packet (0x45): Possible serial noise or corruption.

Y finalmente, algunas veces, el programa se carga correctamente. Supongo que el error ahora es que mi placa ya está llena de chapuzas, y las conexiones de TX y RX deben tener un festival de interferencias.

De momento validaré todo lo que pueda así y luego probaré con otra placa.

Muchísimas gracias!

Coloca acá el esquemático que has usado.

Aquí los esquemas:

Después de pruebas, sigo sin ver el fallo. Hay veces que entra correctamente en el modo de boot, pero muchas no.

He visto que el ESP envía un mensaje por serial al reiniciarse. Si mantengo el botón de BOOT y luego el de EN, recibo el siguiente mensaje:

rst:0x1 (POWERON),boot:0x14 (SPI_FLASH_BOOT)

y cuando lo hago sin el BOOT aparece el siguiente:

rst:0x1 (POWERON),boot:0x1c (SPI_FAST_FLASH_BOOT)

Según he leído en el siguiente post (Boot Mode Selection - ESP32 - — esptool.py latest documentation) el byte de boot hace referencia al estado de varios GPIO del chip. Cada bit es un GPIO distinto. Aún así, forzando un GPIO (en este caso el 4 a GND y posteriormente a 3V3) no hace cambiar el byte que se me envía.

Entiendo que este es el principal error de la placa, ya que el ESP no entra siempre en modo BOOT y, por lo cual, no se le puede subir ningún programa.

Te falta agregar un capacitor de 1uF al pin En (Reset) sino las señales RESET y BOOT no tienen los tiempos adecuados y no son interpretadas correctamente por el micro entonces no entra en modo bootloader.

Fuente: Documentación de Ai-Thinker

Entiendo que los condensadores es un modo sencillo de evitar el bouncing. Dependiendo de la placa de desarrollo que se tome como referencia, se puden ver condensadores de diferentes tamaños. En la página oficial de Espessif encontré un esquema con un condensador de 100nF (que es el que tengo yo incluido): https://dl.espressif.com/dl/schematics/esp32_devkitc_v4-sch.pdf

Además, está también la opción de mandar al ESP a modo de bootloader de manera manual: con los botones de BOOT y EN (Boot Mode Selection - ESP32 - — esptool.py latest documentation). De ser críticos los tiempos de los señales que dices, sería muy dificil cuadrarlos de manera manual.

Igulamente probaré a cambiar el condensador en cuando me sea posible y ya diré.

Muchas gracias!

Yo no dije que era para debouncing, es para que entre al bootloader automáticamente.

Si hubieses leído unos párrafos más arriba en el documento que adjuntaste (Boot mode selection...") hubieses encontrado:

If this circuitry is implemented (all Espressif boards have it), adding a capacitor between the EN pin and GND (in the 1uF-10uF range) is necessary for the reset circuitry to work reliably.

O sea

Si se implementa este circuito (todas las placas Espressif lo tienen), es necesario agregar un capacitor entre el pin EN y GND (en el rango de 1 uF a 10 uF) para que el circuito de reinicio funcione de manera confiable.

Si no pones el capacitor de 1uF (u otro valor hasta 10uF) no va a cargar automáticamente ni que le reces a todos los santos (mejor dicho, algunas pocas veces puede que funcione pero la mayoría no va a entrar), pero haz como quieras.

Por otro lado, en modo manual, no importa cuanto tiempo pulses IO0 siempre y cuando terminado el pulso de reset (sea pulsando el botón RST o enviado desde el pc), IO0 esté en LOW.

Estoy completamente de acuerdo con la elección del condensador, pero el mensaje me aparece usando los botones.

Entiendo que para el modo manual, el valor de dicho condensador no es tan crítico. Y de ser así, sigo sin ver el motivo por el que el ESP es incapaz de entrar en modo BOOT.

Gracias!

Para el modo manual no es necesario el cap de 1 a 10uF, solo el de 100nF.

Creo que entendí mal el problema, pensé que querías subir el código sin tener que pulsar ningún botón pero ahora veo que no carga ni siquiera pulsándolos.

Prueba puenteando la R entre Tx del ESP y Rx del CP.
Baja la R entre Rx del ESP y Tx del CP a 470 ohms.

Retira los LED de ambas líneas.

Hi,
Yo uso el circuito adjunto en una tarjeta que fabrique para resetear el micro 328P sin problemas. Yo uso el dtr del usb adapter rs232 adjunto foto. Puedes tratarlo para ver si te trabaja con esp32

El error resultó ser mucho más simple: estaba escojiendo la placa que no era. Es un ESP32S3, no un ESP32. Cambiando el chip ya empezó a cuadrar más todo lo sucedido.

Igualmente, gracias!

Y que te dije en aquel momento?