🛠 Strapping GPIO2/8/9 : le diagnostic de boot
Objectifs
Au moment du reset, le ESP32-C3 échantillonne trois broches de strapping : GPIO2, GPIO8 et GPIO9. Leur niveau décide du mode de démarrage (flash, JTAG, messages ROM). Un capteur, un NeoPixel ou un pull-down mal placé sur l'une d'elles produit des boot loops, des « invalid header » ou des ports USB fantômes. Ce tutoriel apprend à diagnostiquer l'état de ces broches et la raison du reset.
Matériel
- 1 carte ESP32-C3
- 3 jumpers pour tirer les broches vers GND en test
- Console USB-Serial/JTAG ouverte
Code complet
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); }
Vérification attendue
Au repos, GPIO9 (bouton BOOT) et GPIO8 lisent 1, GPIO2 est libre. En tirant GPIO9 à la masse puis en resetant, le log affiche le passage en mode téléchargement ; en tirant GPIO8 vers le bas, le comportement de boot change (messages ROM désactivés, mode modifié). Le diagnostic croise ces niveaux avec la raison de reset.
Erreurs fréquentes
- LED ou NeoPixel sur GPIO8 avec pull-down au repos : la broche de strapping est lue à 0 au reset et le boot diverge ; déplacer la data sur GPIO0-7 ou 10+.
- Interpréter un brown-out (raison 8) comme un problème de strapping : mesurer l'alimentation avant d'accuser les broches.
- Oublier que GPIO9 est le bouton BOOT : le maintenir pendant le flash est normal pour flasher, mais un appui au mauvais moment pendant le reset fait redémarrer en mode téléchargement.
- Compter sur la lecture runtime des broches pour connaître le niveau au reset : seul le niveau présent à l'instant du reset compte ; rejouer le reset pour observer.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino