🛠 Sauver une Due invisible : bouton Erase, SAM-BA et bossac en secours
Objectifs
Contre-intuitif mais documenté : contrairement aux AVR, le SAM3X doit EFFACER sa flash avant toute re-programmation quand un sketch tourne déjà. Normalement l'IDE s'en charge via la commande 1200 bauds (le « touch » qui fait retomber la carte dans le bootloader sam-ba). Mais quand la carte devient invisible — plus de port Programming, plus de port Native, sketch fou qui éteint l'USB dès le démarrage — il faut la procédure manuelle : bouton Erase + bossac ou SAM-BA. Ce tuto est l'assurance-anti-panique de tous les autres.
Matériel
- 1 Arduino Due (ou clone) devenue introuvable ou refusant le téléversement
- Câble micro-USB data sur le port Programming
- Arduino IDE (core SAM) ou arduino-cli ; en dernier recours, l'outil Atmel/Microchip SAM-BA (le moniteur ROM du SAM3X est présent sur l'UART du port Programming)
- Le bouton ERASE est sur la carte, à côté du bouton RESET (et du connecteur JTAG)
Code complet
Procedure 1 — reprogrammation manuelle au bouton Erase
1. Brancher le port Programming au PC ; vérifier qu'un port série apparait.
2. Maintenir le bouton ERASE enfonce.
3. Tout en maintenant ERASE, lancer Televerser dans l'IDE.
4. Relacher ERASE quand la progression démarre (le bootloader efface
puis écrit). Le sketch précédent est perdu, le nouveau prend la main.
Procedure 2 — bossac en ligne de commande (equivalent de l'IDE)
bossac --port COM7 -b -e -R -U flash:w:sketch.bin:i
# -b reset vers le bootloader, -e efface la flash, -R relance après écriture
Procedure 3 — carte totalement invisible (bootloader brické)
1. Tester un autre cable (la cause n°1 reste le cable de charge seule).
2. Sur les clones, vérifier la puce du port Native : televerser via
Programming (16U2 ou equivalent), le Native peut être inerte.
3. En dernier recours, lancer SAM-BA sur l'UART du port Programming
(moniteur ROM present a l'adresse 0x00030000 du SAM3X) et effacer
la flash depuis l'outil, puis re-téléverser normalement.
4. Le connecteur JTAG permet aussi une reprise par sonde (OpenOCD).
Sketch de test « je suis vivant » a televerser après récupération :
void setup {
pinMode(13, OUTPUT);
Serial.begin(115200); // port Programming
SerialUSB.begin(115200); // port Native
Serial.println("Due recuperee !");
}
void loop {
digitalWrite(13, HIGH); delay(100);
digitalWrite(13, LOW); delay(100);
Serial.print(".");
}
Vérification attendue
Après la procédure 1 ou 2, le téléversement aboutit sans erreur bossac et le sketch de test fait clignoter la LED 13 rapidement tout en écrivant des points sur le port Programming. En procédure 3, SAM-BA détecte le SAM3X sur l'UART (débit 1300000 ou celui proposé par l'outil) et l'efface ; la carte réapparaît ensuite dans l'IDE.
Erreurs fréquentes
- Relâcher ERASE trop tôt : l'effacement ne démarre pas, le téléversement retombe en timeout ; maintenir le bouton jusqu'au lancement réel de la progression.
- Confondre RESET et ERASE : RESET redémarre seulement, c'est ERASE qui vide la flash — le SAM3X refuse d'écrire par-dessus un programme valide sans effacement préalable.
- S'acharner avec le port Native sur un clone : beaucoup de clones n'ont pas le vrai contrôleur USB du SAM3X ; le port Programming est la voie de secours officielle.
- Accuser la carte avant le câble : une large part des « Due brickées » sont des câbles de charge seule ou des ports USB hubisés mal alimentés.
- Un sketch qui coupe l'USB au démarrage (sommeil, erreur matérielle) rend le Native muet : c'est précisément le cas d'usage du bouton Erase, ne pas en déduire que la flash est morte.
- En SAM-BA, se tromper de cible mémoire ou effacer la zone du bootloader sans le recharger : le téléversement IDE normal ne réécrit PAS le bootloader ; si celui-ci est perdu, le recharger via SAM-BA ou JTAG avec le binaire fourni par ArduinoCore-sam.
- Oublier de sélectionner « Arduino Due (Programming Port) » après récupération : l'IDE pointe encore sur l'ancien port disparu.
Autres tutoriels pour cette carte
- Faire clignoter la LED de l'Arduino Due et apprivoiser ses deux ports USB
- Lire un potentiomètre avec le vrai ADC 12 bits de la Due
- Allumer une LED externe en respectant les broches 3,3 V et 9 mA de la Due
- Générer une vraie tension analogique avec les DAC 12 bits (broches 66 et 67)
- Dialoguer avec un GPS (ou tout module TTL) sur Serial1 sans bloquer la boucle
- Scanner les deux bus I2C de la Due (Wire sur 20/21, Wire1 sur 70/71)
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino