🛠 Sauver une Due invisible : bouton Erase, SAM-BA et bossac en secours
Objetivos
Contraintuitivo pero documentado: a diferencia de los AVR, el SAM3X debe BORRAR su flash antes de cualquier reprogramación cuando ya se está ejecutando un sketch. Normalmente, el IDE se encarga de esto mediante el comando de 1200 baudios (el «touch» que hace que la tarjeta vuelva al bootloader sam-ba). Pero cuando la tarjeta se vuelve invisible —sin puerto de Programación, sin puerto Nativo, un sketch errático que apaga el USB desde el arranque— es necesario seguir el procedimiento manual: botón Erase + bossac o SAM-BA. Este tutorial es la garantía antipánico para todos los demás.
Material
- 1 Arduino Due (o clon) que se ha vuelto intratable o que rechaza la carga del programa
- Cable micro-USB de datos conectado al puerto de Programación
- Arduino IDE (core SAM) o arduino-cli; como último recurso, la herramienta Atmel/Microchip SAM-BA (el monitor ROM del SAM3X está presente en la UART del puerto de Programación)
- El botón ERASE está en la tarjeta, junto al botón RESET (y al conector JTAG)
Código completo
Procedure 1 — reprogrammation manuelle au bouton Erase
1. Brancher le port Programming au PC ; verifier qu'un port serie apparait.
2. Maintenir le bouton ERASE enfonce.
3. Tout en maintenant ERASE, lancer Televerser dans l'IDE.
4. Relacher ERASE quand la progression demarre (le bootloader efface
puis ecrit). Le sketch precedent 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 apres ecriture
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, verifier la puce du port Native : televerser via
Programming (16U2 ou equivalent), le Native peut etre 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 apres recuperation :
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(".");
}
Verificación esperada
Después del procedimiento 1 o 2, la carga del programa finaliza sin errores de bossac y el sketch de prueba hace parpadear rápidamente el LED 13 mientras escribe puntos en el puerto de Programación. En el procedimiento 3, SAM-BA detecta el SAM3X en la UART (a 1300000 baudios o a la velocidad propuesta por la herramienta) y lo borra; la tarjeta vuelve a aparecer en el IDE.
Errores frecuentes
- Soltar ERASE demasiado pronto: el borrado no comienza, la carga del programa falla por timeout; mantén el botón pulsado hasta que la barra de progreso comience realmente.
- Confundir RESET y ERASE: RESET solo reinicia, es ERASE el que vacía la flash — el SAM3X se niega a escribir sobre un programa válido sin un borrado previo.
- Insistir con el puerto Nativo en un clon: muchos clones no tienen el verdadero controlador USB del SAM3X; el puerto de Programación es la vía de socorro oficial.
- Culpar a la tarjeta antes que al cable: una gran parte de las «Due inservibles» se deben a cables de solo carga o a puertos USB de hubs mal alimentados.
- Un sketch que corta el USB al arrancar (sueño profundo, error de hardware) deja mudo el puerto Nativo: este es precisamente el caso de uso del botón Erase, no deduzcas que la flash está muerta.
- En SAM-BA, equivocarse de objetivo de memoria o borrar la zona del bootloader sin recargarlo: la carga normal desde el IDE NO reescribe el bootloader; si este se pierde, recárgalo mediante SAM-BA o JTAG con el binario proporcionado por ArduinoCore-sam.
- Olvidar seleccionar «Arduino Due (Programming Port)» después de la recuperación: el IDE sigue apuntando al antiguo puerto desaparecido.
Otros tutoriales para esta placa
- 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)
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino