🛠 Récupérer un Micro bloqué : bootloader Caterina et rituel de l'upload
Objectives
Understand the Micro upload ritual (Caterina bootloader, AVR109 protocol) and learn how to recover a board that no longer accepts any uploads: the 1200 baud window, manual reset, and finally reprogramming the bootloader via ICSP as a last resort.
Hardware
- 1 Arduino Micro (or Pro Micro 32U4) + micro-USB data cable
- As a last resort: an ICSP programmer (for example, another Arduino board set up as Arduino ISP) and a 6-pin ISP cable
Complete code
// Sketch-minimal de controle apres recuperation : clignotement + amorce CDC.
// Apres un upload reussi, cette LED prouve que l'application tourne.
void setup {
pinMode(LED_BUILTIN, OUTPUT); // broche 13
Serial.begin(9600); // CDC USB
}
void loop {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
}
// Ritual d'upload Caterina :
// 1) L'IDE ouvre le port a 1200 bauds (upload.use_1200bps_touch) : le
// bootloader reste actif ~8 s puis redemarre sur l'application.
// 2) Si l'ouverture 1200 ne declenche rien : appuyer sur RESET juste
// apres l'affichage du message de televersement, dans la fenetre de 8 s.
// 3) En secours absolu : graver bootloaders/caterina/Caterina-Micro.hex
// via ICSP (arduino-cli ou IDE > Graver le bootloader).
Expected verification
After double-pressing reset (or setting 1200 baud), the USB port disappears and then reappears with the bootloader PID (0x8037 for 0x2341); the upload succeeds and the minimal sketch makes LED 13 blink rapidly. In case of ICSP reprogramming, the fuse and bootloader are restored and uploads return to normal.
Common errors
- Starting the upload too late after reset: the Caterina window lasts only about 8 seconds.
- Believing the board is dead when a sketch disables USB or waits for Serial: hold reset while plugging in, then upload immediately.
- Wrong port selected: during reset, the COM port number may change (different device).
- Writing a sketch that globally disables interrupts: Caterina may then miss the reset clock; the Arduino core handles the jump to the bootloader, but low-level code must remain cautious (see issues #122/#218).
- Confusing PIDs: 0x0037 = application port, 0x8037 = bootloader; the Genuino Micro uses VID 0x2A03.
- Flashing a Leonardo hex onto a Micro: use exclusively Caterina-Micro.hex.
Other tutorials for this board
- Faire clignoter la LED embarquée (et comprendre les LED TX/RX)
- Lire un bouton avec une résistance de pull-up interne
- Lire un capteur analogique sur le convertisseur 10 bits
- Transformer le Micro en clavier USB (HID) avec bouton de sécurité
- Pont Serial vers Serial1 : passerelle USB vers TTL
- Piloter un servo moteur avec le PWM et un potentiomètre
Code examples for this board
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino