Laden Sie den Code über die Befehlszeile auf Arduino Leonardo hoch


7

Ich versuche, eine kompilierte .hex-Datei über das Terminal auf einen Arduino Leonardo hochzuladen. Das Hochladen eines Beispielcodes mit der Arduino IDE funktioniert gut, und von der Arduino IDE habe ich den Upload-Befehl erhalten

avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

Bei der Ausführung wurde jedoch der folgende Fehler angezeigt

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53] 
avrdude: Recv: . [15] 

avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding

Was ist falsch?

Antworten:


3

Das Problem mit dem Leonardo ist, dass es nicht automatisch zurückgesetzt wird, wenn Sie die serielle Schnittstelle öffnen, wie dies bei Boards wie dem Uno der Fall ist.

Die Arduino IDE enthält Code zum manuellen Zurücksetzen der Karte (durch Öffnen der seriellen Schnittstelle bei 1200 Baud und erneutes Schließen), den avrdude nicht hat.

Grundsätzlich benötigen Sie eine andere Methode, um das Board zurückzusetzen, damit es in den Bootloader gelangt. Dies kann so einfach sein, dass Sie zum richtigen Zeitpunkt nur die Reset-Taste drücken (die LED wird im Bootloader-Modus ein- und ausgeblendet) oder die serielle Schnittstelle mit 1200 Baud mit einem Befehlszeilenprogramm öffnen und kurz vor dem Ausführen von avrdude wieder schließen .

Ich habe meinen Leonardo momentan nicht zur Hand, aber vielleicht haben Sie etwas Glück beim Laufen:

stty -F /dev/ttyACM0 ispeed 1200 ospeed 1200 && avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

Das funktioniert bei mir nicht.
Cerin

3

Nach einigem Ausprobieren habe ich eine einfache Binärdatei zum Hochladen in den Leonardo-Bootloader erstellt. Diese Binärdatei öffnet die Seriennummer bei 1200 Baud, schließt sie dann und verpackt die Avrdude-Binärdatei, um sie .hexin Flash zu schreiben .

Im Arduino-Kern können CDC.cppwir sehen, dass CDC nicht nur auf Baudrate 1200 wartet, sondern CDC auch den DTR-Wert überprüft. Wenn DTR hoch geht, bricht CDC ab, um in den Bootloader zu springen. Deshalb habe ich den DTR-Wert gelöscht. Ich habe dies in Ubuntu 16.04 versucht.

https://github.com/vanbwodonk/leonardoUploader

Verwenden Sie nur diesen einfachen Befehl:

leonardoUploader /dev/ttyACM0 Blink.ino.hex

Ich hoffe, es hilft anderen Menschen, die danach suchen.


0

Eine Windows-Lösung finden Sie hier: Wie kann ich einen Leonardo zum Zurücksetzen mit avrdude zwingen? . Ich habe einen einfachen Bat File Wrapper erstellt, der den Avrdude-Aufruf automatisiert. Es identifiziert den Leonardo-COM-Port mit WMI, setzt diesen COM-Port mit dem Befehl mode auf 1200 Baud zurück, identifiziert dann den COM-Port des Bootloaders und ruft avrdude auf.

Die Firmware sollte in firmware.hex abgelegt werden, aber die bat-Datei kann so geändert werden, dass sie über die Befehlszeile bereitgestellt wird.

Ich habe den Code in GitHub repo eingefügt : Einfacher Wrapper für avrdude, um das Hochladen der Firmware von der Befehlszeile auf Arduino Leonardo zu ermöglichen .


1
Dies ist nur eine Linkantwort und sollte überarbeitet oder gelöscht werden.
Code Gorilla
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.