Was ist ein JTAG?

Ich bin ziemlich neu in eingebetteten Systemen, und ich sehe, dass dieser Begriff ständig verwendet wird, aber ich kann nicht ganz verstehen, was es ist. Eine schnelle Online-Suche ergibt diese Wikipedia-Seite: https://en.wikipedia.org/wiki/Joint_Test_Action_Group , die es als eine Art Protokoll zum Debuggen beschreibt. Aber in anderen Zusammenhängen war es so, als ob es den Speicher eines Chips wie ein Programmierer programmieren könnte. Was ist es?

In dieser Frage sind einige nützliche Edelsteine ​​​​versteckt .
Ich habe Dwelch +1 gegeben. Außerdem wird JTAG manchmal fälschlicherweise als Verb verwendet, das im Allgemeinen „ein Ding debuggen/testen“ bedeutet. Eine Person, die etwas „jtagt“, verwendet möglicherweise tatsächlich ein anderes Protokoll, das der Hersteller des Geräts mit den physischen JTAG-Pins (dh SWD) überlappt. Sie können SWD oder JTAG, aber nicht beides. Niemand SWD's ("swoods"?) Ihre Geräte, obwohl.
Ja, man kann mit JTAG programmieren

Antworten (5)

Es ist wie USB, SPI, I2C und andere "Busse", und es hat eine Reihe beliebter Anwendungen, nicht beschränkt auf:

  • Eine davon ist insbesondere das Testen von Silizium, bevor zu viel in jedes Teil investiert wird. Beispielsweise können Sie den größten Teil des Teils überprüfen, während sich ein Chip noch auf dem Wafer befindet. Zugegeben, das Zerteilen des Wafers kann Schaden anrichten, also möchten Sie es erneut testen, aber vielleicht tun Sie das vor dem Verpacken, vielleicht danach.

  • Sie können es verwenden, um Boundary Scan auf Boards durchzuführen. Sie können eine Platine in eine Produktionslinie bringen (vorausgesetzt, die Platine muss richtig entworfen sein und ein gewisser Prozentsatz der Chips muss dies unterstützen), aber Sie können Konnektivitätstests mit niedriger Geschwindigkeit durchführen, den Pin an einem Ende einer Leiterbahn stimulieren und das andere scannen Teile, um zu sehen, ob sie gemäß dem Design der Platine verbunden sind oder nicht.

  • Da die Chips bereits über diese dedizierten Pins verfügen, warum nicht für Prozessoren dieselbe Schnittstelle verwenden, um mit einem On-Chip-Debugger (OCD) zu kommunizieren, etwas in den Prozessor zu entwerfen und die Kommunikation über jtag zu ermöglichen.

Es ist eine generische Methode, mit der Sie Dinge in der Kette isolieren können, an die Sie eine Reihe von Bits senden oder von der Sie eine Reihe von Bits erhalten möchten, so dass jedes Ding, mit dem Sie sprechen möchten, für verschiedene Nummern entworfen werden kann von Bits von einer kleinen Anzahl bis zu einer großen Anzahl. Für einen Debugger müssten Sie natürlich auf ein Ding in Registergröße in Ihrem Chip schreiben oder daraus lesen - vielleicht ein 16-Bit-Register oder 32-Bit. Aber für Silizium- oder Platinentests kann Ihre Scan-Kette aus Dutzenden von Bits bestehen. Jedes einzelne Ding, das Sie adressieren, kann in der Größe variieren, wenn Sie möchten, von jedem anderen Ding, was dies zu einem sehr vielseitigen Bus mit einer relativ kleinen Anzahl von Pins macht, der für diese Art von Anwendungsfällen attraktiv ist.

Vielleicht haben sie aufgrund der Popularität des Software-Debuggings jetzt einige Zwei-Pin-Lösungen, um die Pin-Anzahl für Mikrocontroller zu sparen, und vielleicht werden andere das übernehmen, vielleicht auch nicht.

