Hi everyone, ich versuche seit geraumer Zeit mit openOCD und Olimex Debugger ein ARM IMX31 board zum Laufen zu bekommen. Jedoch habe ich jetzt zwar das board verbunden bekommen (nach langem herum konfigurieren) aber ich bekommen kein image im RAM gestartet. Aktueller Stand: - lauffaehiges board - alte JTAG Konfiguration von einem alten/anderen Debugger - init/connect/reset/halt/resume geht - MMU ist aus - lesen/schreiben der control register funzt und werte stimmen auch Problem: - verstehe Teile der configs vom ARM nicht (hat weniger was mit openOCD zu tun) - image was in RAM geladen wird schlägt bei "verify_image" immer fehl (d.h. der upload in den RAM scheint nicht zu klappen) Fragen: - wie kann ich validieren ob der RAM richtig konfiguriert ist - kann man bei einem ARM einfach den RAM beschreiben, program Counter setzen.. und go? ich habe da so meine Zweifel inzwischen :-) Wundersame stelle in der Beispiel openOCD init (es wird in bestimmte Speicher Bereiche der CPU geschrieben): proc imx31pdk_init { } { imx3x_reset # This setup puts RAM at 0x80000000 mww 0x53FC0000 0x040 mww 0x53F80000 0x074B0B7D # 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 #mww 0x53F80004 0xFF871D50 #mww 0x53F80010 0x00271C1B # Start 16 bit NorFlash Initialization on CS0 mww 0xb8002000 0x0000CC03 mww 0xb8002004 0xa0330D01 mww 0xb8002008 0x00220800 # Configure CPLD on CS4 mww 0xb8002040 0x0000DCF6 mww 0xb8002044 0x444A4541 mww 0xb8002048 0x44443302 .... more memory writes like this ... }
Ich kenne diesen Controller nicht, aber die Memory Writes sind eher keine Writes ins wirkliche RAM, sondern in Teile des Adressbereichs wo (I/O) Register des Controllers gemappt sind. Du brauchst also das Datenblatt mit Registerbeschreibungen zu deinem Controller um nachvollziehen zu können was genau diese Writes tun. Generell ist der RAM Init sehr abhängig vom Controller und RAM Chip der drauf ist, mit Copy-Paste von anderen Boards kommt man da nicht weit, du musst sehr genau die Timings/Größen/Bitzahlen konfigurieren die eben für genau deinen Chip nötig sind. Ausführen aus dem RAM geht normalerweise schon, du musst aber dort auch ein Programm ablegen das entsprechend dafür ausgelegt ist (u.U. Linker Skripte fürs Compilieren anpassen, falls nötig, usw.).
Hi "asfdf" :-) Danke für die Antwort. Mir ist klar, dass hinter den Adressen am Ende Konfigurations-Register stehen. Vielleicht muss ich meine Frage besser formulieren: Die Zahlenwerte sind sehr wahrscheinlich korrekt (da ich sich sie von einem anderen Debugger Skript für mein Board genommen habe). Jedoch will ich verstehen was genau diese konfigurieren, da ich die Skripte verwenden will um SW/Bootloader Fehler zu finden. Zum Thema Datenblatt: ich habe mich bei Freescale über den IMX31 (bzw. genau den entsprechenden ARM1136) informiert, nur kann ich die obigen Adressen (z.B. 0x53FC0000) nicht mit der Spezifikation in Einklang bringen... sehr wahrscheinlich weil ich da falschen Erwartungen habe :P Noch als Info dazu: Ich habe bereits erfolgreich bestimmte Register zuordnen können und auch konfiguriert, im Unterschied zu den obigen wurden diese aber direkt angesprochen, nicht über gemappte Address-Bereiche (Beispielsweise gibt es ein CP15 Register, dass man über openOCD JTAG Kommandos direkt anspricht).
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.