Forum: Mikrocontroller und Digitale Elektronik openOCD config for ARM IMX31 unklar


von Peter B. (peter_b31)


Lesenswert?

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 ...
}

von asfdf (Gast)


Lesenswert?

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.).

von Peter B. (peter_b31)


Lesenswert?

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
Noch kein Account? Hier anmelden.