Gibt es technische Aspekte von JTAG, die es für diese Verwendungen geeignet machen, oder hat es nur historische Gründe?
Lies dir doch mal den Wikipedia-Artikel durch. Meiner Meinung nach war es schon da und mit den Platinen und Chips verdrahtet, und weil es flexibel genug war, um andere Verwendungen zu unterstützen, und zumindest einige bereits Werkzeuge hatten, muss jemand gesagt haben, warum es nicht für diese anderen Dinge verwendet werden sollte. Ich denke, seine Flexibilität im Vergleich zur Anzahl der Pins macht es sehr attraktiv. Es gibt und gibt andere Lösungen für Debugger oder in der Schaltungsprogrammierung, aber dank der FTDI-MPSSE-Anweisungen und des Erfolgs von FTDI im Allgemeinen mit allem, was USB betrifft, sind jetzt kostengünstige jtag-Tools weit verbreitet.

JTAG war ursprünglich eine Schnittstelle, die zum Testen von Leiterplatten nach der Bestückung verwendet wurde. Die IO-Leitungen auf den Chips könnten über die JTAG-Ports gesteuert und gelesen werden, sodass eine Board-Testsequenz durchgeführt werden kann. Später wurde es auch als Programmier- und Debug-Schnittstelle verwendet. Welche Funktionalität über JTAG verfügbar ist, hängt von dem jeweiligen IC ab, mit dem Sie es zu tun haben.

Ein Vorteil von JTAG gegenüber den meisten anderen Programmierschnittstellen besteht darin, dass Geräte in Reihe geschaltet werden können. Ein JTAG-Port kann also zum Programmieren/Debuggen/Testen mehrerer Geräte dienen (obwohl ich empfehlen würde, Ihre Systeme so zu entwerfen, dass verschiedene Chipmarken auf verschiedene Ketten aufgeteilt werden können, während das Low-Level-JTAG-Protokoll ziemlich standardisiert ist, leider die Tools, die Sie benötigen zum Programmieren/Debuggen der Chips nicht).

JTAG ist ein etwas seltsamer Begriff. Zunächst kann der Begriff einen bestimmten Anschluss und ein bestimmtes Protokoll bezeichnen, das aus einem Taktsignal (TCK), einer Modusauswahl (TMS) und einem Dateneingang/-ausgang (TDI/TDO) besteht. Dies umfasst ein Netzwerk von Geräten, in dem das TDO jedes Geräts mit dem TDI des nächsten Geräts in einer sogenannten Scan-Kette verbunden ist. TMS wird verwendet, um alle Geräte gleichzeitig in verschiedene Modi zu versetzen .

Die Geräte in der Scan-Kette sind typischerweise als ein großes Schieberegister verbunden, das aus Registern in jedem einzelnen Gerät besteht. Wenn sich Geräte im SHIFT_IR- oder SHIFT_DR-Zustand befinden, verbinden sie eines von zwei temporären Registern mit der Scan-Kette: ein Befehlsregister und ein Datenregister.

Sobald ein Wert hineingeschoben ist, kann der Modus UPDATE_IR oder UPDATE_DR aktiviert werden, indem TMS entsprechend eingestellt wird, während TCK umgeschaltet wird. An dieser Stelle wird der in das Register geschobene Wert "wirksam". Beispielsweise wird das Verschieben verschiedener Sequenzen in das IR eines FPGA und der Übergang in UPDATE_IR dazu führen, dass das FPGA in verschiedene Modi wie Konfiguration, Rücklesen, normale Laufzeit oder Zugriff auf bestimmte Benutzerregister und JTAG-spezifische Primitive eintritt, die im Design instanziiert sind.

Ebenso können Erfassungszustände verwendet werden, um einen Wert aus dem Gerät zu "lesen" und ihn in das IR oder DR zu legen, um durch TDO verschoben und schließlich vom JTAG-Programmierer gelesen zu werden.

JTAG definiert ein serielles Protokoll und einige Befehle, um den Zugriff auf interne Register in komplexen ICs zu ermöglichen. Dies ermöglicht es einem Tester, Beobachtbarkeit und Steuerbarkeit auf standardmäßige Weise unter Verwendung weniger Pins zu erhalten.

