Frage:
Flash Reading von JTAG
Daniel
2017-10-03 21:37:46 UTC
view on stackexchange narkive permalink

Ich versuche, den Flash-Speicher eines Mikrocontrollers MPC5606B von Motorola zu lesen. Ich habe seine Pins gesehen und gesehen, dass es jtag verwendet, um das Debuggen durchzuführen, also versuche ich, die JTAG-Schnittstelle zum Lesen des Flash-Inhalts zu verwenden.

Ich habe den Flash-Inhalt des MPC mit einem Tool (UPA) und gelesen Bei einem PC möchte ich dies jedoch selbst tun und meine eigene eingebettete Hardware ohne das PC-Tool verwenden. Ich habe über den JTAG-Standard (JTAG_IEEE-Std-1149.1-2001) und einige Videos und Erklärungen im Internet gelesen. Ich habe das Statusdiagramm des TAP-Controllers und einige Anweisungen gelesen.

Um das Lesen des JTAG besser zu verstehen, habe ich mit dem PC-Tool den Blitz des MCP und ein Oszilloskop gelesen, um zu sehen, wie die Kommunikation durchgeführt wird Die Kommunikation dauert jedoch fast 10 Sekunden. Also füllte ich den gesamten Blitz mit Nullen und las den Speicher. Auf diese Weise konnte ich das Lesen des Speichers mit dem Oszilloskop identifizieren. Obwohl ich das Lesen des Speichers mit dem Oszilloskop identifizieren kann, kann ich die genaue Reihenfolge der Befehle zum Ausführen des Lesens noch nicht bestimmen. Die Lesezeit ist zu groß, fast 10s.

Bevor ich näher darauf eingehen möchte, möchte ich wissen, ob es einen Schutz für den Zugriff auf den Flash-Speicher gibt. Ich habe versucht, den Beginn der Kommunikation zu verstehen. Ich kann den Fortschritt in der Zustandsmaschine des TAP-Controllers identifizieren, konnte jedoch nicht verstehen, was dieser Schritt bedeutet und warum er ausgeführt wird. Ich würde also gerne wissen:

1) Kann ich feststellen, ob die Kommunikation einen Schutz bietet? Ich muss es wirklich wissen, bevor ich weiter in der Aufgabe vorgehen kann, da ich die Komplexität der Aufgabe vorher kennen muss, um tiefer zu gehen.

2) Obwohl ich über den JTAG-Standard und die TAP-Controller-Zustandsmaschine gelesen habe, Ich konnte nicht sagen, welche Befehlsfolge ich zum Lesen des Flahs-Inhalts benötige.

Abaixo está a leitura do flash do MPC5606B realizada pela ferramenta com o auxílio do PC. Das Bild besteht aus einer Folge von Bildern. Das erste ist das vollständige Bild der Kommunikation, das zweite ist der Beginn der Kommunikation. Ein Pfeil zeigt an, wo sie zurückgezogen wurde.

enter image description here

Dies war meine bisherige Interpretation

ABBILDUNG 1:

1.1 - (TMS = 1) Test-Logic-Resset

1.2 - (CLK breiter Puls) Ich weiß nicht warum.

1,3 - (8 Impulse von CLK, TMS = 1)

Da TMS nicht zu 1 kam, verstehe ich, dass es Test-Logic-Reset nicht beendet hat

1.4 - (TMS = 0, 1 Impulstakt) tritt in den Run-Test-Idle ein.


ABBILDUNG 2:

2.1 - (TMS = 1, 2 Taktimpulse ) Geht in den Zustand "IR-Scan auswählen"

2.2 - (TMS = 0, 2 Taktimpulse) Wechselt in den Zustand "Shif-IR"

2.3 - (TMS) = 0, 4 Taktimpulse) Bleibt in "Shift-IR"

TDI: 1000TDO: 10002.4 - (TMS = 1, 1 Taktimpuls) Geht zum "Exit1-IR"

2,5 - (TMS = 1, 1 Taktimpuls) Wechselt in den Status "Update-IR"

2,6 - (TMS = 0, 1 Taktimpuls) Wechselt in den "Run-Test-Idle"


ABBILDUNG 3:

3.1 - (TMS = 1, 1 Taktimpuls) wechselt in den Zustand "DR-Scan auswählen"

3.2 - ( TMS = 0, 2 Taktimpulse) Wechseln Sie in den Status "Shif-DR"

3.3 - (TMS = 0, 31 Taktimpulse) Wechseln Sie in den Status "Shif-DR"

Die 32 Taktzyklen entsprechen 4 Bytes:

TDI: 0x00 0x00 0x00 0x00TDO: 0xB8 0x0C 0x27 0x54 (10111000 00001100 00100111 01010100)

3.4 - (TMS = 1, 1 Taktimpuls) Wechselt zum "Exit1-DR"

3.5 - (TMS = 1, 1 Taktimpuls) Wechselt zum Status "Update-DR"

3.6 - (TMS = 0, 1 Taktimpuls) Geht zum "Run-Test-Idle"

