🛠 Réparer une UNO muette : 16U2, DFU et programmation ICSP
Objectifs
Redevenir maître de sa carte quand le téléversement échoue : comprendre les deux processeurs de l'UNO (l'ATmega328P applicatif avec son bootloader STK500/Optiboot, et l'ATmega16U2 qui fait le pont USB-série et possède son propre bootloader DFU), savoir rétablir l'un ou l'autre, et court-circuiter le bootloader par l'ICSP.
Matériel
- 1 Arduino UNO R3 « morte » (port USB invisible, ou téléversement qui timeout)
- 1 seconde Arduino (UNO/autre) comme programmateur ISP + 6 fils Dupont, ou un programmateur USBasp/AVRISP
- Arduino IDE avec arduino-core AVR, ou arduino-cli + avrdude en ligne de commande
- Sur les vieilles R1/R2 : la puce est un ATmega8U2, procédure DFU différente — vérifiez la référence marquée sur la puce.
Code complet
- Diagnostic — le 328P est-il vivant ? Un croquis déjà téléversé tourne-t-il ? (LED qui pulse = bootloader OK, problème côté port/IDE). 2) Programmation ICSP avec une seconde UNO comme ISP :
Câblage ISP (UNO programmateur -> UNO cible), broches identiques broche à broche :
1 (MOSI) -> 1 (MOSI) 2 (VCC 5V) -> 2 (VCC)
3 (GND) -> 3 (GND) 4 (MISO) -> 4 (MISO)
5 (SCK) -> 5 (SCK) 6 (RESET) -> 6 (RESET)
# Avec arduino-cli (une fois la carte cible « Arduino Uno » sélectionnée) :
arduino-cli core install arduino:avr
arduino-cli program --protocol arduino --board arduino:avr:uno firmware.hex
# Bootloader : « Graver la séquence d'initialisation » dans l'IDE, ou :
arduino-cli burn-bootloader -b arduino:avr:uno -p /dev/ttyACM0 # via ISP d'une carte ISP
# Si le port USB a disparu (16U2 bloqué par un reflash raté) :
# court-circuiter les deux broches du jump « RESET-ATMEGA16U2 » (à côté de la puce),
# brancher l'USB, puis flasher le firmware USB via DFU :
dfu-programmer atmega16u2 erase
dfu-programmer atmega16u2 flash atmega16u2-mk3-arduino-1.0.1.hex
dfu-programmer atmega16u2 reset
Vérification attendue
Après gravure du bootloader par ICSP : le 328P clignote à nouveau son bootloader (LED L en rythme rapide au démarrage) et le téléversement par USB refonctionne. Après reflash DFU du 16U2 : le port série réapparaît dans le gestionnaire de périphériques. Le test final : Blink téléversé, puis débrancher/rebrancher — la LED repart seule.
Erreurs fréquentes
- Confondre les deux puces : un port USB qui disparaît = 16U2 (DFU) ; un timeout de téléversement alors que le port existe = 328P (bootloader, à graver par ICSP).
- Reflasher le 16U2 en DFU et se tromper de firmware (mk2 vs mk3, ou 8U2 sur une R3) : le port reste invisible jusqu'au prochain DFU réussi — d'où les jumpers de reset du 16U2, à ne pas confondre avec le reset du 328P.
- Oublier d'alimenter la carte cible en ISP (broche 2 VCC) : avrdude répond « target not responding ».
- Les clones : régulateur et puce USB différents, les firmwares officiels Arduino ne s'appliquent pas — cherchez le firmware du fabricant du clone.
- Alimentation jack à 20 V pendant la manip : le régulateur linéaire chauffe, et VIN n'a AUCUNE protection contre l'inversion de polarité — n'injectez jamais de puissance par VIN sans diode externe.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino