AVR Studio 5 und alternative ISP-Programmer

Die originalen Atmel-ISP-Programmer sind nicht besonders preiswert. Grund genug, dass sich im Laufe der Jahre so einige günstige Alternativen am Markt breit machen konnten. Diese sind jedoch oftmals nicht 100%ig kompatibel und selbst wenn sie im 4er AVR Studio noch liefen, verweigern sie im 5er teils ihren Dienst.

Ich selbst hatte mir vor vielen Jahren ein STK500 Entwicklungsboard von Atmel zugelegt, welches ich mangels COM-Schnittstellen an heutigen PCs nicht mehr zum Programmieren nutzen kann. Als Alternative legte ich Vorschau: Stange USB-ISP-Programmieradaptermir deshalb vor einem knappen Jahr den recht beliebten Stange USB-ISP-Programmer zu. Dieser spricht das STK500v2-Protokoll und funktioniert im AVR Studio 4 ganz hervorrangend. Im AVR Studio 5 wird der Programmierer allerdings nicht mehr erkannt. Ob das eine kleine Gemeinheit seitens Atmel oder ein Fehler in der Protokollimplementierung des Programmers ist, sei mal dahin gestellt. Um den Stange-AVR-Programmer trotzdem nutzen zu können, gibt es somit noch zwei Möglichkeiten. Einerseits kann man parallel weiterhin das AVR Studio 4 benutzen und die 5er Kompilate mit dem 4er in den Chip programmieren oder man nutzt das unter der GPL stehende Tool avrdude. Mit avrdude hat man den großen Vorteil, dass man auch Linux-Maschinen zum Programmieren nutzen kann. Für Windows werden keine fertigen Kompilate von Entwicklerseite aus angeboten, bei mikrocontroller.net (Forensuche hilft) finden sich aber stets von Community-Mitgliedern vorkompilierte aktuelle avrdude.exe-Dateien.

Vorschau: Bus PirateDa ich außerdem auch noch über einen Bus-Pirate verfüge, habe ich auch den angetestet. Der Bus-Pirate ist ein universelles Programmier- und Schnüffeltool von Dangerous Prototypes und ist z.B. beim SeeedStudio erhältlich. Einzige Schwierigkeit bei der Nutzung von avrdude sind die Fuses, aber auch dafür finden sich Lösungen im Netz. Wer die Fuses (z.B. wegen externem Oszillator oder Frequenzanpassung) ändern möchte, wird mit der Suchmaschine seiner Wahl schnell fündig.

Im Folgendenden führe ich daher nur einige kurz erklärte avrdude-Aufrufe auf, die als Hilfestellung für eigene Bedürfnisse dienen.

Die folgende Zeile programmiert die Datei tiny44.hex ins Flash eines ATtiny44. Hierfür wird ein Stange USB-ISP-Programmer am com-Port 3 verwendet. Da der ATtiny24/44/84 Originalzustand mit nur 1 MHz (8 MHz Core mit Div-8-Fuse) läuft und der Programmer dafür zu schnell arbeitet, muss mit dem Parameter “-B 10″ die Übertragungsgeschwindigkeit reduziert werden.

avrdude -c stk500v2 -P com3 -p ATtiny44 -U flash:w:tiny44.hex -B 10

Selbiger Aufruf für einen Bus-Pirate am com-Port 6, der automatisch mit niedriger Geschwindigkeit arbeitet:

avrdude -c buspirate -P com6 -p ATtiny44 -U flash:w:tiny44.hex

Um auf einen externen Quarz mit mindestens 8 MHz umzustellen, verwendet man dann einen der folgenden Aufrufe:

avrdude -c buspirate -P com6 -p ATtiny44 -U lfuse:w:0x6f:m -U
hfuse:w:0xdf:m -U efuse:w:0xff:m -U flash:w:tiny44.hex
avrdude -c stk500v2 -P com3 -p ATtiny44 -U lfuse:w:0x6f:m -U
hfuse:w:0xdf:m -U efuse:w:0xff:m -U flash:w:tiny44.hex -B 10

Um wieder auf internen 8-MHz-RC-Oczillator zurückzustellen (ohne dabei den Program-Flash zu überschreiben) kann man auf folgende Zeilen zurückgreifen:

avrdude -c buspirate -P com6 -p ATtiny44 -U lfuse:w:0x62:m -U
hfuse:w:0xdf:m -U efuse:w:0xff:m
avrdude -c stk500v2 -P com3 -p ATtiny44 -U lfuse:w:0x62:m -U
hfuse:w:0xdf:m -U efuse:w:0xff:m -B 10

