AVR-Dragon

Aus Trimension Wiki
Wechseln zu:Navigation, Suche
Dragon platine.png

Einleitung

Der AVR-Dragon ist ein universelles LowCost Entwicklungswerkzeug für Atmel Mikrocontroller. Trotz seines geringen Preises ist es sehr vielseitig und leistungsfähig. Der „Drachen“ unterstützt alle gängigen Programmiermodi sowie fast alle AVR-Mikrocontroller.

Er besitzt neben dem ISP-Anschluß auch ein JTAG-Interface und unterstützt neben der Programmierung auch OCD (On-Chip-Debugging) für viele Controller. Ein zusätzlicher High-Voltage Serial-/Parallel-Interface ermöglicht auch die Parallelprogrammierung und das Rücksetzen von Controllern mit fehlerhaft programmierten Fuse-Bits. Zum Anschluß an den PC dient ein USB-Anschluß, was sehr vorteilhaft ist, da die meisten modernen Rechner nicht mehr über RS232- oder Parallel-Ports verfügen.

In [1] wird der AVR-Dragon kurz vorgestellt und seine grundlegenden Funktionen dargestellt. Leider werden darin auch eine Reihe „vermeintlicher“ Nachteile beschrieben, die sich bei näherer Betrachtung jedoch sehr schnell in Luft auflösen. Der AVR-Dragon wird zu einem absoluten Kampfpreis angeboten. Allein ein JTAG-Adapter kostet bereits ein Vielfaches mehr. Da wundert es wohl kaum, daß sich der Lieferumfang auf ein Minimum beschränkt. Was hier fehlt, kann ohne große Mühe und mit geringem Aufwand selbst nachgerüstet werden.

  • Der AVRDragon wird ohne Gehäuse geliefert. Das „nackte“ Board kann aber leicht in ein Gehäuse eingebaut werden. Der Artikel in [1] zeigt bereits ein Beispiel. Abbildung 1 und Abbildung 2 zeigen meine Version in einem preiswerten Gehäuse von Reichelt.
  • Kabel liegen dem AVRDragon ebenfalls nicht bei. Ein USB-Kabel dürfte in den meisten Fällen vorhanden sein und die fehlenden ISP- und JTAG-Kabel können sehr leicht selbst gefertigt werden. Da es sich um „Standard“-Kabel handelt, sind die meistens auch schon vorhanden.
  • Die Prototype-Area ist optional und wird nicht zwingend benötigt. Wer die nutzen möchte, kann die fehlenden Sockel und Header leicht nachrüsten.
  • Die Empfindlichkeit gegenüber statischer Aufladungen bedarf eigentlich keiner Erwähnung, denn wer mit Mikrocontrollern hantiert sollte sich dieser Tatsache bewußt sein und entsprechende Vorsicht walten lassen.
  • Der Stromverbrauch beträgt nur 150mA, weshalb, anders als in [1] beschrieben, kein USB-Hub benötigt wird. Ein Standard-USB2 Port gibt laut Spezifikation 500mA ab. Damit bleiben noch 300mA zur Versorgung eines externen Bords (Target) übrig.
  • Die Dokumentation wird nur mit dem AVR-Studio mitgeliefert, ist aber auch online verfügbar [2]. Das AVR-Studio wird kostenlos von Atmel angeboten, aber leider nur für Windows. Wer mit Linux arbeitet, muß auf die Online Dokumentation [2] zurück greifen.
  • Die fehlenden Patchkabel sind schon etwas schwieriger zu besorgen. Diese werden bei Nutzung der Prototype-Area benötigt. Hier muß man ein wenig im Internet recherchieren oder selbst welche herstellen.

Dieses Dokument beschreibt die Handhabung des AVR-Dragon und erläutert wichtige Details aus der Original-Dokumentation [2].

Abbildung 1 - Innenansicht
Abbildung 2 - Aussenansicht

Prototype Area

