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?
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.
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.
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.
David
Jon
Schnüffler