Besteht ein Risiko für die HW, eine eingebettete Software zu debuggen, wenn die JTAG-Integrität schlecht ist?

Ich musste eine eingebettete C-Software in einer lauten Umgebung debuggen. Als Ergebnis hatte der Integritätstest der JTAG-Verbindung eine Fehlerrate zwischen 30 % und 60 %.

Welche Risiken bestehen bei JTAG-Zugriffen unter solchen Bedingungen? Ich meine:

  • Könnte ich den Mikrocontroller brennen?
  • Ist es möglich, den nichtflüchtigen Speicher für immer zu beschädigen?
  • Gibt es einen HW-Schutzmechanismus, der den Chip schützt? (wodurch jegliche JTAG-Zugriffe verhindert werden [Programmaktualisierung, Debug-Session, etc.])
  • Ist es möglich, dass die vom Debugger angezeigten Daten falsch sind?

Das Ziel ist ein TI C2000. Aber ich würde eine allgemeine Antwort bevorzugen, wenn möglich.

Wenn Ihre Debug-Tools zweifelhaft sind, dann sind Sie am Arsch. Meiner Erfahrung nach besteht das Hauptrisiko in Ihrer Situation darin, dass Sie nie herausfinden können, dass wtf vor sich geht, und dass Sie in 50 Jahren immer noch debuggen werden
@Will: Du meinst also, meine Frage Nr. 4 ist zumindest, was passieren wird?
In einigen Fällen, insbesondere bei Flash-basierten MCUs, ist es möglich, sich selbst bis zu dem Punkt aus dem Chip auszusperren, an dem eine erneute Verbindung schwieriger wird. Beispielsweise wird ein STM32-Teil gelegentlich eine schlechte Last erhalten, die die SWD-Schnittstelle (Mini-JTAG) deaktiviert und eine Manipulation der Reset-Leitung während der Verbindung erfordert, was bei dieser Serie normalerweise nicht erforderlich ist. Vieles davon hängt von den Implementierungsdetails eines bestimmten Chips ab. Es ist definitiv auch möglich, eine umgebende Schaltung zu haben, in der einige Zustände schädlich sind, z. B. H-Brücken, bei denen sowohl High- als auch Low-Side-Treiber eingeschaltet sein können.
Ob die Daten im Debugger falsch sind, hängt ein wenig davon ab, ob in Ihrem Setup Prüfsummen verwendet werden, und ich habe keine Ahnung, was Ihre Tools im Detail tun. Aber ich weiß, dass Sie eine klare Vorstellung davon brauchen, was vor sich geht, und etwas irgendwo im System, dem Sie vertrauen können, sonst ist es extrem schwierig, etwas zweifelsfrei festzustellen, und Sie werden sich nur im Kreis drehen. Beim Debuggen dreht sich alles darum, herauszufinden, was schief läuft - das Beheben ist normalerweise einfach
Reihenwiderstände (50-100 Ohm) können für jtag/spi/icsp-Leitungen zaubern, immer einen Versuch wert
Ich werde versuchen, ein paar weitere Dokumentationen und Spezifikationen zu diesem Thema zu lesen. Trotzdem vielen Dank für diese Antworten!

Antworten (4)

Es ist unwahrscheinlich, dass Sie das Teil beschädigen, aber Sie können die Verbindung möglicherweise nicht erfolgreich oder sinnvoll zum Debuggen des Geräts verwenden. Sie werden nie sicher sein, dass Sie einen Softwarefehler oder einen Fehler Ihres Debuggers sehen, da einige Fehlermodi in jedem Fall zum Ausfall der Debug-Schnittstelle führen können.

Probleme mit der Signalintegrität können oft durch Reduzieren der JTAG-Taktrate gelöst werden. Dies wirkt sich auf die Leistung beim Laden von Software und bei großen Speicherauszügen oder Datenüberwachungen aus, bleibt jedoch für einfaches Breakpoint- und Stepping-Debuggen auch bei relativ niedrigen Frequenzen verwendbar. Wenn Sie bereits einen Fehler von 60 % sehen, wird es Ihnen nicht schlechter gehen, beispielsweise von 10 MHz auf 4 MHz zu reduzieren, und es kann sein, dass er auf Null abfällt. Ich schlage vor, 1 MHz als Ausgangspunkt zu versuchen. Wenn die Leistung nicht zufriedenstellend ist, können Sie versuchen, sie schrittweise zu erhöhen, um die maximale fehlerfreie Rate zu bestimmen, und wenn Sie weiterhin Fehler erhalten, reduzieren Sie sie weiter.

Im Allgemeinen sollte das JTAG-Kabel so kurz wie möglich sein (<20 cm als Richtlinie) – vorzugsweise das Originalkabel des Sondenherstellers ohne Adapter oder Verlängerungen.

Als diese Frage auf SO gepostet wurde, haben Sie einen Kommentar hinzugefügt, dass die Sonde ein Blackhawk USB200 war – das Produkt verfügt über einen optionalen Isolationsadapter für raue Umgebungen, um Probleme mit Erdschleifen zu vermeiden. Das kann Ihr Problem vollständig lösen.

Sind Sie schließlich sicher, dass die Fehlerrate auf Rauschen zurückzuführen ist? Ein häufiger Fehler ist es beispielsweise, auf die für JTAG verwendeten Pins als GPIO in der Software zuzugreifen.

Vielen Dank für diesen praktischen Rat. Ich werde es nicht bald ausprobieren, aber ich werde es auf jeden Fall tun, wenn es möglich ist. Zu Ihrer letzten Frage: Der JTAG ist absolut perfekt aus dem Gesamtsystem oder im System mit einer externen Stromversorgung für die MCU-Platine. Ich glaube also nicht an die Software, die die GPIOs verwendet!
Wenn die Verwendung einer externen Stromversorgung für die MCU-Platine einen Unterschied macht, liegt Ihr Problem möglicherweise an der Masseverbindung. Wenn Ihr JTAG-Erdungskabel defekt ist, sehen Sie möglicherweise keine Probleme in einem Setup (Masse geht über USB zum Laptop oder so) und kaum in einem anderen (nicht verbundene Erdungen schweben überall).
@Plouff: Angesichts Ihres Kommentars zum Arbeiten mit einem externen Netzteil gilt Wills Vorschlag zur Erdung. Ich habe meine Antwort aktualisiert, um diese Möglichkeit anzusprechen. Sie sollten Ihre Frage mit den Informationen über die Sonde aktualisieren, die Sie auf SO gegeben haben. Bearbeiten Sie die Frage, anstatt sie als Kommentar hinzuzufügen.

Hinzufügen meiner 2 Cent. Kommentieren nicht möglich!

Wir hatten ein ähnliches Problem mit demselben Ziel (C2000). Sehr oft wurde das Gerät getrennt und wir mussten die IDE neu starten und den Code zum Debuggen erneut flashen. Wir haben TI kontaktiert und den folgenden Vorschlag erhalten.

1) Verwenden Sie einen digitalen Isolator wie diesen zwischen dem Debugger und dem Ziel.

2) Reduzieren Sie die JTAG-Kabellänge. Typischerweise ist unsere weniger als 5 cm.

Es hat gut funktioniert.

Bearbeiten: Clifford hat bereits auf diese Dinge hingewiesen. Ich füge nur meine Erfahrung hinzu.

Ihre 2 Cent sind viel mehr wert! Ich werde mit meinen Kollegen über den digitalen Isolator sprechen. Ich hoffe, sie werden diese Lösung für zukünftige Designs akzeptieren! Vielen Dank an dich!

Es kann absolut Hardware beschädigen.

Angenommen, Ihre IR-Verschiebung wird auf einer MCU oder einem FPGA beschädigt und Sie laden versehentlich EXTEST oder geben eine IEEE 1532 ISC-Anweisung ein, und Sie haben keine sicheren Werte in den BSR-Zellen festgelegt. Jeder BSR-Pin auf diesem Gerät bestätigt sofort den Zustand, der sich gerade in diesen Zellen befindet.

Wenn Sie beispielsweise einige Geräte mit Leistungselektronik haben und kein externer Schutz vorhanden ist, können Sie beide MOSFETs in einem Schaltregler auslösen und die Spannung direkt auf GND kurzschließen. Ich habe das mehrfach erlebt. EXTEST ist wahrscheinlich die riskanteste Anweisung, die in der Spezifikation definiert ist.

Wenn Sie Ihrem JTAG-Setup nicht vertrauen können, würde ich anhalten und das Problem beheben, bevor Sie fortfahren. Denken Sie auch außerhalb von Hardwareschäden an die ganze Engineering-Zeit, die Sie verschwenden werden, um Heisenbugs zu jagen, die sich in einer DR-Schicht hin und wieder als etwas ausgefallen herausstellten.

Sehen Sie sich im Grunde Ihr Design an und überlegen Sie, was passiert, wenn jeder Pin auf einem JTAG-Gerät in einen unbekannten Zustand springt (oder alle 0 oder alle 1) – die Chancen stehen gut, dass Sie mit dem Ergebnis nicht zufrieden sein werden.

Andere Dinge, die ich in der Vergangenheit aufgrund schlechter JTAG-Integrität getan habe, sind das versehentliche Auslösen von Sicherheitssicherungen und ähnlichem. Dies würde das Teil mauern und es erfordern, es zu ersetzen. JTAG hat konstruktionsbedingt keine Integritätsprüfung oder Fehlerkorrektur – es ist konstruktionsbedingt einer der einfachsten möglichen Busse.

Vielen Dank für diese technischen Details und Ihr Feedback entsprechend Ihrer Erfahrung. Das ist definitiv, was mir fehlt: Erfahrung. Aber zumindest dachte ich, dass es schädlich sein könnte. Danke, ich kann verstehen warum!

Während eine direkte physische Beschädigung des Hardwaregeräts unwahrscheinlich erscheint, besteht eine sehr reale Wahrscheinlichkeit, dass eine verrauschte JTAG-Verbindung dazu führt, dass eine solche Sicherung fälschlicherweise so eingestellt wird, dass eine solche Sicherung fälschlicherweise so eingestellt wird, dass eine solche Sicherung fälschlicherweise so eingestellt wird, dass sie gerendert wird, wenn ein Gerät irgendeine Art von einmal beschreibbaren Konfigurationssicherungen enthält der Chip dauerhaft unbrauchbar. Darüber hinaus werden viele Prozessoren auf eine Weise verwendet, die Schaltkreisschäden an der CPU oder anderer Hardware verursachen könnte, wenn die I/O-Pins auf fehlerhafte Bedingungen gesetzt würden.

Grundsätzlich würde ich vermuten, dass eine laute JTAG-Verbindung dazu führen könnte, dass das System fälschlicherweise glaubt, dass Sie ihm die Kombination von Befehlen und Daten geben, die am gefährlichsten wäre. Wenn Sie dem Gerät nichts zuführen, was besonders schädlich wäre, wird nichts beschädigt. Aber wenn es möglich wäre, das Gerät mit dem JTAG absichtlich zu beschädigen, sollte man davon ausgehen, dass ein solcher Schaden auch versehentlich auftreten könnte, es sei denn, man hat systematische Anstrengungen unternommen, um dies zu verhindern.

Vielen Dank für Ihr Feedback. Bei der Arbeit sagten mir einige Leute, dass es kein Problem sein sollte. Sie haben meine Befürchtung bestätigt: Im Umgang mit JTAG ist viel Vorsicht geboten. Ich werde versuchen eine Lösung zu finden...
@Plouff: Es gibt Zeiten, in denen 100% Zuverlässigkeit erforderlich ist; es gibt andere, bei denen eine Zuverlässigkeit von 99 % mehr als ausreichend ist. Da eine Zuverlässigkeit von 99 % oft einfacher zu erreichen ist als 100 %, kann es manchmal sehr nützlich sein, zu erkennen, wann sie gut genug ist.
Ja, ich stimme deinem POV auf jeden Fall zu. Wenn ich 99 % Zuverlässigkeit erreichen kann, bin ich mehr als glücklich. Aber ich blieb die meiste Zeit unter 70 % und um die 50 % ... Also dachte ich, dass man etwas dagegen tun könnte!