Hallo, wie funktioniert eigentlich der Ladevorgang ("Bootloader") von einem externen Flash (Parallel-Flash) bei den AT91 Prozessoren von Atmel (also alle AT91SAM z.B.)? Werden hier die ersten 64Bytes vom Flash in den internen RAM kopiert und dann alles ausgeführt? Im internen ROM befindet sich zwar ein Bootloader, jedoch wird dieser nicht für das Parallel-Flash verwendet, sondern lediglich für Data-Flash (via SPI) oder NAND-Flash (mit Nand-Controller) Anwendungen. Gruß Bernd
So wie ich das verstanden habe wird da gar nichts kopiert, sondern die NBCS0 Adresse wird auf Adresse 0 gemappt. Also wird 0x1000 0000 zu 0x0. Der Code der in dem angeschlossenen Flash liegt wird direkt ausgeführt. Siehe dazu auch Punkt 8.1.1 im AT91SAM9260 Datenblatt. Denke das das bei den anderen SAM9 auch so ist, hab es aber nicht nachgeschaut.
hmm... mein Problem liegt darin, dass ich bis jetzt ein kleines Programm geschrieben habe, welches im Data-flash liegt (SPI) und nach dem Prozessorstart ausgeführt wird. Dieses Programm läuft im interen RAM, welcher auf 0x00 gemappt ist. Jetzt möchte ich gern, dass dieses Programm in der Lage ist, den Programmcode, welcher im NOR-Flash (NCS0) liegt, auszuführen. Wenn ich direkt beim Prozessorstart auf das NOR-Flash zugereife (BMS Jumper entsprechend geändert) funktioniert das Programm im NOR-Flash. >So wie ich das verstanden habe wird da gar nichts kopiert, sondern die >NBCS0 Adresse wird auf Adresse 0 gemappt. Also wird 0x1000 0000 zu 0x0. >Der Code der in dem angeschlossenen Flash liegt wird direkt ausgeführt. bedeutet das auch, dass man max. 1MB ausführen kann? Das würde dem Platz bei 0x0 zu 0x0010 0000 entsprechen (wo das interne ROM anfängt)? Gruß Bernd
Bernd Schuster wrote: > Jetzt möchte ich gern, dass dieses Programm in der Lage ist, den > Programmcode, welcher im NOR-Flash (NCS0) liegt, auszuführen. > > Wenn ich direkt beim Prozessorstart auf das NOR-Flash zugereife (BMS > Jumper entsprechend geändert) funktioniert das Programm im NOR-Flash. Reicht dazu nicht ein Sprung zu 0x1000 0000, also die NBCS0 Adresse? >>So wie ich das verstanden habe wird da gar nichts kopiert, sondern die >>NBCS0 Adresse wird auf Adresse 0 gemappt. Also wird 0x1000 0000 zu 0x0. >>Der Code der in dem angeschlossenen Flash liegt wird direkt ausgeführt. > > bedeutet das auch, dass man max. 1MB ausführen kann? Das würde dem Platz > bei 0x0 zu 0x0010 0000 entsprechen (wo das interne ROM anfängt)? Ja, aber nur wenn man davon direkt booten will (BMS auf 0). Danach ist das Flash ja unter seiner Adresse direkt zu erreichen (in dem Fall also 0x1000 0000 für NBCS0). Also den selbst geschriebenen "Bootloader" in die ersten 1MB und dadrin dann ein Sprung zur Adresse des Programms innerhalb des NBCS0 Bereiches. Gruß 1am3r
>> Wenn ich direkt beim Prozessorstart auf das NOR-Flash zugereife (BMS >> Jumper entsprechend geändert) funktioniert das Programm im NOR-Flash. >Reicht dazu nicht ein Sprung zu 0x1000 0000, also die NBCS0 Adresse? hab ich schon ausprobiert - leider ohne Erfolg.
1 | int main(void) |
2 | {
|
3 | (void (*)(void))fnkt_ptr() = 0x10000000; |
4 | |
5 | //programm im internen RAM
|
6 | |
7 | //goto 0x10000000
|
8 | fnkt_ptr(); |
9 | |
10 | return 0; |
11 | }
|
Gruß Bernd
Ist der Static Memory Controller konfiguriert? Der interne Bootloader aktiviert ja die Masterclock und ohne Waitstates wird das Flash nicht nachkommen. Gruß, 1am3r
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.