Forum: Mikrocontroller und Digitale Elektronik At91 Ladevorgang ParallelFlash


von Bernd S. (mms)


Lesenswert?

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

von Michael K. (1am3r)


Lesenswert?

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.

von Bernd S. (mms)


Lesenswert?

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

von Michael K. (1am3r)


Lesenswert?

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

von Bernd S. (mms)


Lesenswert?

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

von Michael K. (1am3r)


Lesenswert?

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