Die ursprüngliche Verwendung war für "Boundary Scan", bei dem alle I/O-Pins gelesen und von einem großen Schieberegister angesteuert werden konnten, das den Chip umkreist. Es wurde jedoch schnell erweitert, um weitere Schieberegister hinzuzufügen, um auf das Innere des Chips zuzugreifen, einschließlich Speicher.

Sie schlagen selten Bit-Bang JTAG, der Zugriff erfolgt normalerweise über Bibliotheken, auch bekannt als Treiber, die vom IC-Hersteller geliefert und vom Testsystem und Testzugriffsadapter verwendet werden.

Also muss der Chip tatsächlich ein JTAG sowohl per Hardware als auch per Software unterstützen?
@UnTraDe Nein, der Chip unterstützt JTAG in Hardware und möglicherweise in Software (z. B. kann ein FPGA einige Schnittstellen zwischen JTAG und dem Benutzerdesign offenlegen), muss jedoch keine Softwareunterstützung auf dem Chip haben. Die Tools, die man verwenden würde, um mit Geräten über JTAG zu interagieren, hätten sowohl Software- als auch Hardwareunterstützung (Software auf einem Computer und Hardware in Bezug auf einen an diesen Computer angeschlossenen JTAG-Programmierer).

Es gibt, was JTAG „bedeutet“ und es gibt, was JTAG „ist“. Wie andere bereits betont haben, „ist“ JTAG eine Industriestandard-Busschnittstelle für Fertigungstests, wie in der Joint Test Action Group .

Was JTAG für einen Embedded-Software-Entwickler bedeutet, ist die Debug-Schnittstelle auf dem SoC/Mikroprozessor für externes Debugging von Embedded-Software, die auf dem Chip läuft. Nahezu alle CPUs/SoCs auf dem Markt verwenden die JTAG-Schnittstelle nicht nur für Fertigungstests, sondern auch zur Software-Debug-Unterstützung. Sie finden eine JTAG-Schnittstelle auf allem, von x86-CPUs der Serverklasse bis hin zu WLAN-Routern für unter 50 US-Dollar. Mit der richtigen Schnittstellenhardware und der richtigen Software gewähren Ihnen diese Schnittstellen die Möglichkeit, Speicher zu lesen/schreiben, Haltepunkte zu setzen und Code in einem einzigen Schritt auszuführen.

Der Schlüssel liegt natürlich in der richtigen Hard- und Software. Obwohl die grundlegende JTAG-Schnittstelle standardisiert ist, sind die spezifischen Software-Debug-Funktionen, die in einem Gerät verfügbar sind, möglicherweise nicht. JTAG ist wie TCP/IP. Es befindet sich in der Mitte des Anwendungsstapels. Sie benötigen die richtige physikalische Schicht, um mit dem Gerät zu kommunizieren (dh was meinen Sie damit, dass dieses Ding 10-Base-2 verwendet?!?!?), Und Sie benötigen die richtige Anwendungssoftware darüber (was meinen Sie? Ich brauche einen Gopher Klient?!?!?!). Allerdings hat die Stärke des ARM-Ökosystems dort zu einem gewissen Grad an Standardisierung geführt (siehe OpenOCD).

Sie haben auch nach der Verwendung von JTAG zum Programmieren von Flash gefragt. Ja, einige Software verwendet es auch für diesen Zweck. Das SoC kann JTAG-Einrichtungen zum Lesen/Schreiben aus Adressräumen des CPU-Speichers bereitstellen, es kann direkten Zugriff auf Flash-Controller bereitstellen, und zumindest bietet JTAG rohen Low-Level-Zugriff auf E/A-Pins am Rand des Chips (dies war der ursprüngliche Zweck von JTAG, Kontinuitätstests von Chip-zu-Chip-Verbindungen während des Herstellungstests zu ermöglichen, dh 'JTAG Boundary Scan'). Jede dieser Einrichtungen könnte von cleveren Programmierern verwendet werden, um die Signale zu treiben, die zum Neuprogrammieren eines Flash-Chips erforderlich sind, falls ein Gerät versehentlich "gemauert" wird.