en/AVRDude

Einleitung

Avrdude ist ein Kommandozeilentool zur Programmierung von (Atmel) Mikrocontrollern. avrdude ist sowohl für Windows als auch für Linux verfügbar. Wobei es unter Linux die bevozugte Variante ist Atmel Mikrocontroller zu beschreiben, da Programme wie ponyprog o.ä. nicht verfügbar sind und auch nicht (zuverlässig) in Virtuellen Maschinen wie z.B. vmware oder Virtualbox funktionieren.

Es muss mindestens die aktuelle Version 5.11 von avrdude installiert sein.

(Es ist wohl nicht mehr notwendig das avrdude zu patchen seit der Offiziellen 5.11 Version von avrdude ist es als "butterfly_mk" anzusprechen (https://github.com/ndim/avrdude/commit/45fa3bd5b5d5fbf30776331148e74c30f0f2ff83))

Anwendung

mit Bootloader (seriell)am nativen Seriellen Port

avrdude -p m644 -P /dev/ttyS0 -c butterfly_mk -b 57600 -U flash:w:<Flight-Ctrl_MEGA644_V0_xy.hex>

USB2Serial Adapter .

avrdude -p m644 -P /dev/ttyUSB0 -c butterfly_mk -b 57600 -U flash:w:<Flight-Ctrl_MEGA644_V0_xy.hex>

Bluetooth .

rfcomm bind 0 <MAC-ADRESSE>

avrdude -p m644 -P /dev/rfcomm0 -c butterfly_mk -b 57600 -U flash:w:<Flight-Ctrl_MEGA644_V0_xy.hex>

Anwendung via ISP

Die Programmierung des Mikrocontrollers unter Verwendung des ISP-Anschlusses kann folgende Gründe haben: Der Bootloader soll erst eingespielt werden (Erstinbetriebnahme) oder Verzicht des Bootloaders und direktes einspielen der Firmware.

Um die In-System-Programmierung an der FL-CTRL nutzen zu können, muss zu aller erst das 6-polige Flachbandkabel mit dem einen Ende an ISP2 der Sercon (Jumper muss gesetzt sein) und das andere Ende natürlich an die FL-CTRL (SV1).

Testen der Verbindung zwischen PC und Mikrocontroller:

avrdude -p m644 -F -c ponyser -P /dev/ttyS0 -v -U lfuse:r:-:i

Kurze Erläuterung:

  • -p gibt den Mikroprozessortyp an
  • -c Gibt den Programmieradapter an -> in diesem Fall SerCon-Kompatibel an der 6-Pol ISP Buchse

  • -P gibt den Anschluss am PC an -> in diesem Falle COM1 unter Linux

  • -F veranlasst avrdude die Chipsignatur zu ignorieren, dass ist beim 644P nötig, denn avrdude kennt nur den 644. Beim P stimmt die Signatur nicht mit der im dude hinterlegten überein und er verweigert sonst das Beschreiben des Chips (ToDo: Diese Information scheint veraltet zu sein, "-p m644p" funktioniert ohne "-F" anstandslos)

  • -U macht eine Speicheroperation - Speichertyp:Lesen/Schreiben:DatenOrt(:Datentyp)

  • -v Ausgabe mehr Debuginformationen

Dann erhalten wir eine Ausgabe des gesetzten lfuse. Praktischerweise gibt avrdude dank der Option -v gleich alle gesetzten Fusebits aus. Solltet Ihr ein Timeout erhalten stimmt irgendetwas bei der Kommunikation nicht und Ihr solltet nicht fortfahren. Evtl. müsst Ihr avrdude als "root" oder mittels "sudo" starten damit Ihr die Rechte habt auf den COM-Port zuzugreifen. Auf jeden Fall sollte man sich die Statusausgaben von avrdude nach jeder Aktion genau ansehen, denn Fehler im Ablauf erkennt man meist nur an der Statusausgabe oder einem Verify-Error nach der durchgeführten Aktion.

Die konfiguration der Fusebits sollte auf bereits benutzten Controllern unnötig sein. Setzen der Fusebits:

avrdude -p m644 -F -c ponyser -P /dev/ttyS0 -v -U lfuse:w:0xFF:m -U hfuse:w:0xDC:m -U efuse:w:0xFD:m

Achtung: Dies sind die Fusebits die bei mir gesetzt waren, sollte woanders auch gehen, ist aber zumindest von mir ungetestet da bereits konfiguriert gewesen

Sollten sich die Fusebits nicht setzen lassen --zu erkennen am "verify Error"--, kann man versuchen den gesamten Chip (Flash+EEPROM) zu löschen. Avrdude bietet dazu die Option -e

avrdude -p m644 -F -c ponyser -P /dev/ttyS0 -v -e

Sollte bis hier her alles geklappt haben kann man entweder den Bootloader oder direkt die FL-CTRL Firmware einspielen:

Flashen des Bootloaders (Bevorzugte Variante):

avrdude -p m644 -F -c ponyser -P /dev/ttyS0 -v -U flash:w:BootLoader_MEGA644_20MHZ_V0_1.hex

Alternativ - direktes Flashen der Firmware (ohne Bootloader):

avrdude -p m644 -F -c ponyser -P /dev/ttyS0 -v -U flash:w:Flight-Ctrl_MEGA644_V0_69k.hex

Sollte die Firmware direkt geflasht werden ist es nicht möglich weitere Firmwareupdates seriell (z.B. übers MK-Tool) einzuspielen, es ist dann notwendig dies ebenfalls über ISP (6-pol. Stecker) zu erledigen.