www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik At91 Ladevorgang ParallelFlash


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael K. (1am3r)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael K. (1am3r)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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.

int main(void)
{
  (void (*)(void))fnkt_ptr() = 0x10000000; 

  //programm im internen RAM  

  //goto 0x10000000
  fnkt_ptr();

  return 0;
}

Gruß
Bernd

Autor: Michael K. (1am3r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist der Static Memory Controller konfiguriert? Der interne Bootloader 
aktiviert ja die Masterclock und ohne Waitstates wird das Flash nicht 
nachkommen.

Gruß,
1am3r

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.