artikel:nav_common:jtag_readout_mainboard_flash

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
artikel:nav_common:jtag_readout_mainboard_flash [Thu. 07.02.2019 07:17] – ↷ Links angepasst weil Seiten im Wiki verschoben wurden go4itartikel:nav_common:jtag_readout_mainboard_flash [Thu. 07.02.2019 08:28] go4it
Zeile 1: Zeile 1:
 ====== Den Flash-Speicher vom Mainboard über JTAG auslesen ====== ====== Den Flash-Speicher vom Mainboard über JTAG auslesen ======
- 
-===== Die Aufgabe ===== 
- 
-Diese Anleitung beschreibt wie man den **kompletten Inhalt** des 32 MB großen Flash-Speichers vom Mainboard des FX auf den PC überträgt. 
- 
-===== Das Problem ===== 
  
 Der Flash-Speicher selbst hat keinen JTAG-TAP (Interface). Er ist mit dem Hauptprozessor, einem Texas Instruments "OMAP5948ZXF" verbunden. Der OMAP hat eine JTAG-Schnittstelle und somit ergibt sich die Möglichkeit darüber auch an den Inhalt des Flashs heranzukommen. Der Flash-Speicher selbst hat keinen JTAG-TAP (Interface). Er ist mit dem Hauptprozessor, einem Texas Instruments "OMAP5948ZXF" verbunden. Der OMAP hat eine JTAG-Schnittstelle und somit ergibt sich die Möglichkeit darüber auch an den Inhalt des Flashs heranzukommen.
Zeile 12: Zeile 6:
  
 Der OMAP enthält neben einer ARM9-CPU und einem DSP auch einen Coprozessor und zahlreiche andere Komponenten, ähnlich einem Mikrocontroller. RAM und Flash können per Design extern angeschlossen werden. Dieser Umstand ermöglicht eine gewisse Vorhersage wie und an welchen Pins der OMAP ein Flash bedient. Mit Hilfe eines JTAG-Flash-Readers und den richtigen Einstellungen ist es grundsätzlich kein Problem das Flash auszulesen. Der OMAP enthält neben einer ARM9-CPU und einem DSP auch einen Coprozessor und zahlreiche andere Komponenten, ähnlich einem Mikrocontroller. RAM und Flash können per Design extern angeschlossen werden. Dieser Umstand ermöglicht eine gewisse Vorhersage wie und an welchen Pins der OMAP ein Flash bedient. Mit Hilfe eines JTAG-Flash-Readers und den richtigen Einstellungen ist es grundsätzlich kein Problem das Flash auszulesen.
- 
-Es gibt jedoch ein Problem! Einzelne Sektoren lassen sich problemlos übertragen. Will man aber mehr als 5 oder 10 Sektoren übermitteln (das Flash enthält 256 Sektoren), kommt es zum Übertragungsabbruch: 
- 
-{{artikel:nav_fx:flash-download_failed.jpg?direct&200|}} 
- 
-Gleichzeitig kann beobachtet werden das der Stromverbrauch des Geräts gegen Null sinkt. An diesem Problem sind bislang alle die im Internet darüber berichten gescheitert. Niemand hat es bislang geschafft den Flash vollständig in einem Rutsch zu lesen. 
- 
-Der Grund für diese Abbrüche ist schnell erklärt: Um via JTAG auf den Flash-Speicher zugreifen zu können wird als erstes die CPU angehalten und die Speicherverwaltungseinheit deaktiviert. Nur so können Zugriffskonflikte vermieden werden. Gleichzeit wird damit auch die auf dem OMAP laufende Anwendung gestoppt. Die Programmausführung auf dem OMAP wird jedoch von einem Watchdog im Radioprozessor (µPD70F3283) überwacht. Erhält dieser innerhalb von 10 Sekunden kein "Lebenszeichen" des laufenden Programms, löst er eine vollständige Abschaltung aus. Diese Keep-Alive Pakete werden mittels SPI-Schnittstelle vom OMAP zum Radioprozessor gesendet. 
- 
-Um das Flash also vollständig (unterbrechungsfrei) herunterladen zu können, muss dieser Watchdog entweder deaktiviert werden, oder weiterhin Keep-Alive-Pakete für den Watchdog auf den SPI erzeugt werden. Letzteres wäre per Software sicher möglich. Viele Flash-Reader, wie auch der Segger, laden via JTAG nach anhalten der CPU eigenen Programmcode in den Arbeitsspeicher des OMAP und lassen ihn ausführen. Dieser Programmcode liest dann den Flash byteweise aus und sendet die Daten direkt über JTAG zum Programm auf dem PC. Das geht deutlich schneller als die Leseoperationen auf Signalebene über JTAG-Boundaryscan-Register zu emulieren. In diese Software könnte ein findiger Programmierer auch eine Routine für das senden der Keep-Alive-Pakete implementieren. 
- 
-Es gibt aber noch eine Alternative! Die Entwickler des Radios waren so freundlich einen IO-Port des Radioprozessors an den rechten, nicht bestückten, Serviceport zu legen mit dem es möglich ist den Radioprozessor und damit den Watchdog zu deaktivieren. Diese Methode beschreibe ich nachfolgend im Detail. Damit ist es problemlos möglich, **den Flash-Inhalt ohne weitere Hilfsmittel, Spezialsoftware oder sonstigem Hokuspokus komplett auszulesen!** 
- 
-===== Die Lösung ===== 
  
 Für die Umsetzung verwende ich einen relativ preiswerten "Segger J-Link EDU": Für die Umsetzung verwende ich einen relativ preiswerten "Segger J-Link EDU":
  • artikel/nav_common/jtag_readout_mainboard_flash.txt
  • Zuletzt geändert: Wed. 19.05.2021 13:28
  • von go4it