======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=== 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: gksudo gedit /etc/udev/rules.d/80-usbprog.rules *Statt //gedit// kann man natürlich jeden beliebigen Editor verwenden. Standard unter Xfce ist //mousepad//. Wer die Konsole bevorzugt kann auch vi, vim oder nano verwenden ;-). Unter KDE verwendet man diesen Befehl: kdesudo kate /etc/udev/rules.d/80-usbprog.rules 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 ATTR{idVendor}=="03eb", ATTR{idProduct}=="2105", GROUP="plugdev", MODE="0660" # AVR ONE ATTR{idVendor}=="03eb", ATTR{idProduct}=="210d", GROUP="plugdev", MODE="0660" # Atmel XPLAIN CDC Gateway ATTR{idVendor}=="03eb", ATTR{idProduct}=="2ffb", GROUP="plugdev", MODE="0660" # AT90USB AVR DFU bootloader ATTR{idVendor}=="1781", ATTR{idProduct}=="0c9f", GROUP="plugdev", MODE="0660" # adafruit usbtiny 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 wobei 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 [[http://winavr.sourceforge.net/|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 [[http://atmel.com/dyn/products/tools_card.asp?tool_id=2725|AVR Studio]] und den [[http://libusb-win32.sourceforge.net/|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 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 atisp = AT-ISP V1.1 programming cable for AVR-SDK1 from 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 [[:mikrocontroller:avr:fusebit_tutorial#eesave|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 [[fusebit_tutorial#eesave|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 [[fusebit_tutorial#cksel|CKSEL]], [[fusebit_tutorial#sut|SUT]], [[fusebit_tutorial#ckopt|CKOPT]] und [[fusebit_tutorial#wdton|WDTON]] eingestellt. Die Einstellungen mit dem [[http://www.engbedded.com/cgi-bin/fc.cgi?P_PREV=ATmega8&P=ATmega8&V_LOW=FF&V_HIGH=89&M_LOW_0x3F=0x3F&M_LOW_0x80=0x80&M_HIGH_0x06=0x00&M_HIGH_0x10=0x00&M_HIGH_0x20=0x00&B_WTDON=P&B_SPIEN=P&B_CKOPT=P&B_BOOTSZ1=P&B_BOOTSZ0=P|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 "" :01000000FF00 :00000001FF avrdude: safemode: Fuses OK Der Wert findet sich in der ersten Zeile //:01000000**FF**00//. 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 [[http://www.siwawi.arubi.uni-kl.de/avr_projects/#avrprog_boot|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 gcc 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 cd avrdude 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 ~~DISCUSSION~~