Kann nicht mehrere Chips mit JTAG programmieren

GELÖST - SIEHE UNTER "BEARBEITEN 3" UNTERTITEL.

Ich habe diese zwei Chips:Platine mit LPC4337 (links) und Platine mit ATSAM3X8E (rechts), JTAG verbunden, unter Verwendung des FT2232H-Chips, der auf der Platine links als Schnittstelle gelötet ist.

Platine mit LPC4337 (links) und Platine mit ATSAM3X8E (rechts), JTAG verbunden, unter Verwendung des FT2232H-Chips, der auf der Platine links als Schnittstelle gelötet ist.

Der erste (LPC4337) kann programmiert werden. Der zweite (ATSAM3X8E) kann auch programmiert werden, solange die Leiterbahnen zwischen dem Programmierchip (FT2232H) und der LPC4337 MCU unterbrochen werden. Wenn keine Spuren geschnitten werden (sowohl LPC4337 als auch ATSAM3X8E mit dem JTAG verbunden), kann ich nicht auf den ATSAM3X8E-Chip zugreifen. Ich verwende OpenOCD. Dies ist die OpenOCD-Ausgabe, wenn beide Chips mit dem JTAG verbunden sind:

...

Info: JTAG Tap: lpc4337.m4 Tap/Device gefunden: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part:0xba00, ver: 0x4)

Info: JTAG Tap: lpc4337.m0 Tap/Gerät gefunden: 0x0ba01477 (mfg: 0x23b (ARM Ltd.), part:0xba01, ver: 0x0)

Info: JTAG Tap: sam3.m3 Tap/Device gefunden: 0xfffffff (mfg: 0x7ff (), part:0xffff, ver: 0xf)

Fehler: sam3.m3: IR-Aufnahmefehler; sah 0x0f nicht 0x01

Warnen: Umgehen von JTAG-Setup-Ereignissen aufgrund von Fehlern

Fehler: Ungültiges ACK (4) in DAP-Antwort

Fehler: Ungültiges ACK (4) in DAP-Antwort

Fehler: Ungültige ACK (4) in ... (viele mehr)

Fehler: Ungültiges ACK (0) in DAP-Antwort

Fehler: Der Debug-Port konnte nicht initialisiert werden

Einige Anmerkungen: Wenn ich die OpenOCD-Konfiguration ändere, um den „IR-Erfassungsfehler“ zu ignorieren, schlägt die Verbindung trotzdem fehl, das erste Problem ist, dass die sam3.m3-TAP-ID als 0xfffffff usw. erkannt wird.

Gleiche Ausgabe mit LPC4337 JTAG-Spuren geschnitten (nur ATSAM3X8E angeschlossen):

...

Info: JTAG Tap: sam3.m3 Tap/Gerät gefunden: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part:0xba00, ver: 0x4)

Info: sam3.m3: Hardware hat 6 Breakpoints, 4 Watchpoints

Einige Anmerkungen: Dies ist eine erfolgreiche Verbindung.

Eine interessante Sache ist, dass sowohl LPC4337 als auch ATSAM3X8E dieselbe JTAG-TAP-ID teilen. Ist dieser Wert nicht vom Hersteller gewählt? Ist es ein seltsamer Zufall, verschiedene Chips mit derselben JTAG-ID zu haben? Kann dies das Problem sein, das mich daran hindert, beide mit dem JTAG zu verbinden? Ich habe schon früher gesehen, dass OpenOCD wiederholte JTAG-IDs verarbeitet, aber immer mit verschiedenen Instanzen desselben Chips, nicht wie in diesem Fall aus verschiedenen Chipfamilien. Gibt es eine Möglichkeit, die JTAG-ID des Chips zu ändern? Welche anderen Probleme könnten dieses Verhalten verursachen? Ich bin interessiert, irgendwelche freundlichen Vorschläge zu hören, auch wenn sie nicht die Lösung sind, die sie helfen könnten.

Einige andere Anmerkungen: Ich habe es mit zwei verschiedenen ATSAM3X8E-Boards versucht, damit ich weiß, dass die Chips nicht fehlerhaft sind. Beide Boards waren Arduino Due und funktionierten, als LPC4337 JTAG-Spuren geschnitten wurden. Ich verwende OpenOCD Version 0.10.0 ("Freddie Chopin" kompilierte Version) unter Windows. Ich habe kein Oszilloskop. Ich möchte mit beiden MCUs arbeiten, ohne weitere Modifikationen hinzuzufügen oder Spuren zu schneiden. Ich würde auch gerne den Fehler verstehen, der mich daran hindert, diese Chips zu programmieren, falls ich in Zukunft etwas mit ihnen entwerfe.

