heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

Trac
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Register
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

  1. Übertragen von Firmware in den AVR-Mikrocontroller
    1. Programmiersoftware
    2. Programmieradapter für den c't-Bot
      1. BlueMP3
      2. Atmel mkII
      3. mySmartUSB
      4. AVR Dragon
    3. Übertragen der Firmware per Bootloader …
      1. Bootloader & …
      2. Bootloader & …
    4. Übertragen des EEPROM-Abbildes mit …
    5. Setzen der Fuse-Bits
      1. mit avrdude
      2. mit AVR Studio
    6. avrdude in Eclipse einbinden
    7. Hinweise für Besitzer eines ATmega644(P) oder ATmega1284P
  2. Bootloader des c't-Bot
    1. Einstellungen des WiPort

Übertragen von Firmware in den AVR-Mikrocontroller

Diese Seite dient der Sammlung von Tipps rund um verschiedene Programmieradapter. Vorneweg sei aber erst einmal auf die schon im Rahmen des c't-Bot-Projektes gesammelten Infos verwiesen:

  • FAQ-Einträge zum Thema Firmware
  • c't-Artikel mit der Einführung in die Bot-Hardware und den Programmieradapter
  • BlueMP3-ISP-Adapter, der auch beim c't-Bot-Projekt empfohlen wird
  • Erklärung der beim Build entstandenen Dateien ct-Bot.hex und ct-Bot.eep

Wie Sie eigenen Code in eine Firmware verwandeln, die Sie im Folgenden übertragen (alias flashen) können, finden Sie im Abschnitt AVRToolchain

Programmiersoftware

Damit ein fertig compiliertes .hex-File vom PC über den Programmieradapter auf den Mikrocontroller kommt, braucht man eine Programmiersoftware. Die Software avrdude wird im Rahmen der Toolchain mit installiert, siehe AVRToolchain.

  • Ponyprog2000: Nettes Programm mit GUI, das insbesondere mit dem BlueMP3-ISP-Adapter gut harmoniert, jedoch mit USB-Adaptern nicht so richtig klarkommt. Mit dem Bootloader weiß Ponyprog2000 ebenfalls nichts anzufangen.
  • avrdude: Kommandozeilen-Tool, das es für Linux, Windows und Mac gibt. Kann mit (fast) allen Programmieradaptern umgehen und lässt sich auch gut in Eclipse einbinden oder per Skript aufrufen. Kann auch per TCP/IP (LAN/WLAN) einem Bot mit Bootloader neue Firmware verpassen. Avrdude ist unsere Empfehlung! Zur Installation siehe AVRToolchain.
  • avrfuses: Ein GUI-Frontend zu avrdude unter Mac OS X, für alle, die lieber klicken als tippen (avrdude muss installiert sein). Eine ältere Version des Tools gibt es auch für Linux und Windows.
    Unter Windows lässt sich aber alternativ auch das von WinAVR mitgelieferte Programm als GUI für avrdude nutzen.

Programmieradapter für den c't-Bot

Ein Programmieradapter verbindet den ISP-Port des Roboters mit dem PC. Über ihn kann man die Fuse-Bits setzen und die Firmware übertragen, auch wenn der Chip noch völlig leer ist.

Die nachfolgend aufgeführten Kommandozeilen-Argumente (-p m32) gelten jeweils für den ursprünglich im c't-Bot Projekt eingesetzten Mikrocontroller ATmega32. Wer einen neueren Controller einsetzt (ATmega644(P) oder ATmega1284P), findet im Abschnitt unten die dafür nötigen Parameter.

BlueMP3

  • Anschluß an den PC: Parallel-Port
  • Software:
    • Ponyprog2000
    • avrdude -c stk200 -P lpt1 -p m32 -U flash:w:"ct-Bot.hex":i (Unter Linux: -c stk200 -P /dev/parport0)
  • Hinweis: Preiswert und zuverlässig, sofern man einen Parallel-Port (LPT) am PC hat.

Atmel mkII

  • Anschluß an den PC: USB (libusb muss installiert sein, siehe AVRToolchain)
  • Software:
    • avrdude -c avrispv2 -P usb -p m32 -U flash:w:"ct-Bot.hex":i (oder auch -c avrispmkII -P usb)
  • Hinweis: Relativ teuer
  • Achtung: Ist das Erweiterungsmodul installiert, muss man den Stecker des Programmierkabels dort um 180 Grad gedreht einstecken (Layoutfehler).

mySmartUSB

  • Anschluß an den PC: USB
  • Software:
    • Windows: avrdude -c avr911 -P com3 -p m32 -U flash:w:"ct-Bot.hex":i (Treiber liegt dem Programmer bei)
    • Linux: avrdude -c avr911 -P /dev/ttyUSB0 -p m32 -U flash:w:"ct-Bot.hex":i (Treiber?)
    • Mac: avrdude -c avr911 -P /dev/tty.SLAB_USBtoUART -p m32 -U flash:w:"ct-Bot.hex":i (VCP-Treiber für CP2102 von http://www.silabs.com installieren)
  • Hinweis: avrdude Version 5.3.1 funktioniert nicht korrekt => ältere oder neuere Version verwenden

AVR Dragon

  • Anschluß an den PC: USB (libusb muss installiert sein, siehe AVRToolchain)
  • Software:
    • avrdude -c dragon_isp -P usb -p m32 -U flash:w:"ct-Bot.hex":i
  • Hinweis: avrdude Version 5.8 enthält einen Bug (http://savannah.nongnu.org/bugs/?27507), daher 5.7 oder mindestens 5.9 verwenden!

Übertragen der Firmware per Bootloader mit avrdude

Damit das klappt, muss bereits eine Firmware mit Bootloader im Controller sein. Dann kann dieser Bootloader eine neue Firmware in das Flash spielen, ohne dass man wieder einen der obigen Programmieradapter braucht. Um den Bootloader zu transferieren, kommt man aber nicht an einem echten Programmieradapter vorbei. Der Vorteil der Bootloader-Methode ist einerseits die hohe Geschwindigkeit und andererseits klappt das sogar per WLAN. Siehe auch FAQ und Bootloader.

Bootloader & USB-2-Bot-Adapter

  • Anschluß an den PC: USB
  • Software:
    • avrdude -P com3 -c avr109 -p m32 -b 115200 -U flash:w:"ct-Bot.hex":i -u

Bootloader & (W)LAN

  • Anschluß an den PC: (W)LAN
  • Software:
    • Linux und Mac OS X: avrdude -P net:192.168.x.y:10002 -c avr109 -p m32 -U flash:w:"ct-Bot.hex":i -u
    • Windows: Die Option -P net ist in avrdude für Windows derzeit nicht implementiert. Hier bleibt deshalb nur die Möglichkeit, den Wiport mit dem Lantronix-Tool auf einen virtuellen Com-Port zu mappen und dann wie über USB den Bootloader anzusprechen - Bisher nicht getestet.

Übertragen des EEPROM-Abbildes mit avrdude

  1. Das vom Compiler erstelle EEPROM-Abbild auf den Bot übertragen:
  • avrdude -P <siehe oben> -c <siehe oben> -p m32 -U eeprom:w:"ct-Bot.eep":i -u
  1. Das EEPROM des Bots auslesen und in die Datei ct-Bot.eep schreiben:
  • avrdude -P <siehe oben> -c <siehe oben> -p m32 -U eeprom:r:"ct-Bot.eep":i -u

Beim Flashen per Programmieradapter wird standardmäßig das EEPROM gelöscht und man muss die eep-Datei jedes Mal erneut übertragen, außerdem gehen die Einstellungen im EEPROM verloren. Um das zu verhindern, setzt man bei den Fuse Bits das High-Byte (hfuse) auf 0xD1 (EESAVE=0) anstatt auf 0xD9 (siehe auch nächsten Abschnitt).

Hat sich im Code etwas verändert, das das EEPROM benutzt (wurden z.B. neue EEPROM-Variablen hinzugefügt), muss man das EEPROM-Abbild auf jeden Fall neu übertragen, um die korrekte Zuordnung der Variablen zu gewährleisten.

Setzen der Fuse-Bits

Hinweis: Die Verwendung eines Bootloaders ist optional. Wer seinen Bot nicht über den Bootloader programmieren möchte oder nicht weiß, was das ist, schaut jeweils einfach nur unter ohne Bootloader.

Um neue Mikrocontroller erstmals zu programmieren, muss man eventuell die Taktgeschwindigkeit des Programmieradapters heruntersetzen, weil der Mikrocontroller im Auslieferungszustand mit einem sehr niedrigen Takt läuft. Dazu hängt man beim Setzen der Fuse-Bits -B 1000 an die Befehlszeile an. Anschließend setzt man beim Übertragen des Programm mit -B 1 die Taktgeschwindigkeit wieder hoch.

mit avrdude

  • ohne Bootloader, ATmega32:
    • avrdude -P <siehe oben> -c <siehe oben> -p m32 -U lfuse:w:0xFF:m -U hfuse:w:0xD1:m -v
  • mit Bootloader, ATmega32:
    • avrdude -P <siehe oben> -c <siehe oben> -p m32 -U lfuse:w:0xFF:m -U hfuse:w:0xD4:m -v
  • ohne Bootloader, ATmega644:
    • avrdude -P <siehe oben> -c <siehe oben> -p m644 -U lfuse:w:0xFF:m -U hfuse:w:0xD1:m -U efuse:w:0xFF:m -v
  • mit Bootloader, ATmega644:
    • avrdude -P <siehe oben> -c <siehe oben> -p m644 -U lfuse:w:0xFF:m -U hfuse:w:0xD4:m -U efuse:w:0xFF:m -v
  • ohne Bootloader, ATmega644P:
    • avrdude -P <siehe oben> -c <siehe oben> -p m644p -U lfuse:w:0xFF:m -U hfuse:w:0xD1:m -U efuse:w:0xFF:m -v
  • mit Bootloader, ATmega644P:
    • avrdude -P <siehe oben> -c <siehe oben> -p m644p -U lfuse:w:0xFF:m -U hfuse:w:0xD4:m -U efuse:w:0xFF:m -v
  • ohne Bootloader, ATmega1284P:
    • avrdude -P <siehe oben> -c <siehe oben> -p m1284p -U lfuse:w:0xF7:m -U hfuse:w:0xD1:m -U efuse:w:0xFF:m -v
  • mit Bootloader, ATmega1284P:
    • avrdude -P <siehe oben> -c <siehe oben> -p m1284p -U lfuse:w:0xF7:m -U hfuse:w:0xD4:m -U efuse:w:0xFF:m -v

mit AVR Studio

Verwendete Version: 4.14 Build 589

1. Programmiermenü aufrufen:

AVR Studio 1

2. Programmer auswählen und connect:

AVR Studio 2
Hier muss man natürlich den Programmertyp auswählen, den man selbst benutzt.

3. FuseBits wie folg auswählen und Program:

Zur Kontrolle: Die unter HIGH und LOW angezeigten Werte müssen exakt denen im Screenshot entsprechen! Alternativ kann man die Werte auch dort eintragen.
Nach dem Klick auf Program müssen die ganz unten aufgeführten Werte ebenfalls den o.a. entsprechen.

  • ohne Bootloader, EEPROM save, ATmega32:

!FuseBits AVR Studio ATmega32 ohne Bootloader

  • mit Bootloader, EEPROM save, ATmega32:

!FuseBits AVR Studio ATmega32 mit Bootloader

avrdude in Eclipse einbinden

Der Aufruf von avrdude lässt sich in Eclipse als "External Tool" einbinden, dann wird per Mausklick das hex-File des aktiven Projekts geflasht.
Die Argumente für den avrdude-Aufruf muss man natürlich entsprechend anpassen (s.o.), ebenso den Ort, wo avrdude installiert ist.
Der folgende Einstell-Dialog ist unter Run -> External Tools -> Open External Tools Dialog... zu erreichen:

Eclipse-Einstellungen, um avrdude als External Tool einzubinden

Hinweise für Besitzer eines ATmega644(P) oder ATmega1284P

Der ATmega644(P) / ATmega1284P ist pinkompatibel zum ATmega32, hat aber mehr Speicher und braucht andere Fuse-Bits.

  • Für den ATmega644 muss man jeweils -p m32 durch -p m644 ersetzen.
  • Für den ATmega644P muss man jeweils -p m32 durch -p m644p ersetzen.
  • Für den ATmega1284P muss man jeweils -p m32 durch -p m1284p ersetzen.

Bootloader des c't-Bot

Wir haben den Bootloader von Martin Thomas mit in das c't-Bot-Projekt aufgenommen. Damit dauert das Übertragen und Überprüfen der Hex-Files gerade noch 14 Sekunden.

Sowohl für den ATmega32, ATmega644, ATmega644P und ATmega1284P ist der Bootloader bereits in den Code integriert. Man muss nur sicherstellen, dass in der Datei ct-Bot.h der Schalter BOOTLOADER_AVAILABLE zur Installation des Bootloaders aktiviert ist. Anschließend deaktiviert man ihn wieder.

Das entstandene Hex-File ct-Bot.hex muss man einmalig mit dem Programmierer der Wahl in den Bot übertragen - genauso wie vorher ohne Bootloader. Außerdem muss man die Fuse-Bits nun anders setzen, siehe oben jeweils unter mit Bootloader.

Achtung: Um über (W)LAN flashen zu können, braucht man mindestens avrdude Version 5.3. Die Version 5.3.1 hat aber ein Problem bei den Fuse Bits im Zusammenhang mit einem Programmer vom Typ avr910, bei diesem Programmer sollte man auf jeden Fall avrdude Version 5.4 oder neuer benutzen.

Ab jetzt wartet der Bot nach einem Reset 5 Sekunden auf eine eingehende Programmierverbindung. Nun kann man über eine RS-232- oder eine USB-2-Bot- oder eine LAN-/WLAN- (WiPort)-Verbindung den Mikrocontroller mit Daten befüllen. Hier ein paar Beispiele:

  • Netzwerk per WiPort: ./avrdude -p m32 -c avr109 -P net:192.168.x.y:10002 -U flash:w:ct-Bot.hex:i -u
  • USB-2-Bot auf COM3: avrdude -p m32 -c avr109 -P com3 -U flash:w:ct-Bot.hex:i -u -b 115200
  • USB-2-Bot unter Linux / Mac OS X: ./avrdude -p m32 -c avr109 -P /dev/ttyUSB0 -U flash:w:ct-Bot.hex:i -u -b 115200

Einstellungen des WiPort

  • Wenn man den WiPort verwendet, muss man den Channel 2 (Serial Settings) auf 115200 Baud (muss zu UART_BAUD in include/bot-local.h passen) (8N1) stellen. Außerdem sollte man sowohl für den Input als auch den Output Buffer jeweils die beiden Optionen "Flush .. With active connect" und "Flush .. With passive connect" aktivieren.
  • Achtung auch der WiPort braucht ein wenig Zeit zum Booten, es kannn also sein, dass er nicht gleich nach dem Power-on reagiert.
  • Wenn man RS-232- oder USB-2-Bot-Verbindungen nutzt, sollte man unter Windows den COM-Port auf 115200 Baud (muss zu UART_BAUD in include/bot-local.h passen) (8N1) einstellen
  • WiPort Einstellungen für Bootloader Support. Achtung, die Baudrate ist im Bild noch auf 57600 Baud eingestellt, inzwischen liegt der Standwert bei 115200 Baud (siehe oben):

Attachments

  • flash_eclipse.gif (49.8 kB) - added by ip 4 years ago. Eclipse-Einstellungen, um avrdude als External Tool einzubinden
  • AVR_studio1.png (35.2 kB) - added by ip 4 years ago. AVR Studio 1
  • ATmega32_w_bl.png (10.1 kB) - added by ip 4 years ago. FuseBits AVR Studio ATmega32 mit Bootloader
  • ATmega32_wo_bl.png (10.1 kB) - added by ip 4 years ago. FuseBits AVR Studio ATmega32 ohne Bootloader
  • AVR_studio2.png (6.0 kB) - added by ip 4 years ago. AVR Studio 2
  • wiport_serialsettings.jpg (66.4 kB) - added by bbe 9 days ago.

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.1
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source