Avrdude Tutorial

Avrdude ist ein Konsolenprogramm zum Programmieren (Flashen) von AVR Controller für Windows, Linux und MacOS. Avrdude unterstützt fast alle verfügbaren Programmieradapter. Die Bedienung ist jedoch konsolentypisch mühsam und, am Beispiel von Ubuntu und openSuse, funktioniert es auch nicht immer auf Anhieb. Deshalb hier ein kleines Tutorial, das dabei helfen soll, die anfänglichen Probleme zu umschiffen.

Avrdude installieren und einrichten

Ubuntu/Debian und openSuse

Unter Ubuntu und openSuse funktioniert avrdude nicht auf Anhieb. Man muss zunächst einige Anpassungen vornehmen. Getestet habe ich das mit Ubuntu 8.04 und 8.10, sollte aber auch bei anderen Versionen und bei Debian so funktionieren. Nachtrag: Ebenfalls getestet unter openSuse 11.0

Installieren

Unter Ubuntu (und anderen Debian Derivaten) installiert man einfach von der Konsole.

  sudo apt-get install avrdude

installiert avrdude nach /usr/bin/avrdude

Optional kann man mit

  sudo apt-get install avrdude-doc

die Dokumentation nachinstallieren. Diese findet man dann unter /usr/share/doc/avrdude-doc/avrdude-html/avrdude.html

Unter openSuse installiert man avrdude als su von der Konsole:

  zypper install avrdude

USB

Warnung: Unter Ubuntu 9.10 führte der nachfolgend beschriebene Weg dazu, dass der Anmeldebildschirm nicht mehr funktionierte. Erst ein Entfernen besagter Datei brachte Abhilfe!

Ich konnte diesen Fehler hier noch nie beobachten. Auf verschiedenen Rechner, auch unter Ubuntu 9.10 und Debian Testing, funktioniert diese Methode. Auch von anderen habe ich keine Berichte über Probleme gehört. — burli 2010/03/08 20:12

Unter Ubuntu funktioniert avrdude nicht sofort mit USB Programmern wie AVRISP mkII. Man muss eine Datei anlegen. Um die Datei zu erstellen gibt man folgenden Befehl ein:

  gksu gedit /etc/udev/rules.d/80-usbprog.rules
  • Statt gedit kann man natürlich jeden beliebigen Editor verwenden. Standard unter Xfce ist mousepad und unter KDE ist es kate. Wer die Konsole bevorzugt kann auch vi, vim oder nano verwenden ;-)

Eine Rules Datei könnte in etwa so aussehen

  ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", GROUP="plugdev", MODE="0660" # AVRISP mkII
  ATTR{idVendor}=="03eb", ATTR{idProduct}=="2107", GROUP="plugdev", MODE="0660" # AVR-Dragon
  ATTR{idVendor}=="03eb", ATTR{idProduct}=="2103", GROUP="plugdev", MODE="0660" # JTAG ICE mkII
  ATTR{idVendor}=="03eb", ATTR{idProduct}=="2106", GROUP="plugdev", MODE="0660" # STK600
  ATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", GROUP="plugdev", MODE="0660" # USBASP von www.fischl.de
  ATTR{idVendor}=="03eb", ATTR{idProduct}=="2ffa", GROUP="plugdev", MODE="0660" # AT90USB
  ATTR{idVendor}=="10c4", ATTR{idProduct}=="ea60", GROUP="plugdev", MODE="0660" # AVR910

Nach der Änderung der Datei 80-usbprog.rules muss udev neu gestartet werden. Dies geschieht mit folgender Zeile

  sudo /etc/init.d/udev restart

Eventuell muss anschließend der Programmer noch einmal abgezogen und neu eingesteckt werden.

Sollte es trotzdem nicht funktionieren gibt es Abhilfe. Gebt in der Konsole diesen Befehl ein

  lsusb

Der Befehl liefert als Ergebnis in etwa folgende Zeilen (abhängig davon welche(n) Programmer man angeschlossen hat).

  Bus 004 Device 002: ID 03eb:2104 Atmel Corp. AVR ISP mkII
  Bus 003 Device 006: ID 03eb:2107 Atmel Corp. AVR Dragon
  Bus 003 Device 007: ID 03eb:2103 Atmel Corp. JTAG ICE mkII
  Bus 005 Device 004: ID 03eb:2106 Atmel Corp.
  Bus 005 Device 005: ID 16c0:05dc VOTI

Auf diese Weise könnt ihr auch die idVendor und idProduct anderer USB Programmer ermitteln und einen entsprechenden Eintrag erstellen. Die vierstellige HEX Zahl vor dem Doppelpunkt ist die idVendor Nummer, die vierstellige HEX Zahl nach dem Doppelpunkt ist die idProduct Nummer. Erstellt einfach eine neue Zeile wie oben beschrieben und kopiert die Nummern an die richtigen Stellen. Dann sollte avrdude ohne Root Rechte auf die USB Programmer zugreifen können

Druckerport

Auch der Druckerport funktioniert nicht sofort. Zunächst sollte man prüfen ob das Device richtig eingerichtet ist (bei meinem Laptop mit Xubuntu 8.04 war das aus irgend einem Grund nicht der Fall, daher erwähne ich das hier)

  ls /dev/par*

Man sollte dann diese Ausgabe erhalten

  /dev/parport0

Ist dies nicht der Fall muss man das Device erstellen, ansonsten wird der nächste Befehl übersprungen

  sudo mknod /dev/parport0 c 99 0

Als nächstes überprüft man, ob der User Zugriffsrechte auf das Device hat. Das kann man direkt mit avrdude machen (nicht als Root ausführen). Dabei spielt es keine Rolle ob ein Dongel angeschlossen ist

  avrdude -pm8 -cstk200 -e

Sollte eine Fehlermeldung mit Permission denied erscheinen, fehlen die Zugriffsrechte. Diese erstellt man am einfachsten mit diesem Befehl

  sudo usermod -a -G scanner <username>

wobei <username> durch den Namen des jeweiligen Benutzers ersetzt werden muss.

Sollte nach letztern Befehl immer noch kein Zugriff auf parport0 möglich sein diesen Befehl

  sudo chmod a+rw /dev/parport0

verwenden

Windows XP

Installation

Für die Installation unter Windows verwendet man am besten die neueste Version von WinAVR. Einfach wie üblich im gewünschten Verzeichnis installieren. Nach der Installation ist eventuell ein Neustart erforderlich damit die Pfade aktualisiert werden.

USB

Atmel Programmer

Variante 1. Mit AVR Studio

Es gibt offenbar zwei Varianten wie man Avrdude unter Windows installieren kann. Variante 1 mit AVR Studio funktioniert bei mir. Man benötigt das AVR Studio und den LibUSB Treiber.

Ich bin mir nicht sicher ob die Reihenfolge eine Rolle spielt. Bei mir hat es funktioniert nachdem ich zuerst LibUSB und anschließend das AVR Studio installiert habe. Sollte man das AVR Studio schon installiert haben und möchte es deinstallieren muss man anschließend auch noch manuell die Treiber deinstallieren. Das macht man am einfachsten im Gerätemanager. Der/die Programmer müssen dazu eingesteckt sein. Öffnet den Gerätemanager und sucht nach Jungo. Dort deinstalliert ihr alle Einträge.

Anschließend LibUSB und AVR Studio wieder installieren. Bei der Installation vom AVR Studio bei der Frage ob die USB Treiber installiert werden sollen unbedingt darauf achten das ein Häkchen gemacht wurde.

Erwähnenswert ist vielleicht noch das ich die bei WinAVR mitgelieferten libusb0.dll Dateien umbenannt habe damit die nicht versehentlich zuerst gefunden werden.

Wie gesagt, ich weiß nicht ob die Reihenfolge wichtig ist. Wer es anders herum erfolgreich geschafft hat kann das gerne anfügen oder unten einen Kommentar posten.

Variante 2. Ohne AVR Studio

Für Variante 2 darf das AVR Studio und die Jungo Treiber nicht installiert sein. Hier soll die Installation von WinAVR ausreichen. Diese Variante habe ich allerdings nicht zum Laufen bekommen.

Druckerport/Comport

Damit Avrdude auf den Druckerport und den Comport zugreifen kann muss giveio installiert sein. Alles nötige ist in WinAVR enthalten. Wenn man sich nicht sicher ist ob es bereits installiert ist kann man das überprüfen indem man in der Kommandozeile diesen Befehl eingibt:

status_giveio

Der Befehl sollte ausgeführt werden unabhängig davon in welchem Verzeichnis man sich befindet. Sollte das nicht funktionieren ist der Pfad für WinAVR nicht gesetzt oder wurde nicht aktualisiert. Sollte in der Meldung der Hinweis stat failed (status 1060): auftauchen ist giveio nicht installiert. Man kann ihn einfach mit diesem Befehl installieren.

install_giveio

Der Vollständigkeit halber sei noch der Befehl zum Entfernen des Treibers erwähnt:

remove_giveio

Damit sollte Avrdude jetzt unter Windows XP funktionieren

Windows Vista

Da mir Vista nicht zur Verfügung steht kann ich leider auch nichts dazu schreiben. Auch hier bitte ich um Mithilfe Bei mir läuft es unter WINDOWS7!!

Ich habe es unter WIN7 64Bit mit Pony serial Interface im Betrieb

Parameter

Avrdude benötigt mehrere Parameter. Alle Parameter beginnen mit einem Minuszeichen gefolgt von einem Buchstaben. Bei den Buchstaben ist auf Groß-/Kleinschreibung zu achten. Zwischen dem Parameter und dem Wert kann ein Leerzeichen folgen, muss aber nicht.

  • -c programmer-id - Die Programmer ID gibt an mit welchem Programmer avrdude arbeiten soll.