Auf ähnliche Weise lassen sich mittels avrdude dutzende verschiedener Programmer und alle verfügbaren AVR-Controller programmieren. Aber bitte daran denken, dass die Fuses für jeden Controllertyp etwas anders sind und neu bestimmt werden müssen. Meist (oder immer?) sind die Fuses allerdings innerhalb der Familien (wie z.B. die des ATMega8-Nachfolgers mit ATMega48/88/168/328) identisch.

Noch ein Hinweis: serienmäßig starten die AVR-Mikrocontroller mit internem RC-Oscillator und lassen sich daher ohne externen Quarz bzw. Quarzoscillator programmieren. Stellt man die Fuses aber auf eine externe Taktquelle um, dann muss anschließend auch eine da sein! Auch für das Zurückstellen auf internen Oscillator sollte diese Taktquelle an den XTAL-Pins angeschlossen sein, manchmal klappt es aber auch ohne.

2 Reaktionen zu “AVR Studio 5 und alternative ISP-Programmer”

  1. admin

    Noch eine kleine Ergänzung: Zum Stange-ISP-Programmer wird ein Flachbandkabel mitgeliefert, welches 6- und 10-polige ISP-Schnittstellen unterstützt. Der Bus-Pirate hingegen wird ohne Kabel ausgeliefert, man bekommt für einen schmalen Taler allerdings ein Bus Pirate Probe Kit (Anschlusskabel 10-Pin auf 10x Mini-Klemme) bestellt. Die Miniklemmen bieten zwar eine sehr hohe Flexibilität, sind für die regelmäßige Nutzung als ISP-Kabel aber absolut ungeeignet. Daher ist es empfehlenswert, sich ein entsprechendes Kabel selbst zu basteln. Auf obigem Bus-Pirate-Foto ist ein solches zu sehen. Am anderen Ende hängt in beiden Bildern ein Mini-Eval-Board mit ATtiny44.

    Hier noch einige beispielhafte Ausgaben von avrdude.

    avrdude -c stk500v2 -P com3 -p ATtiny44 -U flash:w:tiny44.hex -B 10
     
    avrdude: AVR device initialized and ready to accept instructions
     
    Reading | ################################################## | 100% 0.04s
     
    avrdude: Device signature = 0x1e9207
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
     
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "tiny44.hex"
    avrdude: input file tiny44.hex auto detected as Intel Hex
    avrdude: writing flash (166 bytes):
     
    Writing | ################################################## | 100% 0.20s
     
    avrdude: 166 bytes of flash written
    avrdude: verifying flash memory against tiny44.hex:
    avrdude: load data flash data from input file tiny44.hex:
    avrdude: input file tiny44.hex auto detected as Intel Hex
    avrdude: input file tiny44.hex contains 166 bytes
    avrdude: reading on-chip flash data:
     
    Reading | ################################################## | 100% 0.22s
     
    avrdude: verifying ...
    avrdude: 166 bytes of flash verified
     
    avrdude: safemode: Fuses OK
     
    avrdude done.  Thank you.

    Und hier noch eine Ausgabe des Bus-Pirate:

    avrdude -c buspirate -P com6 -p ATtiny44 -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m
     
    Detecting BusPirate...
    **
    **  Bus Pirate v3b
    **  Firmware v5.10 (r559)  Bootloader v4.4
    **  DEVID:0x0447 REVID:0x3043 (24FJ64GA002 B5)
    **  http://dangerousprototypes.com
    **
    BusPirate: using BINARY mode
    avrdude: AVR device initialized and ready to accept instructions
     
    Reading | ################################################## | 100% 0.09s
     
    avrdude: Device signature = 0x1e9207
    avrdude: reading input file "0x62"
    avrdude: writing lfuse (1 bytes):
     
    Writing | ################################################## | 100% 0.03s
     
    avrdude: 1 bytes of lfuse written
    avrdude: verifying lfuse memory against 0x62:
    avrdude: load data lfuse data from input file 0x62:
    avrdude: input file 0x62 contains 1 bytes
    avrdude: reading on-chip lfuse data:
     
    Reading | ################################################## | 100% 0.03s
     
    avrdude: verifying ...
    avrdude: 1 bytes of lfuse verified
    avrdude: reading input file "0xdf"
    avrdude: writing hfuse (1 bytes):
     
    Writing | ################################################## | 100% 0.03s
     
    avrdude: 1 bytes of hfuse written
    avrdude: verifying hfuse memory against 0xdf:
    avrdude: load data hfuse data from input file 0xdf:
    avrdude: input file 0xdf contains 1 bytes
    avrdude: reading on-chip hfuse data:
     
    Reading | ################################################## | 100% 0.05s
     
    avrdude: verifying ...
    avrdude: 1 bytes of hfuse verified
    avrdude: reading input file "0xff"
    avrdude: writing efuse (1 bytes):
     
    Writing | ################################################## | 100% 0.03s
     
    avrdude: 1 bytes of efuse written
    avrdude: verifying efuse memory against 0xff:
    avrdude: load data efuse data from input file 0xff:
    avrdude: input file 0xff contains 1 bytes
    avrdude: reading on-chip efuse data:
     
    Reading | ################################################## | 100% 0.03s
     
    avrdude: verifying ...
    avrdude: 1 bytes of efuse verified
     
    avrdude: safemode: Fuses OK
     
    avrdude done.  Thank you.
  2. admin

    Gerade wenn man mit besonders kleinen Chips hantiert, geht beim Einlöten gerne etwas schief. Im Folgenden habe ich zwei Ausgaben aufgeführt, bei denen ich den ATMega328 im QFN-Format nicht korrekt kontaktiert hatte. Die erste Ausgabe ist nur in Kurzform:

    C:\Program Files (x86)\Atmel\avrdude>avrdude -c buspirate -P com6 -p m328p
     
    Detecting BusPirate...
    **
    **  Bus Pirate v3b
    **  Firmware v5.10 (r559)  Bootloader v4.4
    **  DEVID:0x0447 REVID:0x3043 (24FJ64GA002 B5)
    **  http://dangerousprototypes.com
    **
    BusPirate: using BINARY mode
    avrdude: initialization failed, rc=-2
             Double check connections and try again, or use -F to override
             this check.
     
     
    avrdude done.  Thank you.

    Die zweite Variante beinhaltet auch Versionsinfos (Parameter -v):

    avrdude -c buspirate -P com6 -p m328p -v
     
    avrdude: Version 5.11, compiled on Aug 30 2011 at 10:24:06
             Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
             Copyright (c) 2007-2009 Joerg Wunsch
     
             System wide configuration file is "C:\Program Files (x86)\Atmel\avrdude\avrdude.conf"
     
             Using Port                    : com6
             Using Programmer              : buspirate
             AVR Part                      : ATMEGA328P
             Chip Erase delay              : 9000 us
             PAGEL                         : PD7
             BS2                           : PC2
             RESET disposition             : dedicated
             RETRY pulse                   : SCK
             serial program mode           : yes
             parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             ByteDelay                     : 0
             PollIndex                     : 3
             PollValue                     : 0x53
             Memory Detail                 :
     
                                      Block Poll               Page                       Polled
               Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
               flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
               lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
               calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
               signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
     
             Programmer Type : BusPirate
             Description     : The Bus Pirate
     
    Detecting BusPirate...
    avrdude: buspirate_readline(): #
    avrdude: buspirate_readline(): RESET
    avrdude: buspirate_readline():
    **
    avrdude: buspirate_readline(): Bus Pirate v3b
    **  Bus Pirate v3b
    avrdude: buspirate_readline(): Firmware v5.10 (r559)  Bootloader v4.4
    **  Firmware v5.10 (r559)  Bootloader v4.4
    avrdude: buspirate_readline(): DEVID:0x0447 REVID:0x3043 (24FJ64GA002 B5)
    **  DEVID:0x0447 REVID:0x3043 (24FJ64GA002 B5)
    avrdude: buspirate_readline(): http://dangerousprototypes.com
    **  http://dangerousprototypes.com
    avrdude: buspirate_readline(): HiZ>
    **
    BusPirate: using BINARY mode
    BusPirate binmode version: 1
    BusPirate SPI version: 1
    avrdude: initialization failed, rc=-2
             Double check connections and try again, or use -F to override
             this check.
     
    BusPirate is back in the text mode
     
    avrdude done.  Thank you.

    So die Stromversorgung ok ist und man keine Kurzschlüsse gebaut hat, bedeutet die Meldung

    avrdude: initialization failed, rc=-2

    mit extrem großer Wahrscheinlichkeit, dass einer der ISP-Pins nicht (richtig) verbunden ist. Ich bin in dem Zusammenhang aber auch schon über die Fehlerausgabe rc=-1 gestolpert.

    Bei TQFP hat man noch die einfache Möglichkeit, mit einem Durchgangsprüfer auf den Pins anzusetzen und den Durchgang zum ISP-Stecker zu testen. Bei QFN/MLF kommt man beim ATMega meist noch mit einer Nadel an die Pins heran, bei vielen anderen Chips in dieser Bauform hilft aber selbst die Nadel nicht mehr. In meinem Fall war der MOSI-Pin nicht verbunden, was sich schließlich sogar mit einer recht großen Lötspitze (ca. 1.5mm) beheben ließ.

Einen Kommentar schreiben