Die Prototype-Area ist ein optionaler Bereich auf der Platine, den man nutzen kann um Controller-Chips direkt, also ohne externes Board, zu programmieren und zu debuggen.

Dazu müssen die fehlenden Header und IC-Sockel nachgerüstet werden. Ein Nullkraft-Sockel ermöglicht die Aufnahme aller Chips im DIL-Gehäuse. Alle Controller-Pins sind mit dem 40 poligen Device-Expand-Header 1:1 verbunden. Über diesen Header wird der Controller mit Spannung versorgt und mit den Programmier-Interfaces über Patchkabel (einpolige Jumper Kabel) verbunden. Wird immer der gleiche Controller und der gleiche Programmier-Modus verwendet, kann man auch auf die Bestückung der fehlenden Header verzichten und die Verdrahtung hart vornehmen indem man die Verbindungen lötet

Durch die Prototype-Area wird der AVR-Dragon sehr universell einsetzbar:

  • Programmieren von Chips direkt auf dem Board
  • Debuggen außerhalb der Schaltung (ist aber auf Grund der fehlenden Peripherie oft nur eingeschränkt möglich)
  • Rücksetzen, „verfuseter“ Controller
  • Als ISP Adapter für fertig aufgebaute Schaltungen (Programmieren, debugWire OCD)
  • JTAG Adapter zum Programmieren und debuggen externer Schaltungen

Soll die Prototype-Area nicht genutzt werden, braucht man die fehlenden Header natürlich nicht zu bestücken. Um Platz zu sparen, kann dieser Bereich dann auch abgesägt werden.

Die Atmel-Dokumentation [2] enthält für jeden Controller und jeden Programmier-Modus Verbindungs-Schemata für das korrekte Setzen der Patchkabel.

Eigenschaften

Der AVR-Dragon unterstützt aktuell die folgenden Protokolle:

  • In-System-Programming (ISP) über ISP Header
  • High Voltage Programming (HVSP) über HVPROG Header
  • Parallel Programming (PP) über HVPROG Header
  • JTAG Programming (JTAG) über JTAG Header

Zusätzlich unterstützt der AVR-Dragon die folgenden Emulations-Modi zum Debuggen:

  • JTAG
  • debugWire

Der AVR-Dragon kann mit einem externen Board (Target) verwendet werden oder direkt über die Prototype-Area. Target-Boards können zudem über den AVR-Dragon, der selbst über den USB-Port versorgt wird, mit Strom versorgt werden (max. 300mA). Das Board stellt dazu einen eigenen Header bereit der eine Spannung von 5V liefert.

Verfügt das Target-Board über eine eigene Stromversorgung, die weniger als 5V beträgt, führt der AVR-Dragon automatisch entsprechende Pegel-Konvertierungen durch (Level-Converting). In diesem Fall darf keine Verbindung mit dem VCC Header hergestellt werden.

Der AVR-Dragon wird vom AVR-Studio in allen Versionen, als auch vom OpenSource Tool „AVRDude“ unterstützt. Über das AVR-Studio kann ein Firmware-Update durchgeführt werden um z.B. neue Controller zu unterstützen.

Technische Daten
Abmessungen 53 x 105 x 15 mm (HBT)
Spannungsversorgung 5 V (über USB)
Stromverbrauch (max) 150 mA
Umgebungstemperatur 0 - 70° C
maximaler Strom externes Board
VCC Header
300 mA
Spannungsbereich externes Board 1,8 V - 5,5 V
Pin-PullUp (max) ISP/JTAG Header 1K
Pin-PullDown (max) ISP/JTAG Header 10K
Achtung: AVR-Dragon benötigt zum Betrieb einen USB 2.0 Port,
welcher einen Strom von 500 mA liefern kann.

Unterstützte Controller

Das [2] enthält eine Tabelle der unterstützten Controller-Chips. Diese Liste wird ständig durch neuere Firmware-Versionen erweitert. In dieser Tabelle werden auch die jeweils unterstützen Programmier- und Emulations-Modi gelistet.

