Ich verstehe, wie JTAG als Boundary Scanner verwendet wurde (sehr saubere Erklärung in Ссылка ). Allerdings kann ich nicht sehen, wie JTAG in diesen Tagen als Hardware-Level-Debugger (etwas ähnlich wie In-Circuit-Emulatoren) verwendet wird.
1. Kann jemand erklären, wie JTAG als Hardware-Level-Debugger verwendet wird?
Ich gehe davon aus, dass es eine zusätzliche Hardware auf dem Chip geben muss, die beim Debuggen hilft, während JTAG lediglich diese Hardware antreibt, um die Debug-Informationen zu erhalten. Wenn mein Verständnis stimmt -
2a. Was ist diese Hardware?
2b. Gibt es einen Standard dafür?
Ich bezweifle den Standardteil, da alle Implementierungen, die ich von JTAG-basierten Hardware-Level-Debuggern gesehen habe, voneinander abweichen.
Schließlich ist es wirklich verwirrend, JTAG als Hardware-Level-Debugger zu bezeichnen, während der JTAG-Standard nichts dergleichen definiert. Gibt es einen anderen Namen für die Verwendung von JTAG?
fyi: Ich bin mir nicht sicher, ob ich dich gut verstanden habe, und vielleicht kennst du alles, was ich unten geschrieben habe, vielleicht besser als ich. Schreibe mir eine Nachricht, und ich werde die Antwort entfernen.
1 / 2a: Die verwendete Hardware ist "nur" einige zusätzliche Register und Logikschaltungen, die zusätzliche (orthogonale!) Zustände in die Standard-JTAG-Zustandsmaschine bilden / einkoppeln.
Wenn Sie verstehen, wie das JTAG-Protokoll den Boundary-Scan durchführt und wie der Bitstream vom Gerät geschoben / gezogen wird, sollten Sie sich vorstellen können, wie es zum Beispiel zum Programmieren von Speicherbänken auf dem Chip verwendet wird. Stellen Sie sich eine typische Verkettung vor, nicht zwischen den Chips, sondern im Inneren eines Chips.
Nehmen wir an, das Gerät verfügt über einen programmierbaren persistenten Speicher. Mit einigen weiteren Flops und Gattern bildet das Gerät einen zusätzlichen Puffer vor oder nach der JTAG-Kette des tatsächlichen Speichers:
Eingabe - & gt; xflops - & gt; Speicher - & gt; yflops - & gt; Ausgabe
sagen wir mal x / mem / y = 16/1024/0. Jetzt hat die Kette 1040 Bits. Das vorhergehende xflops wirkt sich nicht direkt auf den Speicher aus und umgekehrt. Die xflops könnten jetzt mit den Steuerleitungen des eingebauten internen Programmierers verbunden sein, der den Speicher antreibt.
%Vor%Die Logikschaltung innerhalb des Chips kann nun auf eine "magische Zahl" von 16 Bits reagieren, die auch den Schreib- / Löschvorgang des persistenten Speichers auslöst. Alle anderen 16-Bit-Werte werden ignoriert, und das Gerät verhält sich wie 1024 R / O-Daten, gefolgt von 16-Bit-Echo oder Nullen.
Ok, wir haben also einen einfachen "Controller" auf dem Gerät, der Operationen auf einem "echten Gerät" ausführt. Wenn Sie die Idee erweitern, d. H. Der Controller hat Zustände , die steuern können, welche Subdevices an die Kette angehängt sind, im laufenden Betrieb :
%Vor%Es ist natürlich nur eine extra Staatsmaschine. In ähnlicher Weise könnten Sie fast alle ausgefallenen Operationen ausführen, einschließlich Debugging wie Freezing, Stepping, Lesen / Schreiben von Registern usw. Aber all dies erfordert Tonnen zusätzlicher Logik, die in den fraglichen Chip eingebaut werden. Tatsächlich hat es mehrere Geräte in einem Chip.
2b: Leider kann ich nicht mehr sagen, weil ich im Thema zu grün bin;) Ich weiß, dass viele Hersteller ihre eigenen internen Standards bilden, die "Controller" werden einfach zwischen Modellen und manchmal Familien von Chips geteilt, aber ich Ich habe noch keinen "globalen" Standard zwischen den Herstellern gehört.
JTAG ist einfach eine Methode zur Anbindung an die Chip-Interna, die neben der "normalen" Chip-Funktionalität arbeitet. Es ist im Grunde ein multi-mode (synchroner) serieller Port.
Eines dieser Dinge ist Boundary-Scan, indem direkt auf die Pins zugegriffen wird.
Wie Sie vermuten, besteht ein weiterer darin, auf zusätzliche Hardware innerhalb des Chips zuzugreifen. Diese Hardware kann eingerichtet werden, um (zum Beispiel) Hardware-Breakpoints, die Fähigkeit zum Lesen von Registern und beliebigen Speicherplätzen, das Programmieren von internem Flash usw. bereitzustellen. Dies sind die Dinge, die eine Debugger-Anwendung verwenden kann.
Der JTAG-Standard bietet Platz für gerätespezifische Erweiterungen, die immer für die Chipentwickler gedacht waren, um diese Art von Funktionen bereitzustellen. Es gibt einen Versuch, die Schnittstelle zu standardisieren, die JTAG und auch Verbindungen mit höherer Rate zu Debug-Hardware abdeckt, die als Nexus bezeichnet wird . Ich habe Freescale jedoch bisher nur bei der Implementierung gesehen, daher scheint es nicht so nützlich zu sein, wie man es erwarten könnte!
In Bezug auf die Terminologie ist es wahrscheinlich falsch, "einen JTAG" als Hardware-Debugger zu bezeichnen. Ich bin mir nicht ganz sicher, was "ein JTAG" ist (wie im Fragetitel verwendet) - vielleicht wäre "ein JTAG-Pod" oder "ein JTAG-Schnittstellenmodul" besser?
Aber Sätze wie "JTAG debug access" oder sogar "JTAG debugger" (und tatsächlich "JTAG programmer" für diejenigen Benutzer, die es nur zum Programmieren des Flash verwenden) sind im allgemeinen Sprachgebrauch (zumindest in Großbritannien!) und scheinen mir nicht verwirrend zu sein, indem sie die Methode der Schnittstelle und die Funktion kombinieren.
Der JTAG verfügt über eine einzigartige Schnittstelle, mit der Sie die Hardware in Echtzeit leicht debuggen können. Er kann die Taktzyklen des bereitgestellten Controllers über Software direkt steuern. Daher können Sie Hardware-Breakpoints in Ihre Codeausführung einfügen. Sie können die Ausführung von Code in der Hardware starten, anhalten und stoppen, wie Sie möchten.
Immer wenn das JTAG-Steuerelement auf 1
gesetzt ist, wird der Oszillator-Takt mit der CPU verbunden, sonst empfängt die CPU keine Uhr und kann keine Befehle ausführen. Auf diese Weise können Sie die Ausführung von Befehlen in Hardware steuern.