Moin, es will mir nicht gelingen mit dem Lauterbach Debugger per SWD auf einen leeren LPC55S69 zuzugreifen. Diese MCU sperrt nämlich den Zugriff auf die dazu notwendigen JTAG-APs wenn kein gültiges Image im Flash steht. Ich habe hier die TRACE32-Version 2021.02 bei der sich die beiden Cores des LPC55S69 mit SYSTEM.CPU auswählen lassen. Obwohl also anscheinend von der Software unterstützt, gelingt der Debug-Zugriff dennoch nur wenn zuvor auf anderem Wege ein Programm ins Flash geladen wurde. Löscht man dieses Image mit dem Lauterbach, ist danach keine erneute Debugsession mehr möglich. Die kargen Lauterbach-Beispiel-Scripts gehen davon aus daß Zugriff immer möglich ist, bzw. automatisch ermöglicht wird. Mache ich was offensichtliches falsch? War jemand erfolgreicher als ich? Der Debugger muß den Zugriff aktiv über ein wohl NXP-spezifisches "debug session protocol" anfordern. Theoretisch könnte man das über die low-level JTAG.SWD.xyz Befehle des Lauterbach selbst machen, leider ist die Dokumentation dieser TRACE32-Befehle, sagen wir mal so, hier und da ausbaufähig... Dementsprechend war ich auch dort nicht erfolgreich. Bin für jeden Hinweis dankbar! Rolf
Meinst Du den Abschnitt "51.6.1 Debug session with uninitialized/invalid flash image or ISP mode" im User Manual (UM11126) und das Beispielskript? Zum TRACE32 gibt es das Beispiel "demo\arm\etc\dap\sample-swd-raw.cmm", das sollte eigentlich schon einen großen Teil der benötigten SWD Zugriffe implementieren (wenn man das Low-Level in SWD implmentieren will und es nicht eventuell mit anderen TRACE32 Funktionen auf höherer Ebene machbar ist).
:
Bearbeitet durch User
Ja genau, das ist das entsprechende Kapitel im User Manual! Vielen Dank für den Hinweis auf das Script! Ich mußte aber erst die neueste TRACE32 Version entpacken um es zu finden, in meiner installierten Version 2021.02 (die letzte die mein Ausleih-Dongle noch unterstützt...) ist es noch nicht dabei. Das Script verwendet ausschließlich JTAG.SWD.SHIFT, also den Low-Level-Befehl unter den Low-Level-Befehlen :-) Mache mich aber mal drüber her!
Rolf schrieb: > > Das Script verwendet ausschließlich JTAG.SWD.SHIFT, also den > Low-Level-Befehl unter den Low-Level-Befehlen :-) Mache mich aber mal > drüber her! Ich denke dass JTAG.SWD.ReadDapBus und JTAG.SWD.ReadScan bzw. JTAG.SWD.WriteDapBus und JTAG.SWD.WriteScan ähnlich funktionieren wie das Beispielskript. Mit dem Beispielskript für JTAG.SWD.Shift hat man aber vermutlich mehr Kontrolle, zumindest wenn man es bei Problemen mit der Spezifikation des ARM Debug Interface vergleicht.
Kurzer Zwischenbericht aus Eriwan: Im Prinzip geht's, aber... Aus dem Beispielscript habe ich mir das Notwendige heraus geholt und bin nun in der Lage den Debugport für beide Cores freizuschalten! War etwas holprig, dem Beispielscript fehlt der Schritt um überhaupt Zugriff auf Access Ports zu bekommen (man muß im Debug Port CTRL-Register Requests für Debug- und System-Powerup setzen). Wäre schön wenn das Script sowas drin hätte, würde viel Zeit sparen! Und leider war auch noch ein Bug im Script: Registerzugriffe auf Adresse 0 und 1 funktionieren, bei Register 2 und 3 wird ein Parityfehler erzeugt :-( Elegant ist das alles ohne echte Integration in andere TRACE32-Befehle nicht. Der Befehl SYSTEM.DETECT.DAP z.B. kann auch nach der Freischaltung die JTAP-APs der Cores nicht anzeigen. Er führt nämlich dazu daß (vermutlich durch Initialisierung vorab) die Debug-Verbindung wieder gesperrt wird! Das Flash programmieren steht als nächstes auf der Tagesordnung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.