c2n232i       = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts 
dasa3         = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts 
dasa          = serial port banging, reset=rts sck=dtr mosi=txd miso=cts 
siprog        = Lancos SI-Prog <http://www.lancos.com/siprogsch.html> 
ponyser       = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts 
89isp         = Atmel at89isp cable            
frank-stk200  = Frank STK200                 
blaster       = Altera ByteBlaster            
ere-isp-avr   = ERE ISP-AVR <http://www.ere.co.th/download/sch050713.pdf>
atisp         = AT-ISP V1.1 programming cable for AVR-SDK1 from <http://micro-research.co.th/>  
dapa          = Direct AVR Parallel Access cable
xil           = Xilinx JTAG cable            
futurlec      = Futurlec.com programming cable.
abcmini       = ABCmini Board, aka Dick Smith HOTCHIP
picoweb       = Picoweb Programming Cable, http://www.picoweb.net/
sp12          = Steve Bolt's Programmer       
alf           = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ 
bascom        = Bascom SAMPLE programming cable 
dt006         = Dontronics DT006               
pony-stk200   = Pony Prog STK200              
stk200        = STK200                      
bsd           = Brian Dean's Programmer, http://www.bsdhome.com/avrdude/ 
pavr          = Jason Kyle's pAVR Serial Programmer 
dragon_pdi    = Atmel AVR Dragon in PDI mode  
dragon_dw     = Atmel AVR Dragon in debugWire mode 
dragon_hvsp   = Atmel AVR Dragon in HVSP mode  
dragon_pp     = Atmel AVR Dragon in PP mode   
dragon_isp    = Atmel AVR Dragon in ISP mode  
dragon_jtag   = Atmel AVR Dragon in JTAG mode  
jtag2pdi      = Atmel JTAG ICE mkII PDI mode   
jtag2avr32    = Atmel JTAG ICE mkII im AVR32 mode 
jtagmkII_avr32 = Atmel JTAG ICE mkII im AVR32 mode
jtag2dw       = Atmel JTAG ICE mkII in debugWire mode
jtag2isp      = Atmel JTAG ICE mkII in ISP mode 
jtag2         = Atmel JTAG ICE mkII          
jtag2fast     = Atmel JTAG ICE mkII       
jtag2slow     = Atmel JTAG ICE mkII    
jtagmkII      = Atmel JTAG ICE mkII         
jtag1slow     = Atmel JTAG ICE (mkI)        
jtag1         = Atmel JTAG ICE (mkI)      
jtagmkI       = Atmel JTAG ICE (mkI)        
avr911        = Atmel AppNote AVR911 AVROSP   
avr109        = Atmel AppNote AVR109 Boot Loader 
butterfly     = Atmel Butterfly Development Board 
usbtiny       = USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
usbasp        = USBasp, http://www.fischl.de/usbasp/ 
avr910        = Atmel Low Cost Serial Programmer
stk600hvsp    = Atmel STK600 in high-voltage serial programming mode 
stk600pp      = Atmel STK600 in parallel programming mode
stk600        = Atmel STK600                 
stk500hvsp    = Atmel STK500 V2 in high-voltage serial programming mode 
stk500pp      = Atmel STK500 V2 in parallel programming mode 
stk500v2      = Atmel STK500 Version 2.x firmware
mib510        = Crossbow MIB510 programming board
stk500v1      = Atmel STK500 Version 1.x firmware
stk500        = Atmel STK500                  
buspirate     = The Bus Pirate              
avrisp2       = Atmel AVR ISP mkII            
avrispmkII    = Atmel AVR ISP mkII       
avrispv2      = Atmel AVR ISP V2             
avrisp        = Atmel AVR ISP                 
arduino       = Arduino                        
  • -b Baudrate - Überschreibt die in der Konfigurationsdatei angegebene Baudrate. Default ist 115200
  • -B - Float Wert zur Einstellung der ISP Clock in µs (Nur AVRISP mkII, JTAGICE und AVR Dragon)
  • -C config-file Benutze diese Konfigurationsdatei anstelle von /etc/avrdude.conf
  • -D Automatisches Flash Löschen abschalten
  • -e Erase - Überschreibt Flash und EEPROM mit 0xff. Das Eeprom wird nicht gelöscht wenn das EESAVE Fusbit programmiert wurde
  • -p Der Parameter legt den Controller fest. Man kann den Controllertyp entweder abkürzen oder voll ausschreiben. Es ist also möglich, für einen ATmega8 sowohl die Abhürzung m8 als auch die ausgeschriebene Variante atmega8 verwenden. Eine Liste aller unterstützten Controller erhält man mit dem Befehl avrdude -p?
  • -P port. Teilt avrdude mit, über welchen Port der Programmer angeschlossen ist. Z.B. /dev/ttyUSB0 oder /dev/tty0 oder usb für stk600
  • -U memtype:op:filename[:format] - Mit -U werden die meisten Speicheroperationen durchgeführt. Er benötigt mindestens 3 Parameter die mit einem Doppelpunkt getrennt werden. Man kann mehrere -U Operationen angeben um mehrere Befehle hintereinander auszuführen, zb Flash schreiben, Eeprom schreiben, Fusebits schreiben. memtype gibt an welcher Speicher verwendet werden soll. Mit -v kann man ermitteln welche Speicheroperationen ein bestimmter Controller unterstützt.

Mit diesem Befehl kann man sich die Werte für den ATmega8 anzeigen lassen. -c muss man angeben damit es funktioniert

avrdude -pm8 -cstk200 -v

Der Befehl liefert unter anderem diese Werte:

                       Block Poll               Page                       Polled
Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom         4    20   128    0 no        512    0      0  9000  9000 0xff 0xff
flash         33    10    64    0 yes      8192   64    128  4500  4500 0xff 0x00
lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

