Forum: Mikrocontroller und Digitale Elektronik OpenOCD AT91RM9200 externes RAM programmieren


von Bernhard (Gast)


Lesenswert?

Hallo,

an meinem AT91RM9200 hängen 32 MB SD-RAM und eine SD-Karte, "normales" 
Flash habe ich mir gespart.
Nun würde ich gerne mit dem OCD das Programm ins externe RAM laden und 
später mit einer Funktion im internen Flash in die SD-Karte kopieren.
Später sollte der Bootloader nur noch das Programm zurück in das RAM 
kopieren.

Kann das der OpenOCD? Da das Atmel-Demoboard mit viel mehr RAM als Flash 
ausgestattet ist (32 MB -  4 MB), sollte es ja gehen, oder?
Vielen Dank im Voraus,
Bernhard

von Jörn K. (joern)


Lesenswert?

Hallo Bernhard,

das 9200 hat AFAIK kein internes Flash, wenn ich falsch liege bitte 
aufklären. Somit wird dein Plan, wenn ich mich nicht irre, nicht 
funktionieren.

Du könntest ins RAM ein Programm ablegen, dass die Daten aus dem 
Speicher (oder über DCC / UART o.ä.) nimmt und dann auf die SD Karte 
schreibt.

Gruß Jörn

von Bernhard (Gast)


Lesenswert?

Hallo Jörn,

der AT91RM9200 hat 128 kb "Fast ROM", also Flash.
Zumindest am Anfang würde ich mir den Weg über 
UART->SD-Karte->Bootloader gerne sparen, sondern einfach laden und 
prüfen.
Variablen aus dem RAM sollte der OCD ja auslesen und beschreiben können, 
also sollte es ja pronzipiell gehen.

Viele Grüße,
Bernhard

von Dominic R. (dominic)


Lesenswert?

Hallo Bernhard,

Du kannst mit dem OpenOCD das RAM schreiben und lesen, sofern du zuvor 
den SDRAM Controller und die PLL initialisierst.

Das "Fast ROM" des AT91RM9200 is definitiv nicht programmierbar, 
zumindest ist keine Möglichkeit zur Programmierung dokumentiert.

Gruß,

Dominic

von O. D. (odbs)


Lesenswert?

Der AT91RM9200 hat definitiv kein Flash.

Er hat ein internes ROM (wirklich read-only, kein Flash), in dem ein 
fester Bootloader abgelegt ist. Dieser sucht nach dem Reset nach einem 
externen Flash und kopiert eine feste Anzahl Bytes in das interne RAM 
(160kB). Dann wird der Speicher "umgemappt" und zum Anfang des RAM 
gesprungen. In der Regel ist der Bootprozess mehrstufig, d.h. in dem 
externen FLASH, meist ein kleines Data-Flash, wird ein zweiter 
Bootloader abgelegt, der dann seinerseits den externen Speicher (SDRAM, 
SD-Karte, großes paralleles Flash etc.) initialisiert und das 
eigentliche Hauptprogramm in das SDRAM lädt.

Findet der interne Bootloader des AT91RM9200 keinen externen Bootloader 
in einem angeschlossenen Speicher, springt er in eine Routine, die ein 
Programm über die serielle Schnittstelle herunterlädt. Dies ist auch der 
Ansatz für das Bootstrapping eines neuen ("leeren") Systems.

von Bernhard (Gast)


Lesenswert?

Danke für eure Antworten.

@ Oliver Döring
Mit deinem Tipp hast du mir einen Haufen Arbeit erspart, ich hätte auch 
geneauer / weniger optimistisch auf das Datenblatt schauen können.

Welchen UART-Loader nehme ich am Besten für den internen Bootloader? 
Ghet das automatisiert mit Eclipse und OpenOCD als "Resetter"?

Kann ich den AT91RM9200 auch standalone mit dem internen RAM betreiben? 
Nur als Notlösung, wenn anfangs erst mal gar nichts geht.

Vielen Dank,
Bernhard

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.