Daniel, hast du einen Weg gefunden, MPC5606BK zu lesen?
@autofan1965, Ich habe es versucht, aber ich brauchte es nicht mehr, also hörte ich auf.
Zwei antworten:
John Doe
2017-10-04 11:26:28 UTC
view on stackexchange narkive permalink

Das manuelle Interpretieren von JTAG-Transaktionen kann ziemlich mühsam sein. Wenn Sie Ihre Daten in ein mehr oder weniger universelles Datenformat wie VCD oder sogar eine CSV-Datei exportieren können, können Sie Sigrok und Pulseview verwenden, um Ihre Daten zu dekodieren. Dadurch werden die JTAG-Daten auf niedriger Ebene dekodiert. Wenn Sie die Besonderheiten des Controllers wie das TAP-Registerlayout und den Befehlssatz kennen, können Sie Sigrok um einen Decoder erweitern, der auf dem vorhandenen IEEE-1149-Decoder ausgeführt wird.

jtag

Ich verwende PulseView, um die Kommunikation zu dekodieren. Es war ein sehr guter Rat, ich danke Ihnen wirklich. Ich habe jedoch für eine Weile aufgehört zu dekodieren, bevor ich weiter gehen muss, muss ich wissen, ob MPC5606B eine Art Schutz / Sicherheit enthält, da diese Arbeit sonst wertlos sein könnte. Weißt du etwas darüber?
Aufgrund der Art der Frage dachte ich, es sei etwas Dunkles, aber anscheinend gibt es da draußen viele Dokumente. Ich würde empfehlen, das Referenzhandbuch zu lesen: http://cache.freescale.com/files/32bit/doc/ref_manual/MPC5606BRM.pdf. Sie interessieren sich für die Abschnitte 2.4.5, 5.1.3, 35.
Igor Skochinsky
2017-10-04 03:10:15 UTC
view on stackexchange narkive permalink

Ihre Interpretation kommt mir ziemlich nahe. Dies ist jedoch eine Ansicht auf sehr niedriger Ebene. Sie müssen sie auf die höhere Ebene zurückbringen, zumindest IR / DR. Zum Beispiel kann der gesamte Austausch 1-3 wie folgt zusammengefasst werden:

Schreiben Sie IR = 0b100 (8), lesen Sie DR = 0x2AE4301D

(DR-Bits werden vom niedrigsten verschoben Sie müssen also die Bitfolge austauschen.)

Dieser IR-Wert liegt sehr nahe am Standard-IDCODE (4). Ich denke, Ihre Interpretation enthält einen Off-by-One-Wert, und dieser Austausch liest die Geräte-ID. Tatsächlich stimmt der Wert 0x2AE4301D mit dem Wert für MPC5606BF überein, den ich in diesem Dokument gefunden habe. AFAIK Die gängigen Methoden zum Lesen von Flash sind die folgenden:

  1. Setzen und Lesen der mit dem Flash-Chip verbundenen CPU-Pins mithilfe von Boundary Scan; Im Grunde genommen verwandelt sich die CPU in einen Bit-Bang-Flash-Programmierer. Dies funktioniert offensichtlich nur mit externem Flash, also wahrscheinlich nicht in Ihrem Fall
  2. mit benutzerdefinierten chipspezifischen Debugging-Befehlen, lesen und schreiben Sie die E / A-Register des Flash-Geräts im CPU-Speicher.
  3. Laden Sie mit benutzerdefinierten chipspezifischen Debugging-Befehlen ein kleines Flasher-Programm in den RAM der CPU hoch und lassen Sie es ausführen. Das Programm würde Flash-Blöcke in einen RAM-Bereich bringen, der dann über JTAG zurück zum Host abgerufen werden kann. Durch Festlegen des Registerstatus vor jeder Ausführung kann auf verschiedene Teile des Flashs zugegriffen werden.
  4. ol>

    Ich würde Ihnen empfehlen, ein Programm wie urJTAG oder OpenOCD zu verwenden, um JTAG-Manipulationen auf hoher Ebene (wie das Senden) durchzuführen IR und DR lesen), wenn Sie reproduzieren möchten, was das Blinkprogramm tut. urJTAG verfügt auch über einen Modus zum Brute-Force-Erzwingen möglicher IR-Werte, mit dem Sie möglicherweise die herstellerspezifischen Befehle ermitteln können.

Ich habe den IDCODE im Protokoll der Kommunikation identifiziert. Ihre Beobachtungen und Tipps waren sehr nützlich. Vielen Dank. Ich habe jedoch für eine Weile aufgehört zu dekodieren, bevor ich weiter gehen muss, muss ich wissen, ob MPC5606B eine Art Schutz / Sicherheit bietet, da diese Arbeit sonst wertlos sein könnte. Weißt du etwas darüber?
Da der andere Blinker funktioniert, bezweifle ich, dass es einen starken Schutz gibt, wenn überhaupt. Auf jeden Fall ist das eine andere Frage.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...