Alle verfügbaren Speicheroperationen:

  • calibration - Ein oder mehrere Bytes der RC Oszillator Kalubrierung
  • eeprom - Der Eeprom Speicher
  • flash - Der Flash Speicher
  • fuse - Das Fuse Byte der Typen mit nur einem einzelnen Byte
  • lfuse - Das Low Fuse Byte
  • hfuse - Das High Fuse Byte
  • efuse - Das Extended Fuse Byte
  • lock - Das Lock Byte
  • signature - Die Device Signatur (Device ID)

Der op Parameter definiert die Art der Operation

  • r - ließt den Speicher aus dem Device und schreibt ihn in eine Datei
  • w - liest die Daten aus der angegebenen Datei und schreibt sie in den Speicher des Device
  • v - ließt die Daten aus der angegebenen Datei und aus dem Speicher des Device und vergleicht sie

Der Parameter filename gibt die Datei an in die geschrieben bzw aus der gelesen werden soll. Wenn eine Operation durchgeführt werden soll die nur einzelne Bytes benötigt, zb ein Fusebyte beschreiben, gibt man statt eines Dateinamen den Wert des Bytes an, in der Regel im HEX Format, zb 0xff. Sollte der Dateiname bzw der Pfad einen Doppelpunkt enthalten muss man den gesamten Pfad in Anführungszeichen einschließen.

Der Parameter format gibt das Format der Datei oder des Zahlenwertes an. Je nach Wert wird die Datei in dem angegebenen Format abgespeichert. Der Parameter ist optional.

  • i - Intel Hex
  • s - Motorola S-record
  • r - raw binary, little-endian byte order.
  • m - Immediate Mode. Mit diesem Parameter kann man direkte Zahlenwerte anstelle einer Datei übergeben. Das ist hilfreich wenn man zb Fusebytes programmieren will. Beginnt die Zahl mit 0x wird sie als Hex Wert interpretiert, beginnt die Zahl mit einer 0 wird sie als oktale Zahl interpretiert, ansonsten ist es eine dezimale Zahl.
  • a - Auto detect. Nur gültig bei Schreiboperationen (w) und nur in Verbindung mit einer Datei. Auto detect ist der Standardwert und kann bei Schreiboperationen entfallen.
  • d - dezimal: Dieser und alle folgenden Parameter sind nur bei Leseoperationen gültig. Dieser Parameter erzeugt eine einzielige Ausgabe von Dezimalzahlen die mit Kommas getrennt werden
  • h - hexadezimal: wie dezimal, nur mit hexadezimalen Zahlen beginnend mit 0x
  • o - octal: jede Zahl beginnt mit einer 0, ausgenommen sie ist kleiner als 8
  • b - binär: jede Zahl beginnt mit 0b

Beispiele für die wichtigsten Operationen

Diese Beispiele sollen die wichtigsten Operationen erklären. Für diese Beispiele verwende ich der Einfachheit halber immer den ATmega8 und den AVRISP mkII. Für andere Controller muss der entsprechende Typ eingesetzt werden, für andere Programmer die entsprechenden Parameter wie weiter unten beschrieben.

Löschen

  avrdude -pm8 -cavrisp2 -Pusb -e
Löscht Flash und Eeprom. Ist das EESAVE Fusebit programmiert wird das Eeprom nicht gelöscht.

Fusebits schreiben

  avrdude -pm8 -cavrisp2 -Pusb -U hfuse:w:0xc9:m -U lfuse:w:0xff:m 
Mit dieser Anweisung werden die Fusebits CKSEL, SUT, CKOPT und WDTON eingestellt. Die Einstellungen mit dem AVR Fuse Calculator.

WICHTIG: Damit die Programmierung der Fusebits funktioniert muss das High Byte vor dem Low Byte angegeben werden. In umgekehrter Reihenfolge kommt es zu einem Fehler.

Fusebits lesen

  avrdude -pm8 -cavrisp2 -Pusb -U lfuse:r:-:i
Diese Anweisung ließt das Low Fuse Byte und gibt es im Terminal aus.
  Reading | ################################################## | 100% 0.00s
  
  avrdude: writing output file "<stdout>"
  :01000000FF00
  :00000001FF
  
  avrdude: safemode: Fuses OK

Der Wert findet sich in der ersten Zeile :01000000FF00. Der fettgedruckte Teil ist das Fusebyte

EEPROM schreiben

  avrdude -pm8 -cavrisp2 -Pusb -U eeprom:w:in.eeprom
Schreib die Datei in.eeprom in das EEPROM. Die Datei muss im RAW Format vorliegen. Lest das (leere) EEPROM einmal im RAW Format aus, dann wisst ihr was das ist.

EEPROM lesen

  avrdude -pm8 -cavrisp2 -Pusb -U eeprom:r:out.eeprom:d
Speichert den Inhalt des EEPROMs in die Datei out.eeprom im dezimalen Format ab.

Flash schreiben

  avrdude -pm8 -cavrisp2 -Pusb -U flash:w:test.hex
Schreibt die Datei test.hex in das Flash.

Flash lesen

  avrdude -pm8 -cavrisp2 -Pusb -U flash:r:test.hex:i
Der Parameter -U setzt sich aus mehreren Teilen zusammen. flash definiert das eine Operation mit dem Flash Speicher durchgeführt werden soll, r bedeutet eine Leseoperation, anschließend folgt der Dateiname. Der letzte Parameter steht für den Ausgabetyp. i steht in diesem Fall für Intel HEX. Andere mögliche Parameter wären zb r für Raw oder s für Motorola HEX.

Seriennummer ermitteln

Wer die Seriennummer eines Atmel Programmers benötigt (notwendig zb bei JTAGICE mkII) erhält sie mit diesem Befehl

  avrdude -pm8 -cjtagmkII -Pusb:xxx -v

Als Ergebnis liefert avrdude diese Antwort

avrdude: Version 5.5, compiled on Nov 10 2007 at 00:07:28
       Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
       System wide configuration file is "/etc/avrdude.conf"
       User configuration file is "/home/burli/.avrduderc"
       User configuration file does not exist or is not a regular file, skipping
       Using Port            : usb:xxx
       Using Programmer      : jtagmkII
avrdude: usbdev_open(): Found JTAGICE mkII, serno: 00B0000014BA
avrdude: usbdev_open(): did not find any (matching) USB device "usb:xxx"

ISP Clock ändern

(Nur AVRISP mkII, JTAGICE und AVR Dragon) avrdude arbeitet mit der zuletzt eingestellten ISP Clock. Ist dieser Takt zu langsam oder zu schnell, kann man dies mit der Option -B ändern. Als Parameter wird ein Fließkommawert in Mikrosekunden angegeben

avrdude -pm8 -cavrisp2 -Pusb -B1.0 -e

stellt die ISP Clock auf 1MHz. Der Wert wird im Programmer gespeichert.

Beispiele für verschiedene Programmer

Im Folgenden werden einige Beispiele gezeigt wie die verschiedenen Programmer unter unterschiedlichen Betriebssystemen anzusprechen sind. Damit es übersichtlich bleibt wird nur der ATmega8 als Controller (-pm8) und die Erase Operation (-e) verwendet

STK200/Ponyprog

STK500

AVRISP mkII

Dieser Befehl löscht einen ATmega8

  avrdude -pm8 -cavrisp2 -Pusb -e

MyAVR USB Programmer

Diser Befehlt löscht einen ATmega8 unter Linux

avrdude -pm8 -cavr911 -P/dev/ttyUSB0 -e

Und hier für Windows

avrdude -pm8 -cavr911 -PCOMx -e

