Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


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 aber leider ist JTAG nicht gleich JTAG - wie man nun fälschlicherweise annehmen könnte. Das ist der Grund dafür warum jeder Halbleiterhersteller seine eignen JTAG-Adapter herstellt. JTAG ist ursprünglich nur zum automatischen Test von programmierbaren Logik-Bausteinen wie CPLD, FPGA, EPLD usw. entwickelt worden. Damit kann der Gerätehersteller die ordnungsgemäße Funktion seiner Schaltung bei eingebautem Chip in der Serienfertigung testen. Mit dem immer grösser werdenen Verbreitungsgrad von Mikrocontroller bekamen diese zunächst nur eine Testfunktion - analog zur CPLD verpasst - später wurde dazu noch die Programmierfunktion ergänzt. Damit war es nun möglich, sowohl PLD, FPGA als auch Mikrocontroller über die gleiche Schnittstelle zu programmieren und im Anschluss zu testen. Die Firmware-Entwickler hatten zu dieser Zeit nicht die Möglichkeit, die geschriebene Firmware im Zielsystem in Echtzeit zu testen. Einzig Software-Simulatoren waren verfügbar. Das Zeitverhalten der Peripherie konnte leider nur den Idealzustand simulieren. In der Entwicklung komplexer System hat man es jedoch oft mit unvorhergesehen Situationen zutun die zu unerwartetem Verhalten der Firmware führt, die in der Simulation nicht auftreten. Um diese Situation zu Meistern wurde in den Mikrocontrollern die ON-Chip-Debug Schnittstelle implementiert und ebenfalls über das JTAG-Interface durchgeführt.

Damit ermöglicht das JTAG-Interface 3 wesentliche Funktionen die für die Entwicklung und Fertigung von Hardware mit einem Mikrocontroller entwickelt wurden.

* Programmieren des Flash und EEproms abhängig vom der an der CPU anliegenden Taktfrequenz.

* 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 Steuerung der Pins des Mikrocontrollers wird durch das JTAG-Interface und seinem steuernden Testprogramm.

* 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


Beispiel einer JTAG Schnittstelle

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.

Im Prinzip könnte die selbe JTAG Interface-Hardware für alle Chips ausreichen. Praktisch funtioniert das allerdings nicht, denn für die meisten µCs ist nicht offengelegt, wie die einzelnen Funktione angesprochen werden. Es wird also meistens µC-spezifische Software und als Folge davon auch µC-spezifische Hardware benötigt.

Beispiel eines Avr-JTAG Interface von Atmel


AVR JTAG

Dieser Abschnitt befasst sich mit dem JTAG-Interface der AVR-Mikrocontroller von Atmel.

Viele neuere Atmel AVRs mit mehr als 30 Pins besitzen eine JTAG Schnittstelle. Die meisten (?) ARM Controller haben ein JTAG interface. Die kleineren AVR's benutzen neuerdings ein anderes Interface zur Programmierung und Debuggen. Es nennt sich Debug-Wire und ist eine Eindraht-Schnittstelle die mit Hilfe des /RESET-Aschlusses der CPU benutzt werden kann. Das DW-Protokoll ist bi-direktional seriell.

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 380€ kostet. Es gibt seit längerem AVR-JTAGICE zum Selbstbau. Der Preis beschränkt sich auf einen ATMEGA16, Max232 und einen Quarz. Das Internet bietet viele Baubeschreibung zu diesem JTAG-Adapter. Leider funktioniert dieses JTAG-Interface nur noch in der AVR-Studio 4.x. Die aktuelle Version 5 unterstützt diesen Adapter nicht mehr. Man kann jedoch mit AVRDUDE und anderen Umgebungen wie Eclipse/AVR-Chaintools weiterhin damit arbeiten. Für den Anfang wird dieser AVRJTAG-MK1 ausreichen. Mitterweile hat Atmel jedoch ein Low-cost-Gerät auf dem Markt gebracht, das AVR Dragon, für etwa 80€. Der Dragon wird solo - also ohne Kabel oder Anschlussleitungen geliefert. Bis vor kurzem konnte mit diesem Board maximal 32KB großer Flash-Speicher debugged werden. Diese Grenze scheint mit dem AVR-Studio 5 und dem verbundenen Firmware-Update aufgehoben zu sein. Weiter lässt sich mit ihm XMEGA's programmieren und debuggen da er ebenfalls 1.8V - 5.0V Umgebungen unterstützt. Neben der JTAG-Schnittstelle bietet es eine ISP-Schnittstelle, DebugWire, PDI sowie High-Voltage-Parallel-Programmierung. Die HV-Parallel-Programmierung wird immer dann wichtig wenn man mal die SPI-Fuse des Mikrocontrollers versehendlich gelöscht hat. Dann lässt sich der AVR nur noch über die parallele Programmierung wiederbeleben. Angeschlossen wird es per USB. Zum JTAG ICE MKII gibt es mittlerweilen auch billigere Nachbauten, und Bauanleitungen, die mit der original Software von Atmel laufen. Atmel hat seit Frühjahr 2011 ein weiteres Mitglied der Debugger-Familie spendiert. Der JTAGICE-MK3 - ist so klein wie 2 Streichholzschachteln und wird über die USB-Schnitstelle mit dem Computer verbunden. Das JTAG-Interface ist als 10-Pin Half-Pitch-Wannenstecker (1.27mm Raster) ausgeführt. Das Kabel ist ebenfalls sehr dünn und starr. Es ist von seiner Ausführung identisch mit dem eines PATA2-Festplattenkabel eines PC's. Leider sind die Pfostensteckverbinder 2x5 - 1.27mm nicht einfach zu beschaffen und dazu noch unverhältnismäßig teuer. Conrad-Electronic führt sie und will € 2.50 pro Stück haben (Januar 2012). Der AVRJTAG-MK3 wird nicht vom AVR-Studio4.xx unterstützt. Erst AVR-Studio5 unterstützt diesen Debugger. Der Preis für diesen Debugger (01/2012)liegt bei ca € 200.- und das Gerät enthält nur einen AT32 der sowohl die Schnittstelle zum USB als auch zu JTAG bedient. Der JTAG-Interface Takt kann bis zu 7.5Mhz eingestellt werden. Das ist für Mikrocontroller ab 30Mhz CPU-Takt nutzbar (JTAG-Clock = 1/4 * CPU-Clock). Zum Vergleich - der AVRJTAGICE-MK2 kostet ca. €120.- mehr, enthält 2 x ATMEGA128, kann per RS232 und USB angeschlossen werden - der JTAG-Takt bleibt jedoch bei 3.5Mhz

Das xc3sprog Projekt auf Sourceforge enthält eine weiterentwickelte Version "javr" (ursprünglich non Anton Erasmus) zum Programmieren einiger AVR Chip (Can128, Mega128) mit verschiedenen JTAG Adaptern unter Linux und Windows. Bauteile mit abweichenden Programmierparametern können im Sourcecode ergänzt werden.

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

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 Elektronikladenoder Thinkembedded Webshop Schweiz 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€.

Weblinks