Was passiert wirklich , wenn ich mit dem Optiboot-Bootloader eine neue Skizze auf meinen Arduino Uno hochlade ?
- Was wird an den Arduino gesendet?
- Wie reagiert es?
- Was bedeutet "nicht synchron"?
- Was ist eigentlich "synchron"?
Hinweis: Dies ist als "Referenzfrage" gedacht .
arduino-uno
bootloader
Nick Gammon
quelle
quelle
Antworten:
Wenn Sie einen Uno zurücksetzen, auf dem der Optiboot Loader ausgeführt wird, blinkt der Bootloader zuerst dreimal auf Pin 13.
Die obere Linie (grau) wird an den Arduino gesendet , die mittlere Linie (orange) wird vom Arduino gesendet .
Währenddessen
avrdude
sendet das auf Ihrem Computer ausgeführte Programm eine Abfrage an das Gerät:Das Arduino bemerkt das erste "Synchronisieren" nicht, weil es beschäftigt ist, Pin 13 zu blinken. Sobald es fertig ist, bemerkt es das "Synchronisieren" (es würde von der seriellen Hardware gepuffert werden) und antwortet:
Es sieht so aus, als ob avrdude etwas ungeduldig geworden ist und eine Zeitüberschreitung festgestellt hat, weil es es erneut mit der Abfrage "Synchronisierung abrufen" versucht. Diesmal reagiert Optiboot sofort.
Der Rest des Uploads wird im nächsten Bild beschrieben. Beispiel für das Hochladen des "Blink" -Programms.
(Klicken Sie auf das Bild oben für eine größere Version)
Die Schritte sind:
Geräteparameter einstellen. Die folgenden Geräteparameter werden an den Chip gesendet:
Optiboot ignoriert alle diese und antwortet mit In Sync / OK. :)
Festlegen erweiterter Geräteparameter:
Optiboot ignoriert auch alle diese und antwortet mit In Sync / OK.
Rufen Sie den Programm-Modus auf. Antwort: Synchron / OK.
Unterschrift lesen. Optiboot antwortet mit,
0x1E 0x95 0x0F
ohne die Unterschrift tatsächlich zu lesen .Schreiben Sie die Sicherungen (viermal). Optiboot schreibt die Sicherung nicht, sondern antwortet nur In Sync / OK.
Adresse laden (anfangs 0x0000). Die Adresse wird in Worten angegeben (dh ein Wort besteht aus zwei Bytes). Hiermit wird die Adresse festgelegt, für die die nächste Datenseite geschrieben wird.
Programmseite (bis zu 128 Bytes werden gesendet). Optiboot antwortet sofort mit "In Sync". Dann gibt es eine Pause von ungefähr 4 ms, während die Seite tatsächlich programmiert wird. Dann antwortet es mit "OK".
Adresse laden (jetzt 0x0040). Dies ist die dezimale Adresse 64, d. 128 Bytes vom Beginn des Programmspeichers.
Eine andere Seite ist geschrieben. Diese Sequenz wird fortgesetzt, bis alle Seiten geschrieben sind.
Adresse laden (zurück zu 0x0000). Dies dient zur Überprüfung des Schreibvorgangs.
Leseseite (bis zu 128 Bytes werden gelesen). Dies dient zur Überprüfung. Beachten Sie, dass selbst wenn die Überprüfung fehlschlägt, die fehlerhaften Daten bereits auf den Chip geschrieben wurden.
Programmiermodus verlassen.
Was bedeutet "nicht synchron"?
Wie Sie oben sehen können, wird erwartet, dass der Arduino bei jedem Schritt durch die Programmiersequenz mit "In Sync" (0x14) antwortet, möglicherweise gefolgt von einigen Daten, gefolgt von "OK" (0x10).
Wenn es "nicht synchronisiert" ist, bedeutet dies, dass avrdude nicht die "synchronisierte" Antwort erhalten hat. Mögliche Gründe könnten sein:
Was ist "synchron"?
Wie oben erwähnt, bedeutet die Antwort "In Sync", dass der Arduino (Bootloader) mit dem Upload-Programm synchronisiert ist.
Welches Protokoll wird verwendet?
Das Protokoll ist das von Atmel dokumentierte STK500-Protokoll. Siehe die Referenzen unten.
Verweise
Hinweis : STK500 Version 2 wird in Optiboot nicht verwendet, ist jedoch zur Information enthalten, falls Sie Boards wie das Mega2560 verwenden.
STK500-Konstanten
quelle
avrdude
das standardmäßige Überprüfungsverhalten unterstützt , ein Bootloader ist, der das Auslesen des Flash-Inhalts unterstützt.