Wobei das x für die Comport Nummer steht unter der sich der Programmer installiert hat, also zb COM3 wenn der Rechner bereits zwei normale serielle Schnittstellen hat.

AVRprog Bootloader

Dieses Beispiel zeigt wie man den AVRprog Bootloader verwendet. In diesem Beispiel wurde der Bootloader mit 9600 Baud compiliert und es wird COM1 verwendet

Linux

avrdude -pm8 -cavr109 -b9600 -P/dev/ttyS0 -e

Windows

avrdude -pm8 -cavr109 -b9600 -Pcom1 -e

Konfigurationsdatei für avrdude

Mit Hilfe einer Konfigurationsdatei kann man Default-Einstellungen vornehmen. Unter Linux findet man die Datei unter /usr/local/etc/avrdude.conf oder /etc/avrdude.conf. Alternativ kann jeder User in seinem /home Verzeichnis die Datei .avrduderc anlegen. Unter Windows muss die Datei avrdude.rc im selben Verzeichnis liegen wie avrdude.exe

In der Datei kann man verschiedene Standardwerte vorgeben.

  default_parallel = "default-parallel-device";

Gibt den Standard Druckerport an. Kann mit der Option -P überschrieben werden.

  default_serial = "default-serial-device";

Gibt die serielle Standard Schnittstelle an. Kann mit der Option -P überschrieben werden.

  default_programmer = "default-programmer-id";

Gibt den Standard Programmer an. Kann mit der Option -C überschrieben werden.

Beispiel

  #
  # Overall avrdude defaults
  #
  default_parallel   = "/dev/parport0";
  default_serial     = "/dev/ttyS0";
  default_programmer = "avrisp2";

Mega168 Efuse Bug

Avrdude hat in einigen Versionen einen Bug beim Lesen und Schreiben des Efuse-Byte beim ATmega168. Der Fehler wurde 2005 anscheinend schon einmal behoben, hat sich in einer späteren Version aber wohl wieder eingeschlichen. Der Bug befindet sich in der Datei avrdude.conf. Unter Linux findet man die Datei unter /usr/local/etc/avrdude.conf oder /etc/avrdude.conf.

In dieser Datei sucht man nach dem Bereich für die ATmega168 Definitionen

#------------------------------------------------------------
# ATmega168
#------------------------------------------------------------

Dort sucht man nach

  memory "efuse"
      size            = 1;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read            = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
                        "x x x x x x x x x x x x x o o o";
      
      write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
                        "x x x x x x x x x x x x x i i i";
      ;

Der Bereich wird durch das ersetzt

  memory "efuse"
      size            = 1;
      min_write_delay = 4500;
      max_write_delay = 4500;
        read            = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
                          "x x x x x x x x o o o o o o o o";
        
        write           = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
                          "x x x x x x x x i i i i i i i i";
      ;

avrdude compilieren

Ubuntu/Debian

Um die aktuelle Version von avrdude selbst compilieren zu können muss man vorher einige Pakete installieren. Das macht man am einfachsten direkt mit folgendem Befehl

sudo apt-get install subversion bison flex automake libusb-dev

Anschließend läd man die aktuellen Sourcen herunter.

svn co svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude 

Danach wechselt man in das erstellte Verzeichnis. Um avrdude nun zu erstellen muss man folgende Befehle eingeben

sh bootstrap
./configure
make
sudo make install

Besitzt man eine CPU mit mehreren Kernen kann man statt make den Befehl make -j3 verwenden. Hat man noch mehr Kerne probiert als Parameter -j(Anzahl der Kerne +1). Dies beschleunigt den Compiliervorgang erheblich.

Deinstallieren kann man avrdude mit

sudo make uninstall

Diskussion

Geben Sie Ihren Kommentar ein (Wiki-Syntax ist zugelassen):
Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.
/www/htdocs/w00645de/dokuwiki/data/pages/mikrocontroller/avr/avrdude_tutorial.txt · Zuletzt geändert: 2010/07/18 17:04 von burli
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0