Der AVR Dragon ist ein vielseitiger preiswerter USB-Programmer für AVR Mikrocontroller.
Mit Avrdude lässt er sich auch unter Linux betreiben.
Nach dem Anstecken wird überprüft, ob der Dragon vom System erkannt wurde:
tux@machine:~$ lsusb Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 006: ID 03eb:2107 Atmel Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000
USB-Devices werden von Avrdude ab Version 5.2 unterstützt. Ich verwende momentan Version 5.4. Als erstes werden die Quellen von Avrdude heruntergeladen und entpackt.
Zum Umgang mit USB-Geräten benötigt Avrdude libusb. Diese muss ggf. installiert werden.
Jetzt Avrdude kompiliert und ggf. ein Paket erzeugt werden:
tux@machine:~$ ./bootstrap ... tux@machine:~$ ./configure --enable-usb=yes ... tux@machine:~$ make ... tux@machine:~$ make install
Um auch als normaler User via Avrdude auf USB-Geräte zugreifen zu können muss Avrdude suid root aufgeführt werden. z.B.:
tux@machine:~$ chown root:root /usr/local/bin/avrdude tux@machine:~$ chmod 4755 /usr/local/bin/avrdude
Der Avr-Dragon beherscht folgende Programmiermodi, welche bei der Angabe des Programmertyps (-c) an Avrdude übergeben werden.
Avrdude kann Programmer an Hand der Seriennummer absprechen. Dadurch kann man mehrere AVR-Dragons an einem System betreiben. Als Port (-P) wird usb bzw. usb+Seriennummer angegeben.
Um die Seriennummer(n) festzustellen wird eine ungültige Seriennummer übergeben und der verbose mode (-v) eingeschaltet. Ein µC-Typ(-p) muss dabei mit übergeben werden, braucht aber nicht mit dem Dragon verbunden zu sein.
tux@machine:~$ avrdude -p ATMEGA16 -c dragon_isp -P usb:x -v
...
Using Port : usb:00:a2:00:01:43:ff
Using Programmer : dragon_isp
avrdude: usbdev_open(): Found AVRDRAGON, serno: 00A2000043FF
...
Die Seriennummer kann auch als Teilmaske angegeben werden (z.B. usb:43:ff) sofern sie eindeutig im System ist.
Nachdem der AVR mit dem Dragon verbunden wurde kann dieser z.B. im Terminalmode von Avrdude bearbeitet werden:
tux@machine:~$ avrdude -p ATMEGA64 -c dragon_isp -P usb -t avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9602 avrdude> part >>> part AVR Part : ATMEGA64 Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PA0 ...
Der AVR-Dragon ist werksseitig auf eine ISP-Frequenz 1MHz eingestellt. Atmel liefert die AVRs werksseitig mit einer Taktfrequenz von 1MHz (intern RC) aus.
Um programmieren bzw. Fuses ändern zu können, muss f_ISP < f_CLK/4 sein. Auch Schaltungen mit entsprechenden externen Quarz lassen nicht ansprechen, da die Fuse für den externen Oszillator nicht gesetzt werden kann.
Die ISP-Frequenz des Dragon lässt sich mit AVR-Studio unter Windows ändern. Sinnvoll sind 125kHz – so kann jeder AVR angesprochen werden.
— 2007/12/21