Wichtige Hinweise

  • Bevor ein externes Board an den AVR-Dragon angeschlossen wird, sollte dieses immer zuerst mit dem PC verbunden und damit eingeschaltet sein.
  • Der AVR-Dragon erkennt die Spannung des externen Boards für die Pegel-Konvertierung am Pin 2 des ISP Headers oder am Pin 4 des JTAG Headers. Das geschieht auch bei der HVSP-Programmierung
  • HVSP läuft immer auf 5V-Level. Es muß sicher gestellt werden, daß das externe Board ebenfalls auf 5V läuft, wenn dieses Interface mit einem externen Board genutzt wird.
  • Der VCC Header liefert ausschließlich 5V und kann max. 300mA treiben
  • Wenn der AVR-Dragon für die Programmierung eines externen Boards am STK500 benutzt wird, muß der RESET-Jumper am STK500 entfernt werden.

Anschluß des AVR-Dragon

Der AVR-Dragon stellt die folgenden Header zur Verfügung:

  • ISP Header (bestückt) zum Programmieren und Debuggen (debugWire OCD)
  • JTAG Header (bestückt) zum Programmieren und Debuggen (JTAG OCD)
  • VCC Header (bestückt) zur Stromversorgung eines Chips in der Prototype-Area oder zur Versorgung eines externen Board (5V, max 300mA)
  • HVPROG Header (nicht bestückt) zur Programmierung (HVSP und PP)
  • Device Expand Header (nicht bestückt) zum Patchen eines On Board Controllers

Die Position dieser Header ist in Abbildung 3 dargestellt. Es ist wichtig darauf zu achten, daß die Zählung der Pins an den Headern unterschiedlich ist.

  • Beim Expand-Header ist die Zählung wie am IC-Sockel, also vom Pin 1 die Reihe durchzählen und dann auf der anderen Seite zurück. (Pin 1 gegenüber Pin 28/40).
  • Die Programmier-Header zählen die Pins anders. Hier liegen die geraden Pins den ungeraden Pins gegenüber. (Pin 1 gegenüber Pin 2).
Abbildung 3 - Position der Header

In-System-Programming

ISP Header

Der ISP Header nutzt das 6-polige AVR ISP Pin-Layout zur Verbindung mit externen Boards. Das ermöglicht die Verwendung bereits vorhandener Kabel. Die externen Boards sollten daher ebenfalls einen 6-poligen ISP-Anschluß verwenden. Die Signale werden 1:1 miteinander verbunden (MISO-MISO, SCK-SCK, MOSI-MOSI, RST-RST).

Die Signale dieses Headers sind „Level-Converted“, erlauben also auch den Anschluß an Boards mit abweichender Stromversorgung (1,8V – 5,5V). Die Betriebsspannung des Targets muß dazu an Pin 2 des ISP Headers anliegen. Wird ein Controller in der Prototype-Area programmiert, wird Pin 2 des ISP-Headers mit VCC vom VCC Header verbunden.

debugWire Interface (ISP)

Der Anschluß eines externen Boards zur Kommunikation über das debugWire-Interface erfolgt über den ISP-Header. Für dieses Protokoll sind drei Leitungen notwendig (RESET, VTG und GND). Dieses Interface nutzt nur den RESET-Pin für die Kommunikation mit dem externen Board. Um dieses Interface nutzen zu können, muß das DWEN-Fuse-Bit programmiert werden (DWEN=0). Diese Programmierung muß über das ISP-Interface erfolgen (alle 6 Leitungen). Daher sollten generell nur 6-polige Kabel verwendet werden um die Arbeit beim Umschalten zu vereinfachen. Die nicht genutzten Pins werden vom AVR-Dragon automatisch tristate gesetzt.

Wenn das DWEN-Fuse-Bit programmiert ist, ist ISP deaktiviert, da das debugWire-Interface die Kontrolle über die RESET-Leitung übernimmt. Das Bit kann somit nicht über die ISP-Schnittstelle deaktiviert werden. Das DWEN-Fuse-Bit kann nur über debugWire oder High-Voltage Programmierung abgeschaltet werden.

Ein eventuell vorhandener PullUp-Widerstand am RESET-Pin des Controllers muß größer als 10K sein um eine fehlerfreie Funktion des debugWire Interfaces zu gewährleisten.

JTAG Interface

Der 10-polige JTAG-Header verwendet das Standard JTAG-Pin-Layout. Wird der AVR-Dragon über den JTAG-Header mit einem externen Board verbunden, findet auch hier eine Pegel-Konvertierung statt. Die Spannung muß dazu vom externen Board an den Pin 4 des JTAG-Adapters gelegt werden. Über den JTAG Header findet, anders als beim ISP-Header keine Versorgung des externen Boards statt. Dieses muß über eine eigene Stromversorgung oder über den VCC-Header mit Strom versorgt werden.

JTAG Header
Pin Signal I / O Beschreibung
1 TCK Output Takt vom AVR-Dragon zum externen Board
2 GND - Masse
3 TDO Input Test Data Output, Daten vom Target zum Dragon
4 VTref Input Referenz-Spannung vom externen Board. Wird vom Pegel-Konverter benötigt
5 TMS Output Test Mode Select, Moduswahl Signal vom Dragon zum Controller
6 RST In / Out Open-Collector Ausgang vom Adapter zum Reset des Controllers. Dieser Pin dient

ebenfalls als Eingang um ein externes Reset am Target zu erkennen

7 - - nicht genutzt
8 - - nicht genutzt
9 TDI Output Test Data Input, Daten vom Target zum Dragon
10 GND - Masse

Die Dokumentation [2] enthält weitere Hinweise zum Anschluß eines externen Boards an den JTAG-Header. Um JTAG nutzen zu können, muß das Fuse-Bit JTAGEN programmiert werden. Das kann nur über ISP oder HV-Programmierung erfolgen.

High-Voltage Programming (HVSP/PP)

Der HVPROG Header ist nicht bestückt, da dieser eher selten benötigt wird. Zum Programmieren unterstützen alle AVR-Controller das 6-polige ISP-Protokoll und viele Bausteine zusätzlich JTAG. HV-Programming wird dagegen nur sehr selten benötigt. Häufig wird dieses Protokoll nur zum Retten „verfuseter“ Controller verwendet.

Die Signale dieses Headers sind nicht Level-konvertiert. Dieses Interface arbeitet immer mit 5V-Pegeln. Diese 5V-Spannung ist vom VCC-Header an den Pin 2 des ISP Headers oder an Pin 4 des JTAG-Headers zu legen, damit der AVR-Dragon die Target-Spannung lesen kann.

Es wird empfohlen, diesen Header nicht mit externen Boards zu verwenden, da dies leicht zu Schäden am AVR-Dragon oder auch am Target-Board führen kann. Externe Boards müssen für die Nutzung der HV-Programmierung über den VCC-Header versorgt werden ! Weiterhin ist zu beachten, daß das externe Target am RESET-Pin 12V verkraften muß.

Das Pin-Mapping dieses Header ist nicht für alle Controller gleich.

HVSP - Alle MC außer ATtiny24/44/84
HVSP - ATtiny24/44/84
HVPP - Alle MC außer ATtiny 26/261/461/861/2313
HVPP - ATtiny26/261/461/861
HVPP - ATtiny2313

Kleine Controller mit wenig Anschlüssen haben nicht ausreichend I/O-Pins für das Parallel-Programming-Interface. Diese Controller nutzen daher das High-Voltage-Serial-Programming Protokoll, eine serielle Version der Parallel-Programmierung. Beide Interfaces nutzen den den HVPROG-Header.

VCC Header

VCC Header

Der VCC Header stellt 5V VCC und GND Anschlüsse zur Verfügung. Er wird verwendet um einen zu programmierenden Controller in der Prototype-Area oder ein externes Board mit Spannung zu versorgen. Dabei ist zu beachten, daß das externe Board niemals mehr als 300mA Strom zieht. Voraussetzung dafür ist, daß der USB-Port genügend belastbar ist (normalerweise 500mA).

Device Expand Header

Der Expand-Header ist direkt (parallel) verbunden mit dem 28-Pin und dem 40-Pin IC Sockel. Pin 1 ist durch ein quadratisches Lötauge gekennzeichnet. Die Numerierung der Pins am Header ist identisch mit der Numerierung der Pins an den IC-Sockeln.

Wenn ein Controller in der Prototype-Area programmiert oder debugged wird, müssen die Pins des Expand-Headers direkt auf die entsprechenden ISP-, JTAG-, VCC oder HVSP-Header geroutet werden. Wie dieses Routing aussieht, ist vom Controller abhängig und wird in den Diagrammen der Atmel-Dokumentation [2] beschrieben.

Status LED’s

Das Board enthält zwei Status LED’s, die neben der USB-Buchse plaziert sind. Die folgende Tabelle beschreibt die Status Informationen dieser LED’s. Für Fehlersituationen siehe Abschnitt „Fehlerbehandlung“ der Atmel Dokumentation [2].

LED Farbe Beschreibung
2 Grün USB Daten Transfer
1 Rot Idle, nicht verbunden mit der Software
Aus Idle, verbunden mit der Software
Grün Daten Transfer
Gelb Firmware-Upgrade oder Initialisierung

Programmierung

USB-Treiber

Bevor man den AVR-Dragon anschließt und nutzen kann, muß ein geeigneter USB-Treiber installiert werden, damit der AVR-Dragon korrekt erkannt wird.

Arbeitet man mit dem AVR-Studio, wird ein USB-Treiber mitgeliefert und installiert. Bis zur Version 5 des AVR-Studio war dies der Jungo-Treiber. Mit der aktuellen Version 6 liefert Atmel einen modifizierten Jungo Treiber unter eigenem Namen mit. Dieser beinhaltet noch einen USB-Treiber von Segger für die SAM-Tools.

Das AVR-Studio ist leider nur für Windows verfügbar. Unter Linux wird zum Programmieren häufig AVRDUDE verwendet. Unter Linux ist kein spezieller USB-Treiber notwendig. Der AVR-Dragon sollte beim Einstecken erkannt werden.

Für die Programmierung mit WinAVR (AVRDUDE) muß ein anderer Treiber installiert werden. Dieser Treiber wird mit WinAVR mitgeliefert und befindet sich im Ordner „Util“. Besser ist jedoch die Verwendung der aktuellen Version des libusb Treibers [3]. Soll WinAVR parallel zum AVRStudio genutzt werden, wird nicht der libusb Treiber selbst sondern ein Treiber-Filter installiert. Der libusb-Treiber [3] enthält auch einen Installer für den Filter.

AVR-Studio

Das wohl komfortabelste Tool ist das AVR-Studio welches von Atmel kostenlos zur Verfügung gestellt wird. Leider ist das AVR-Studio nur für Windows erhältlich. Es basiert auf dem Microsoft Visual Studio, weshalb man für die Installation reichlich Zeit und einige Gigabytes auf der Platte frei haben sollte.

Die Installation des AVR-Studio ist problemlos. Ein passender USB-Treiber für alle gängigen Programmiertools, so auch für den AVR-Dragon wird automatisch mit installiert. Der AVR-Dragon sollte erst nach der Installation des AVR-Studio an den Rechner gesteckt werden, da der USB-Treiber aktiv sein muß.

AVRStudio Programmier-Dialog

Das AVR-Studio ist eine sehr leistungsfähige IDE, die es ermöglicht, Programme in C, C++ und Assembler zu schreiben. Es enthält weiterhin einen grafischen Debugger und einen Simulator für die meisten AVR-Controller.

Über den Programmier-Dialog (Tools > Device Programming), kann man den angeschlossenen Controller bzw. das externe Board direkt programmieren. Über diesen Dialog können auch die Fuse’s programmiert oder ausgelesen werden. Das AVR-Studio ist sehr gut auf den AVR-Dragon abgestimmt und kann darüber hinaus auch mit anderen Programmern zusammenarbeiten.

AVR Tools

Die AVR Commandline Tools wurden mit dem AVR-Studio 4 bereit gestellt und ermöglichten das Programmieren auch von der Windows-Shell. Die Tools enthielten ein Programm avrdragon.exe auf das in der Original-Doku [2] verwiesen wird. Diese Tools funktionieren mit dem neuen AVR-Studio nicht mehr. AVR-Studio 6 liefert dafür ein universelles und sehr mächtiges Kommandozeilen-Werkzeug mit, das nicht nur mit dem AVR-Dragon funktioniert. Es heißt atprogram.exe und befindet sich im Ordner <install_root>/Atmel Studio 6.0/avrdbg/. Unter Windows ist dieses Programm die erste Wahl für makefiles oder für das Programmieren von der Kommandozeile. Mit atprogram –? bekommt man eine umfangreiche Hilfe über die möglichen Optionen angezeigt.

AVRDUDE

Wer mit Linux oder Mac OS programmiert, kann auf die Atmel-Tools leider nicht zugreifen. AVRDUDE ist eine von vielen Alternativen und funktioniert auf verschiedenen Plattformen. Es handelt sich ein Kommandozeilen-Tool das zum Programmieren von AVR-Controllern dient. Der Aufruf kann leicht in makefiles integriert werden. Für Windows wird das Tool mit WinAVR mitgeliefert.

Die Handhabung ist jedoch etwas kompliziert. Über ein umfangreiches Set an Optionen muß man AVRDUDE mitteilen, was zu tun ist. avrdude -? zeigt die verfügbaren Optionen an. Mindestens anzugeben ist der Controller-Type (part –p), der Port (-P) und der Programmer (-c). Die Bezeichnungen dieser Schalter sind in der Datei avrdude.conf definiert, die sich im gleichen Verzeichnis befindet wie das Programm.

Beispiel: avrdude –p t13 –P usb –c dragon_isp -t

Das Beispiel startet AVRDUDE im interaktiven Modus für einen ATtiny13 am USB-Port im ISP-Modus. Mit ? bekommt man die verfügbaren Befehle in dieser Console.

Fazit

Atmel beschreibt den AVR-Dragon als „the new standard for low cost development tools“. Hersteller übertreiben da gern ein wenig, aber ganz sicher ist der AVR-Dragon ein äußerst flexibles, universelles und mächtiges Entwicklungs-Tool, daß für diesen Preis absolut konkurrenzlos ist. Er unterstützt fast alle AVR-Controller und alle gängigen Programmier- und Emulations-Modi, kann als Programmer für externe Target-Boards oder aber auch als Standalone-Programmer genutzt werden.

Schade ist allerdings, daß die Dokumentation nur sehr schwer zu finden, und leider auch wenig aktuell ist. Dieser Artikel soll helfen, die eine oder andere Lücke zu schließen. Auf Grund der Komplexität war es leider nicht möglich bei der Anwendung in die Tiefe zu gehen, aber es sollten Anregungen und Ansatzpunkte für eigene Recherchen gegeben sein.

Negativ zu erwähnen sei hier noch die Microsoft-Lastigkeit, die nicht zeitgemäß ist, da gerade im Embedded-Bereich Linux sehr weit verbreitet ist und von vielen Entwicklern, auch im professionellen Segment, favorisiert wird.

Trotz alledem ist der AVR-Dragon unbedingt zu empfehlen, da er kaum Wünsche offen läßt.

Literaturverzeichnis

  1. 1,0 1,1 1,2 AVR-Dragon - mikrocontroller.net Vorstellung des AVR-Dragon
  2. 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 Introducing AVR-Dragon - Atmel Corporation Handbuch AVR-Dragon
  3. 3,0 3,1 libusb-win32 - SourceForge Projektseite des libusb-Treibers