At91 Ladevorgang ParallelFlash

OP #908465
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
#908498
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.
OP #908509
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
#908545
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
OP #908564
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren