AVR Programmer: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 22: | Zeile 22: | ||
[[Bild:Si-prog.gif]] | [[Bild:Si-prog.gif]] | ||
externer quarz oszillator | |||
===Atmel AVRISP, STK500, AVR910=== | ===Atmel AVRISP, STK500, AVR910=== | ||
Zeile 64: | Zeile 64: | ||
==AVRDude (Linux)== | ==AVRDude (Linux)== | ||
===Installation=== | ===Installation=== | ||
apt-get install avrdude | ====Installation via Ubuntu Repository==== | ||
AVRDude ist in den Standard Ubuntu Repositories vorhanden und kann entsprechend einfach installiert werden. | |||
sudo apt-get install avrdude | |||
{{Hinweis| | |||
Im Moment ist die nur relativ alte Version 5.6 in den Ubuntu Repositories vorhanden. Zunächst kann diese verwendet werden. Falls Probleme auftreten kann alternativ die Installation via SVN (nächstes Kapitel) durchgeführt werden.}} | |||
====Installation aktuelle Version via SVN==== | |||
Da die Ubuntu-Version und SVN-Version in unterschiedlichen Verzeichnissen installiert werden, können beide parallel installiert werden. | |||
Für die Installation sind evtl. noch einige Pakete nötig, falls diese noch nicht installiert wurden: | |||
sudo apt-get install subversion bison flex automake libusb-dev | |||
Download der aktuellen Version mit svn: | |||
svn co svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude | |||
Übersetzten: | |||
cd avrdude | |||
sh bootstrap | |||
./configure | |||
make | |||
sudo make install | |||
Zeile 92: | Zeile 112: | ||
* Programm FILE.HEX in Microcontroller übertragen | * Programm FILE.HEX in Microcontroller übertragen | ||
avrdude -c '''''<PROGRAMMER>''''' -P '''''<PORT>''''' -p '''''<DEVICE>''''' -U '''''<FILE.HEX>''''' | avrdude -c '''''<PROGRAMMER>''''' -P '''''<PORT>''''' -p '''''<DEVICE>''''' -U '''''<FILE.HEX>''''' | ||
* Fuses schreiben: | |||
avrdude -c '''''<PROGRAMMER>''''' -P '''''<PORT>''''' -p '''''<DEVICE>''''' -U efuse:w:'''''EFUSE''''':m -U lfuse:w:'''''LFUSE''''':m -U hfuse:w:'''''HFUSE''''':m | |||
: '''''LFUSE''''', '''''LFUSE''''' und '''''EFUSE''''' ([[AVR_Fuses|$rarr; siehe auch hier]]). | |||
'''''<PROGRAMMER>:''''' | '''''<PROGRAMMER>:''''' | ||
Zeile 115: | Zeile 137: | ||
* ATMEGA8 | * ATMEGA8 | ||
* ATMEGA32 | * ATMEGA32 | ||
* ATMEGA644 | |||
* ATtiny44 | * ATtiny44 | ||
{{Hinweis|Im AVRDude Konfigfile /etc/avrdude.conf sind alle verfügbaren Programmer und Mikrocontroller aufgeführt.}} | {{Hinweis|Im AVRDude Konfigfile /etc/avrdude.conf sind alle verfügbaren Programmer und Mikrocontroller aufgeführt.}} | ||
===Graphische Oberfläche für AVRDude=== | |||
Unter dem Namen AVR8 Burn-O-Mat gibt es eine Java basierende graphische Benutzeroberfläche für AVRDude. Voraussetzung für Burn-O-Mat ist Java. | |||
====Installation==== | |||
Installation Sun-Java6: | |||
sudo apt-get install sun-java6-jre | |||
Installation Burn-O-Mat: | |||
wget http://burn-o-mat.net/avr8-burn-o-mat-2.1.2-all.deb | |||
sudo dpkg -i avr8-burn-o-mat-2.1.2-all.deb | |||
{{Hinweis| | |||
Burn-O-Mat erfordert die Installation der Ubuntu-Version, da das Paket avrdude in dessen Abhängigkeitsprüfung verankert ist.}} | |||
====Konfiguration==== | |||
Burn-O-Mat im Ubuntu Menü '''''Anwendungen/Entwicklung''''' starten. | |||
Menü '''''Settings/AVRDUDE''''' anwählen. | |||
Im Settingsfenster folgende Einstellungen vornehmen: | |||
* AVRDude Ubuntu-Version: | |||
AVRDUDE location: /usr/bin/avrdude | |||
AVRDUDE configuration file: /etc/avrdude.conf | |||
* AVRDude SVN-Version: | |||
AVRDUDE location: /usr/local/bin/avrdude | |||
AVRDUDE configuration file: /usr/local/etc/avrdude.conf | |||
Settings mit '''''OK''''' beenden und Burn-O-Mat komplett beenden. | |||
Burn-O-Mat erneut starten und Settings erneut aufrufen. | |||
Nach dem Neustart wurden alle von AVRDude unterstützten Programmer aus dem AVRDude Konfigfile gelesen und stehen nun in Burn-O-Mat zur Verfügung. | |||
Den Verwendeten '''''Programmer''''' und '''''Port''''' auswählen | |||
Nachdem alle Optionen korrekt eingestellt wurden, kann der Settings Dialog mittels '''''OK''''' beebdet werden. | |||
{{Hinweis| | |||
Falls Burn-O-Mat nicht (mehr) starten sollte, kann dies an einer "zerschossenen" Konfiguration liegen. In diesem Fall folgendermassen vorgehen: | |||
<nowiki>cd ~/.java/.userPrefs/_\!\'%\!dg\"y\!\$g\!\|w\"i\!\(\`\!cg\"u\!\&8\!bw\"f\!\'0\!\}\@\"0</nowiki> | |||
rm prefs.xml | |||
um das Konfigurationsfile '''''prefs.xml''''' im etwas seltsam anmutenden Verzeichnis '''''<nowiki>.java/.userPrefs/_!'%!dg"y!$g!|w"i!(`!cg"u!&8!bw"f!'0!}@"0</nowiki>''''' (im Homeverzeichnis des aktuellen Users) zu löschen. Beim nächsten Neustart wird dieses File neu angelegt und die Konfiguration muss wiederholt werden.}} | |||
====Fuses Programmieren==== | |||
Im Hauptfenster von Burn-O-Mat den verwendeten AVR Controller auswähen und anschließend auf den Button '''''Fuses''''' klicken | |||
Im Reiter '''''Fuse Editor''''' können sämtliche für den selektierten AVR Controller verfügbaren Fuses mit der Maus angewählt werden. Unter dem Reiter '''''Fuse Hex Editor''''' können die Fuses direkt im HEX-Format eingegeben werden. Unter '''''Brown out detection''''' kann die Brownout-Schwelle komfortabel ausgewählt werden. Es ist nicht nötig die nötigen Bitkombinationen aus dem Datenblatt herauszusuchen. Im Bereich '''''Oscillator/Clock Options''''' kann schließlich die Taktversorgung des AVR's ausgewählt werden. | |||
Sind alle Fuses ausgewählt, können diese zum AVR mittels '''''wite fuses''''' Button übertragen werden. | |||
====Hex File übertragen==== | |||
Im Hauptfenster kann mittels Button '''''File''''' das zu flashende Hex-File bequem ausgewählt werden. Mittels Button '''''Write''''' wird das Hex-File in den AVR-Controller übertragen. | |||
==AVRStudio (Windows)== | ==AVRStudio (Windows)== | ||
Mit AVR Studio können nur ATMEL-Programmer, wie AVRISP MKII, STK500 usw. und solche, die ATMEL Programmer emulieren, angesprochen werden. Der Programmerteil von AVRStudio wird im Menü '''''Tools/Program AVR/Connect''''' aufgerufen. | |||
Unter Platform den verwendeten Programmer auswählen und anschließend den Port selektieren. Mit dem Button '''''Connect''''' wird eine Verbindung zum selektierten Programmer aufgebaut. | |||
Im Tab '''''Main''''' sollte der korrekte AVR Controller ausgewählt werden, falls dies noch nicht der Fall ist. | |||
Im Tab '''''Program''''' kann das zu flashende HEX- bzw. EEProm File ausgewählt und an den AVR übertragen werden. | |||
Im Bereich '''''Fuses''''' können die anzuwenden Fuses bequem mit der Maus selektiert und anschließend in den AVR Controller gebrannt werden. | |||
In den anderen Reitern sind weitere Optionen und Funktionen verfügbar, die nur in Sonderfällen relevant sind. Mit Lockbits lässt sich z.B. das Auslesen der Firmware verhindern. Dies ist interessant für kommerzielle Produkte, um zu verhindern, dass jemand das Programm ausliest und das Produkt einfach nachbaut. |
Aktuelle Version vom 12. April 2010, 18:04 Uhr
Allgemein
Um ein generiertes Programm (.hex- File) bzw. EEProm-Daten (.eep- File) in einen Microcontroller zu laden, ist ein Porgrammer nötig. Diese werden meist als ISP (Incircuit Serial Programmer) bezeichnet. Der Name sagt es bereits aus, dass der AVR Controller zum Programmieren nicht ausgebaut werden muss, sondern in der Schaltung Programmiert werden kann. Dazu ist allerdings ein ISP-Steckplatz in der Schaltung erforderlich. Es besteht aber auch die Möglichkeit, die Software mit Hilfe eines sog. Bootloaders in den Controller zu übertragen. Es gibt Versionen für die Serielle Schnittstelle, I2C und Netzwerk. Der Bootloader muss aber zunächst per ISP in den Controller übertragen werden. Der Bootloader empfängt das zu programmierende .hex - File und legt es im Controller ab (selfprogramming).
ISP-Programmer
Incircuit Serial Programmer gibt es zahlreiche. Und obwohl das Serial in ISP darauf schließen lassen könnte, werden die meisten ISP's nicht per RS232 Schnittstelle mit dem PC verbunden. Es gibt Versionen für Parallel-Port, Seriell-Port und USB.
Parallel
Einer der ersten Programmer war der STK200 Programmer. Dieser war ursprünglich für das Developmentboard STK200 (Starterkit 200) von Kanda/ATMEL gedacht. Dieser Programmer ist sehr einfach aufgebaut und kann relativ einfach selbst aufgebaut werden, da lediglich ein 25poliger SUB-D Stecker für den Parallelport, ein Treiber IC und ein 6- oder 10 poliger Wannenstecker erforderlich ist. All dies kann relativ leicht und kompakt in einem 25poligen SUB-D Gehäuse untergebracht werden.
Nachteil:
- Parallelport bei neuen PC's und Laptop nicht mehr vorhanden. USB<=>Parallel-Wandler funktionieren normalerweise nicht, da diese nur zur Ansteuerung eines Druckers gedacht sind.
- Die STK200 Programmer gelten allgemein als relativ unzuverlässig, was in sehr vielen Problemen von Anwendern in Foren niederschlägt.
Seriell
SI-Prog
Beim SI-Prog wird das ISP-Protokoll mit Hilfe der Steuerleitungen der seriellen Schnittstelle implementiert. Dieser Programer kann sehr leicht selbst aufgebaut werden, da nur eine handvoll Bauteile notwendig sind.
externer quarz oszillator
Atmel AVRISP, STK500, AVR910
Der original AVRISP von Atmel, das STK500 und der Programmer aus der Application Note AVR910 enthalten einen Mikrocontroller, der die Umsetzung der seriellen Daten auf das ISP-Programmierinterface vornimmt. Diese Programmer sind deutlich zuverlässiger als STK-200 (Parallel) und SI-Prog. Der Programmer ist direkt mit dem AVR-Studio ansprechbar und auch problemlos mit einem USB-seriell-Adapter verwendbar, falls der PC keinen echten COM-Port mehr zur Verfügung stellen sollte. Es gibt auch Versionen mit bereits integriertem USB-Seriell-Wandler.
Details zum AVR910 - Programmer: http://www.atmel.com/atmel/acrobat/doc0943.pdf
Programmer nach AVR-910 Application Note können selbst gebaut werden bzw. in verschiedenen Versionen als Bausatz oder Fertiggerät erhältlich.
Nachteil für den Selbstbastler:
Da ein Atmel-Controller für den Progammer erforderlich ist, besteht ein Henne-/Ei-Problem. Der Controller auf dem Programmer muss mit einem Programmer programmiert werden. Lösung: Verwendung eines einfachen Parallel (STK200) - oder Seriell (SI-Prog) Programmers bzw. Einsatz eines bereits programmierten Controllers.
USB
USBasp
USBasp implementiert den kompletten USB-Stack in Software in einem AVR Mikrocontroller. Dies ermöglicht einen sehr kostengünstigen Aufbau.
Nachteil für den Selbstbastler:
Da ein Atmel-Controller für den Progammer erforderlich ist, besteht ein Henne-/Ei-Problem. Der Controller auf dem Programmer muss mit einem Programmer programmiert werden. Lösung: Verwendung eines einfachen Parallel (STK200) - oder Seriell (SI-Prog) Programmers bzw. Einsatz eines bereits programmierten Controllers.
USBasp ist aber auch in Form eines Bausatzes mit bereits programmiertem Mikrocontrller erhältlich: http://www.fundf.net/usbasp/
AVRIspMKII
Am flexibelsten und problemlosesten dürfte der Original ATMEL Programmer AVRIspMKII sein. Dieser ist kommerziell bei Reichelt und Conrad erhältlich. Dieser funktioniert sehr zuverlässig über einen sehr weiten Eingagsspannungsberich der Zielhardware.
ISP Stecker
Zum Anschluss der Programmer an die Zielhardware z.B. Developmentboard existieren zwei gängige Steckertypen. Der 6polige und 10polige Stecker.
Falls Stecker und Buchse an Zielhardware und Programmer nicht übereinstimmen, kann relativ einfach ein 6/10 Pol ISP-Adapter selbst hergestellt werden.
Programmiersoftware
Um das .hex -File in den Controller zu übertragen ist neben der Programmier- Hardware auch Software nötig, die den Programmer ansteuert. Unter Linux kommt avrdude zum Einsatz. Dieses unterstützt zahlreiche verschiedene ISP-Programmer und AVR Mikrocontroller. AVRDude für die meisten Distributionen erhältlich, sodass die Installation unter Linux kein Problem darstellt. AVRDude wird unter Windows zusammen mit WinAVR installiert. Dieses kann sämtlich parallel- und seriell- Programmer ansteuern. Für die Ansteuerung von USB-Programmern sind einige Hürden zu überwinden, sodass besser der in AVRStudio integrierte Programmer verwendet wird. Dieser kann direkt die ATMEL- ISP-Programmer (bzw. diejenigen, die einen ATMEL ISP emulieren) ansteuern.
AVRDude (Linux)
Installation
Installation via Ubuntu Repository
AVRDude ist in den Standard Ubuntu Repositories vorhanden und kann entsprechend einfach installiert werden.
sudo apt-get install avrdude
Installation aktuelle Version via SVN
Da die Ubuntu-Version und SVN-Version in unterschiedlichen Verzeichnissen installiert werden, können beide parallel installiert werden.
Für die Installation sind evtl. noch einige Pakete nötig, falls diese noch nicht installiert wurden:
sudo apt-get install subversion bison flex automake libusb-dev
Download der aktuellen Version mit svn:
svn co svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude
Übersetzten:
cd avrdude sh bootstrap ./configure make sudo make install
USB Programmer
Ubuntu erlaubt standardmäßig nur mit root-Rechten Zugriff auf einen USB-Programmer. Damit dies auch mit Userrechten funktioniert, wird eine neue UDEV-Regel angelegt, die den Programmer für Zugriff mittels Userrechten freigibt. Hierzu sind folgende Schritte nötig:
- USB-Programmer anschließen
- Vendor und Device-ID des Programmers ermitteln:
lsusb
- Die Ausgabe sieht für einen Atmel AVRIspMKII folgendermaßen aus:
... Bus 002 Device 004: ID 03eb:2104 Atmel Corp. AVR ISP mkII ...
- Hier ist nur die ID 03eb:2104 wichtig. Dabei stellt der Teil vor dem Doppelpunkt die Vendor-ID (hier Atmel) und der Teil danach die Product-ID (hier AVRIspMKII) dar.
- gedit /etc/udev/rules.d/50-usbprog.rules
- Folgende Zeile einfügen:
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2104", MODE="0777"
- Dabei die eben ermittelte Vendor-ID und Product-ID einsetzen.
- USB-Programmer vom USB-Port trennen und wieder verbinden, damit die neue Regel zur Anwendung kommt.
Benutzung
AVRDude kennt eine Reihe von Kommmandozeilenoptionen. Eine Auflistung aller möglicher Optionen erscheint durch den Aufruf von
avrdude
Hier einige Aufrufbeispiele:
- Mikrocontroller löschen:
avrdude -c <PROGRAMMER> -P <PORT> -p <DEVICE> -e
- Programm FILE.HEX in Microcontroller übertragen
avrdude -c <PROGRAMMER> -P <PORT> -p <DEVICE> -U <FILE.HEX>
- Fuses schreiben:
avrdude -c <PROGRAMMER> -P <PORT> -p <DEVICE> -U efuse:w:EFUSE:m -U lfuse:w:LFUSE:m -U hfuse:w:HFUSE:m
- LFUSE, LFUSE und EFUSE ($rarr; siehe auch hier).
<PROGRAMMER>: Auswahl des benutzten Programmers, z.B.
- stk500
- stk200
- avrispmkii
- dragon_isp (ISP-Mode)
- dragon_jtag (JTAG-Mode)
- jtag2 (JTAGIceMKII)
- jtag2_isp (ISP-Mode)
- jtag2_dw (Debug-Wire Mode)
<PORT>: Port an dem der Programmer angeschlossen ist
- /dev/ttyS0 (Serielle Schnettstelle - "COM1")
- /dev/parport0 (Parallelport - "LPT1")
- usb
<DEVICE>: Verwendeter Mikrocontroller z.B.
- ATMEGA8
- ATMEGA32
- ATMEGA644
- ATtiny44
Hinweis: | |
Im AVRDude Konfigfile /etc/avrdude.conf sind alle verfügbaren Programmer und Mikrocontroller aufgeführt. |
Graphische Oberfläche für AVRDude
Unter dem Namen AVR8 Burn-O-Mat gibt es eine Java basierende graphische Benutzeroberfläche für AVRDude. Voraussetzung für Burn-O-Mat ist Java.
Installation
Installation Sun-Java6:
sudo apt-get install sun-java6-jre
Installation Burn-O-Mat:
wget http://burn-o-mat.net/avr8-burn-o-mat-2.1.2-all.deb sudo dpkg -i avr8-burn-o-mat-2.1.2-all.deb
Hinweis: | |
Burn-O-Mat erfordert die Installation der Ubuntu-Version, da das Paket avrdude in dessen Abhängigkeitsprüfung verankert ist. |
Konfiguration
Burn-O-Mat im Ubuntu Menü Anwendungen/Entwicklung starten. Menü Settings/AVRDUDE anwählen. Im Settingsfenster folgende Einstellungen vornehmen:
- AVRDude Ubuntu-Version:
AVRDUDE location: /usr/bin/avrdude AVRDUDE configuration file: /etc/avrdude.conf
- AVRDude SVN-Version:
AVRDUDE location: /usr/local/bin/avrdude AVRDUDE configuration file: /usr/local/etc/avrdude.conf
Settings mit OK beenden und Burn-O-Mat komplett beenden. Burn-O-Mat erneut starten und Settings erneut aufrufen. Nach dem Neustart wurden alle von AVRDude unterstützten Programmer aus dem AVRDude Konfigfile gelesen und stehen nun in Burn-O-Mat zur Verfügung. Den Verwendeten Programmer und Port auswählen Nachdem alle Optionen korrekt eingestellt wurden, kann der Settings Dialog mittels OK beebdet werden.
Fuses Programmieren
Im Hauptfenster von Burn-O-Mat den verwendeten AVR Controller auswähen und anschließend auf den Button Fuses klicken Im Reiter Fuse Editor können sämtliche für den selektierten AVR Controller verfügbaren Fuses mit der Maus angewählt werden. Unter dem Reiter Fuse Hex Editor können die Fuses direkt im HEX-Format eingegeben werden. Unter Brown out detection kann die Brownout-Schwelle komfortabel ausgewählt werden. Es ist nicht nötig die nötigen Bitkombinationen aus dem Datenblatt herauszusuchen. Im Bereich Oscillator/Clock Options kann schließlich die Taktversorgung des AVR's ausgewählt werden. Sind alle Fuses ausgewählt, können diese zum AVR mittels wite fuses Button übertragen werden.
Hex File übertragen
Im Hauptfenster kann mittels Button File das zu flashende Hex-File bequem ausgewählt werden. Mittels Button Write wird das Hex-File in den AVR-Controller übertragen.
AVRStudio (Windows)
Mit AVR Studio können nur ATMEL-Programmer, wie AVRISP MKII, STK500 usw. und solche, die ATMEL Programmer emulieren, angesprochen werden. Der Programmerteil von AVRStudio wird im Menü Tools/Program AVR/Connect aufgerufen. Unter Platform den verwendeten Programmer auswählen und anschließend den Port selektieren. Mit dem Button Connect wird eine Verbindung zum selektierten Programmer aufgebaut. Im Tab Main sollte der korrekte AVR Controller ausgewählt werden, falls dies noch nicht der Fall ist. Im Tab Program kann das zu flashende HEX- bzw. EEProm File ausgewählt und an den AVR übertragen werden. Im Bereich Fuses können die anzuwenden Fuses bequem mit der Maus selektiert und anschließend in den AVR Controller gebrannt werden. In den anderen Reitern sind weitere Optionen und Funktionen verfügbar, die nur in Sonderfällen relevant sind. Mit Lockbits lässt sich z.B. das Auslesen der Firmware verhindern. Dies ist interessant für kommerzielle Produkte, um zu verhindern, dass jemand das Programm ausliest und das Produkt einfach nachbaut.