🛠 Strapping GPIO2/8/9 : le diagnostic de boot
Objetivos
En el momento del reset, el ESP32-C3 muestrea tres pines de strapping: GPIO2, GPIO8 y GPIO9. Su nivel determina el modo de arranque (flash, JTAG, mensajes ROM). Un sensor, un NeoPixel o una resistencia pull-down mal colocada en uno de ellos produce bucles de arranque, errores de «invalid header» o puertos USB fantasma. Este tutorial enseña a diagnosticar el estado de estos pines y la causa del reset.
Material
- 1 placa ESP32-C3
- 3 jumpers para llevar los pines a GND durante las pruebas
- Consola USB-Serial/JTAG abierta
Código completo
const int STRAP[] = {2, 8, 9}; // broches echantillonnees au reset
void setup {
Serial.begin(115200);
delay(1000); // le temps d'ouvrir le terminal
esp_reset_reason_t r = esp_reset_reason;
Serial.printf("Raison de reset : %d "
"(1=POWERON, 3=SW, 8=BROWNOUT...)\n", (int)r);
for (int p : STRAP) {
pinMode(p, INPUT); // lecture sans forcer de pull
int niveau = digitalRead(p);
Serial.printf("GPIO%d = %d %s\n", p, niveau,
niveau == 0 ? "<- BAS : risque au prochain reset !"
: "OK");
}
}
void loop { delay(1000); }
Verificación esperada
En reposo, GPIO9 (botón BOOT) y GPIO8 leen 1, GPIO2 está libre. Al llevar GPIO9 a masa y luego reiniciar, el registro muestra el cambio al modo de descarga; al bajar GPIO8, el comportamiento de arranque cambia (mensajes ROM desactivados, modo modificado). El diagnóstico cruza estos niveles con la causa del reset.
Errores frecuentes
- LED o NeoPixel en GPIO8 con pull-down en reposo: el pin de strapping se lee a 0 durante el reset y el arranque diverge; mover la línea de datos a GPIO0-7 o 10+.
- Interpretar un brown-out (causa 8) como un problema de strapping: medir la alimentación antes de culpar a los pines.
- Olvidar que GPIO9 es el botón BOOT: mantenerlo presionado durante el flasheo es normal para grabar, pero pulsarlo en el momento equivocado durante el reset provoca un reinicio en modo de descarga.
- Confiar en la lectura en tiempo de ejecución de los pines para conocer el nivel durante el reset: solo cuenta el nivel presente en el instante del reset; repetir el reset para observar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino