Der von der Joint Test Action Group entwickelte und häufig als ’JTAG Standard’ bezeichnete Standard IEEE 1149.1, wurde in der gesamten Industrie übernommen
JTAG ist ein standardisiertes Programmier- und Testinterface für digitale Schaltkreise. Eigentlich für programmierbare Logikbausteine entwickelt, erfreut sich der auch als IEEE 1149.1 bekannte Standard einer wachsenden Beliebtheit im Mikrocontroller-Markt.
Alle neueren Atmel AVRs mit mehr als 8kByte Flash besitzen eine JTAG Schnittstelle. JTAG ermöglicht 3 wesentliche Funktionen für die Entwicklung und Fertigung von Hardware, die mit einem megaAVR bestückt ist.
- Programmieren des Flash und EEproms unabhängig vom dem an der CPU anliegenden Clocks.
- Debuggen in der Schaltung (ICE) mit der original CPU ohne zusätzliche Spezial Fassungen JTAG Debugging bietet die Funktionen:
- Breakpoint setzen/rücksetzen
- Run/Stop
- Single Step
- Watches auf Variable setzen
- Register und IO-Port view
- Testen der CPU und des kompletten Ports über das Boundary Scan Feature der CPU. Dazu muss das Board nur Spannung haben, ein Programm in der CPU ist nicht notwendig. Nicht einmal der Oszillator muss dazu funktionieren.
Die interne Boundary Chain der CPU wird dazu benutzt, alle internen Register und Ports der CPU zu lesen und zu schreiben. Dadurch ist es möglich, jeden Pin der CPU fernzusteuern bzw. einzulesen. Durch entsprechendes Steuern der IO-Pins der CPU wird auf der Hardware (Board) ein bestimmtes Verhalten erzeugt, das dann über die IO-Pins wieder eingelesen werden kann. Da bei bestimmten Soll-Vorgaben durch PIN-Outputs auch eine bestimmte Reaktion der sonstigen Hardware erwartet werden muss, kann durch einlesen der Pins und anschliessendem Vergleich von Ist- und Sollwert auf Hardware Fehler des Boards geschlossen werden. Anhand des Schaltplans/Layouts und den auftretenden Fehlern ist dann sogar eine recht gute Bestimmung der Art des Fehlers und dessen Position auf dem Board möglich.
Inhaltsverzeichnis
AVR JTAG
Dieser Abschnitt befasst sich mit dem JTAG-Interface der AVR-Mikrocontroller von Atmel.
Dieser Artikel ist noch lange nicht vollständig. Der Auto/Initiator hofft das sich weitere User am Ausbau des Artikels beteiligen.
Das Ergänzen ist also ausdrücklich gewünscht! Besonders folgende Dinge würden noch fehlen: Debuggen per JTAG |
JTAG-Programmer
Die JTAG-Schnittstelle der AVRs war lange Zeit für Bastler eher uninteressant, da das nötige Programmiergerät, der JTAG ICE MKII, etwa 280€ kostet. Mitterweile hat Atmel jedoch ein Low-cost-Gerät auf dem Markt gebracht, das AVR Dragon, für etwa 80€. Es kann allerdings nur AVRs mit bis zu 32kB Programmspeicher debuggen. Neben der JTAG-Schnittstelle bietet es eine ISP-Schnittstelle sowie HV-Parallel-Programmierung. Angeschlossen wird es per USB.
Anschluss
Atmel schlägt einen 10poligen Wannenstecker vor, wie er auch in den RN-Definitionen aufgenommen wurde. Die Leitungen werden gemäß dieser Tabelle mit den Pins TDI, TDO, TMS, TCK, RESET sowie der Versorgungsspannung am AVR verbunden:
Pin | Signal | AVR Pin |
Pin 01 | TCK | TCK |
Pin 02 | GND | GND |
Pin 03 | TDO | TDO |
Pin 04 | VREF | VCC |
Pin 05 | TMS | TMS |
Pin 06 | NSRST | RESET |
Pin 07 | VCC | nicht verbunden |
Pin 08 | NTRST | nicht verbunden |
Pin 09 | TDI | TDI |
Pin 10 | GND | GND |
JTAG aktivieren/ deaktivieren
Um JTAG zu aktivieren, müssen die beiden Fusebits JTAGEN und OCDEN programmiert werden. Dies ist im Auslieferungszustand der AVRs bereits der Fall. Falls sie zuvor umprogrammiert wurde, müssen sie erst wieder über die ISP-Schnittstelle programmiert werden, bevor ein JTAG-Zugriff möglich ist.
Zu beachten ist jedoch, dass die Pins des JTAG-Interfaces am AVR jetzt nicht mehr als normale IOs genutzt werden können! Dies ist eine beliebte Anfängerfalle. Das Problem: "einige Pins an Port C funktionieren nicht!" taucht regelmäßig im Forum auf. Die Lösung ist es, das JTAG zu deaktivieren. Falls man es sowieso nicht nutzen will, schaltet man es über die Fusebits ab. Alternativ kann man es aber auch per Software deaktivieren. Dazu muss man das Bit JTD im Register MCUSR innerhalb von vier Takten zweimal setzen. Danach kann man die Pins im Programm wieder frei benutzen. Der JTAG-Programmer kann trotzdem noch eine Verbindung zum Programmieren (nicht zu Debuggen!) aufbauen, indem er den AVR über die NSRST-Leitung resettet.
Software zum Programmieren über JTAG
Dragon und JTAG ICE MKII werden über das AVRstudio angesprochen, das von Atmel kostenlos angeboten wird. Nachdem man über den "Connect"-Dialog das entsprechende Gerät ausgewählt hat, stellt man den "Programming Mode" (Registerkarte "Main") auf JTAG um.
Quellen
- http://www.jtag.com/main.php
- Diverse Atmel Datenblätter
- ELAB JTAG Interface
Siehe auch
Bezugsquellen
ATMEL AVR
- Der offizielle ATMEL JTAG kann von verschiedenen Versandhäusern bestellt werden. (ca 280 €)
- Es gibt einen Clone von Olimex für ca 75€. Diesen Clone gibt es für ein paar € mehr auch mit eingebauten USB/Seriell-Wandler.
- Beide Clones werden für ca den halben Preis auch vom Elektronikladen vertrieben.
- Man kann sich den JTAG auch selber bauen. Eine Anleitungen gibt es bei der TU Berlin, ScienceProg oder bei µController-Projects unter "Projekte". Kosten: < 10€.