Mitunter kommt es vor, dass die Wattuino RC oder Eitech Robo Platine nicht (mehr) als serielles Gerät in der Arduino IDE erkannt wird, und keine Uploads möglich sind. Das Problem scheint primär Windows 10 und einige Linux-Kernel nach 4.15 zu betreffen.
In diesem Fall exportieren Sie den kompilierten Sketch als Binärdatei mit der Tastenkombination Strg+Alt+S oder Menü “Sketch > Kompilierte Binärdatei exportieren”, beispielsweise als “blink.bin” auf dem Desktop.
Methode 1: Massenspeichermodus aktivieren
Drücken Sie nach Anschluss der Platine an den PC zweimal schnell hintereinander (innerhalb von 0,5s) den Reset-Knopf der Platine. Die Platine stellt nun ein 4MB großes USB-Laufwerk zur Verfügung. Unter Windows wird in der Regel der Datenträgerdialog eingeblendet, unter Linux sieht man in der Ausgabe des Befehls dmesg nach:
[82125.183354] scsi 8:0:0:0: Direct-Access Robotics 1.00 PQ: 0 ANSI: 2
[82125.183684] sd 8:0:0:0: Attached scsi generic sg3 type 0
[82125.184291] sd 8:0:0:0: [sdc] 8000 512-byte logical blocks: (4.10 MB/3.91 MiB)
[82125.184927] sd 8:0:0:0: [sdc] Write Protect is off
[82125.184928] sd 8:0:0:0: [sdc] Mode Sense: 0f 00 00 00
[82125.185680] sd 8:0:0:0: [sdc] No Caching mode page found
[82125.185682] sd 8:0:0:0: [sdc] Assuming drive cache: write through
[82125.195858] sdc:
[82125.199319] sd 8:0:0:0: [sdc] Attached SCSI removable disk
Mounten Sie das Laufwerk (hier als “/media/disk/sdc”) und verwenden Sie “cat”, um die exportierte BIN-Datei auf die Platine zu schreiben:
cat "/home/mattias/Desktop/blink.bin" > /media/disk/sdc/X.BIN
Der Name der Zieldatei ist dabei egal, solange er der 8.3 Konvention entspricht und auf “.BIN” endet. Unter Windows verwenden Sie analog den Befehl “type”:
type "C:\Users\Mattias\Desktop\blink.bin" > E:\X.BIN
Da im Gegensatz zum Schreiben mit “bossac” (über den Upload-Button) der geschriebene Flash-Speicher nicht ausgelesen und verifiziert wird, sollte Ihre “setup()” Routine die aufgelötete LED einige Sekunden blinken lassen:
for (int i=0; i<10; i++) {
digitalWrite(36, HIGH);
delay(200);
digitalWrite(36, LOW);
delay(300);
}
Nach erfolgreichem Flashen rebootet die Platine automatisch. Unter Linux kann es nötig sein, sie erzwungen auszuhängen:
sudo umount -f /media/disk/sdc
Hat das Schreiben nicht geklappt, trennt man die Verbindung, verbindet erneut und versucht es noch einmal.
Methode 2: Endlos-Bossac (Linux)
Zuerst ermitteln Sie den Pfad des Bossac-Uploaders, meist ist dies "/home/nutzername/.arduino/packages/arduino/tools/bossac/1.7.0-arduino3/bossac" (Versionsnummern können abweichen). Verbinden Sie die Platine und versetzen Sie diese in den Massenspeichermodus, prüfen Sie erneut mit "dmesg". Anschließend verwenden Sie folgende Schleife in der Shell (oder als Shellscript abgespeichert), um den Bossac-Uploader ewig nach dem Board (an ttyACM0 und ttyACM1) suchen zu lassen, bis die Platine vom Massenspeichermodus zurück in den seriellen Modus schaltet:
retval=1 BOSSAC=/voller/pfad/zum/bossac BINSKETCH=/home/mattias/Desktop/blink.bin while [ "$retval" -gt 0 ] ; do $BOSSAC -i -d --port=ttyACM0 -U true \ -i -e -w -v $BINSKETCH -R || \ $BOSSAC -i -d --port=ttyACM1 -U true \ -i -e -w -v $BINSKETCH -R retval=$? done
Sobald Bossac erfolgreich war, beendet sich die Endlosschleife und Sie können an der Ausgabe sehen, wieviele Bytes geschrieben wurden, sowie sehen "Verify successful".