Abschließend möchte ich der Community für ihre Zeit danken. Ich hoffe, dass dieser Beitrag in Zukunft einigen anderen Menschen hilft!

BEARBEITEN:

Dies sind die JTAG-Schnittstellenschemata der beiden miteinander verbundenen Platinen. Das Flachkabel verbindet Pin1 des "P3"-Anschlusses auf dem Schaltplan der LPC4337-Platine mit Pin1 des "JTAG"-Anschlusses des ATSAM3X8E-Platinenschaltplans usw. (Alle 10 Pins entsprechend verbunden, mit einem Multimeter auf Durchgang getestet). Geben Sie hier die Bildbeschreibung einDies ist der Schaltplan der LPC4337-Platine .

Dies ist der Schaltplan der ATSAM3X8E-Platine .

BEARBEITEN 2:

Dank der Antworten fand ich heraus, dass ich eine Stern-JTAG-Topologie verwendete, aber eine Daisy-Chain-JTAG-Topologie wäre der Standardansatz. Ich werde meine Verkabelung ändern und meine Ergebnisse posten. Danke für die Hilfe. Dies wird meine Verdrahtungstopologie sein (aber mit zwei Geräten): EDIT 3:Neue Topologie

JTAG wurde von einer Sterntopologie auf eine Daisy-Chain-Topologie geändert. LPC4337 TDO wird an den Anschluss und schließlich an ATSAM3X8E TDI geleitet. ATSAM3X8E TDO wird über den Stecker mit der FT2232H-Schnittstelle verbunden. Wenn kein Gerät angeschlossen ist und nur der LPC4337 programmiert wird, kann ein kleiner Stecker (siehe Abbildung unten) (anstelle des Kabels) eingesteckt werden und den LPC4337 TDO direkt mit der FT2232H-Schnittstelle überbrücken. Neue EinrichtungDie OpenOCD-Verbindung ist erfolgreich und gibt Folgendes aus:

...

Info: JTAG Tap: lpc4337.m4 Tap/Device gefunden: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part:0xba00, ver: 0x4)

Info: JTAG Tap: lpc4337.m0 Tap/Gerät gefunden: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part:0xba00, ver: 0x4)

Info: JTAG Tap: sam3.m3 Tap/Gerät gefunden: 0x4ba01477 (mfg: 0x23b (ARM Ltd.), part:0xba00, ver: 0x4)

Info: lpc4337.m4: Hardware hat 6 Breakpoints, 4 Watchpoints

Info: lpc4337.m0: Hardware hat 6 Breakpoints, 4 Watchpoints

Info: sam3.m3: Hardware hat 6 Breakpoints, 4 Watchpoints

(Die 0x4ba01477 TAP-ID wurde zum ATSAM3X8E, ich frage mich, ob OpenOCD in einer anderen Reihenfolge angeordnet werden könnte [atsam, lpc m0, lpc m4] und in einer Sterntopologie arbeiten könnte oder nicht)

Vielen Dank für Ihre Hilfe!

Ich habe den Eindruck, dass die JTAG-Ports beider Chips elektrisch parallel sind, also lautet meine Frage an Sie: was lässt dich glauben, dass du das überhaupt schaffen kannst?
Ich verstehe, dass JTAG die Adressierung mehrerer Chips auf derselben Platine ermöglicht. Soll nur einen Anschluss zum Programmieren von MCUs, FPGAs, EEPROMs usw. bereitstellen. Ist mein Verständnis falsch? Ich habe OpenOCD-Ausgaben im Internet gesehen, die zeigen, dass mehr als ein FPGA auf derselben Platine erkannt wird. Ich dachte, MCUs sollten auf die gleiche Weise funktionieren. Fühlen Sie sich frei, mich zu korrigieren oder Fragen zu meinen Schaltungen/Konfigurationen zu stellen! Danke für deine Antwort
Bitte poste ein Schaltbild deines Anschlussplans.
Ich bin kein Experte, aber müssen die Ports nicht in einer Daisy-Chain mit TDO und TDI verdrahtet werden?
Andy aka, ich denke, sie sind es irgendwie. Würden Sie nicht alle JTAG-Anschlussstifte miteinander verbinden? Würdest du sie anders verkabeln? Wenn LPC4337 JTAG-Spuren geschnitten werden, beginnt die ATSAM3X8E JTAG-Schnittstelle zu arbeiten, also denke ich, dass die Verkabelung korrekt ist. Aber vielleicht ist es das nicht. Bitte zögern Sie nicht, eine andere Verdrahtungsstrategie vorzuschlagen. Ich habe LPC4337 JTAG-Spuren mehr als einmal geschnitten und neu verdrahtet, und jedes Mal, wenn die Spuren geschnitten werden, funktioniert die ATSAM3X8E-Schnittstelle und funktioniert nicht mehr, wenn die Spuren wieder verbunden werden. Bitte, wenn Sie etwas über meine TAP-ID-Fragen wissen, lassen Sie es mich wissen. Vielen Dank im Voraus!
Andy aka, ich verstehe jetzt, was du meinst, danke für deine Hilfe. Ich versuche es mit einer Daisy-Chain-Topologie anstelle einer Sterntopologie und poste zurück

Antworten (1)

Die Kommentare deuten darauf hin, dass Sie versuchen, in einer „Sterntopologie“ zu arbeiten, aber soweit ich weiß, ist dies keine genau definierte Implementierung.

Bitte bestätigen Sie, dass Sie eine Daisy-Chain- Topologie verwenden , bei der mehrere TAPs ein einziges langes Schieberegister bilden. Debug-Tools sollten damit fertig werden, da es manchmal in einem einzelnen Chip implementiert vorkommt.

Die von Ihnen angegebenen TAP-IDs gelten für die Debug-Schnittstelle, sie identifizieren (und müssen) die einzelne Hardware nicht. Sie definieren lediglich, dass diese Komponenten Arm CoreSight JTAG-DP verwenden, das eine Schnittstelle zu speicherabgebildeten Debug-Komponenten bietet. Wenn Sie auf die Debug-Komponenten in dieser Speicherkarte zugreifen (die anhand der vom DP bereitgestellten Register erkennbar sind), sollten Sie einen ID-Wert finden, der den Chip letztendlich identifiziert.

Das JTAG-DP-IDCODE-Register ist hier in ARM DDI 0314H beschrieben.

Ja, der FT2232H-Chip wird über dieselben Pins mit der JTAG-Schnittstelle der beiden Chips verbunden. Was meinst du mit "... aber soweit ich weiß, ist das keine gut definierte Implementierung ...." ?? Meinen Sie, dass die JTAG-Schnittstelle der Chips möglicherweise miteinander in Konflikt steht, weil die Hersteller ihre Produkte nicht für die Unterstützung von Daisy Chaining entwickeln? Ich verstehe nicht, was Sie mit "wo die mehreren TAPs ein einziges langes Schieberegister bilden" meinen. Ich denke, Sie meinen, dass durch Verschieben eines FT2232-Bits beide Boards das Signal "empfangen"?
Daisy-Chain wird gut unterstützt. Die Sterntopologie erfordert, dass die TDO-Pins drei Zustände haben, wenn ein TAP inaktiv ist (und ich kann mir nicht auf Anhieb vorstellen, wie die Auswahl funktionieren würde). Sie versuchen, STAR zu verwenden. Es wird nicht funktionieren.
Vielen Dank für die Klärung der TAP-ID. Ich denke, es sollte keine Probleme mit einer sich wiederholenden TAP-ID geben, solange OpenOCD so konfiguriert ist, dass alle Chips in der Reihenfolge, in der sie angezeigt werden, "angezapft" werden. (Ich habe auch versucht, den ATSAM3X8E vor dem LPC4337 "aufzukleben", aber es hat nicht funktioniert, und in meiner speziellen Implementierung scheint der LPC4337 M4 ARM-Kern immer der erste erkannte Kern zu sein, gefolgt vom LPC4337 M0 und zuletzt dem ATSAM3X8E M3)
"Die Sterntopologie erfordert, dass die TDO-Pins drei Zustände haben, wenn ein TAP inaktiv ist". Sollte ich also das TDO-Signal einer bestimmten Chipschnittstelle auf hohe Impedanz schalten, während ich versuche, eine Verbindung mit der anderen herzustellen? Der Ausgang des FT2232H-Chips ist mit einem Puffer verbunden, der das Tri-Stateing aller Signale ermöglicht (aber für beide Chips). Müssen die Signale für jeden Chip einzeln tri-statefähig sein?
Nein, verwenden Sie einfach Daisy-Chain.
Nach JTAG Daisy Chain Interface gesucht und festgestellt, dass Sie sich auf die Verbindung von TDO eines bestimmten Chips mit dem TDI des nächsten beziehen. Ich werde versuchen, diese Topologie zu verwenden.