Forum: Mikrocontroller und Digitale Elektronik SPI Flash Interface XIP img auf QSPI RAM ausführen


von o_0 (Gast)


Lesenswert?

Hallo Forum,

einige Mikrokontroller(NXP) bieten die Möglichkeit, ein Flash über SPIFI 
anzuschließen und das Image als XIP direkt von SPI Flash auszuführen.

Statt eines Flashs, ein QSPI RAM anzuschließen, das Img auf den RAM 
kopieren und von dort auszuführen würde nicht funktionieren, da nicht 
gleichzeitig gelesen und geschrieben werden kann.

Verstehe ich das richtig?

von Jim M. (turboj)


Lesenswert?

Wenn der µC keinen internen Flash hat, müsstest Du zuerst das Henne-Ei 
Problem lösen: Wie kommt das Programm / Booloader in den µC?

Außerdem bräuchtest Du RAM der zum Lesen ganz genau so wie ein SPI Flash 
angesprochen wird. Keine Ahnung ob sowas in bezahlbar existiert. Die 
Möglichkeiten zur Anpassung sind bei XIP begrenzt.

Schreiben selbst ist das kleinere Problem, da entsprechende µC 
üblicherweise kurze Befehlsfolgen auch komplett aus dem RAM ausführen 
können.

von o_0 (Gast)


Lesenswert?

Der Kontroller, in meinem Fall LPC54xxx Serie kann von verschiedenen 
Speichermedien booten. SPIFI, SPI, USB manche vom internen Flash. 
Internen SRAM haben die auch alle.
Das ist nicht das Problem.

Nur der interne Ram reicht mir nicht aus.

Das SPIFI mit einem XIP Img liest den ausführbaren Code aus dem Flash 
und legt Variablen in den Heap/Stack auf den internen Ram.

NXP bietet aber die Möglichkeit „link Applikation to ram“
Meine Idee ist es SPIFI mit QSPI-RAM zu verbinden.
Die Frage ist, ob der auf die QSPI-RAM (SPIFI) kopierte Code „wo auch 
immer“ ausführbar ist ohne weiteren Ram zu benötigen.
1
//beim Ausführen aus einem Flash bleiben die Anweisungen in Flash, x wird im internen SRam angelegt.
2
//beim Ausführen aus dem internen SRAM. Anweisungen und x werden im Ram gehalten
3
4
//Wie ist es wenn man das Img auf QPSI-SRAM (SPIFI) kopiert uns ausführt??
5
Int main(){
6
7
Int x=0; 
8
9
While(1)
10
  ++x;
11
12
Returt 0;
13
}

von MaWin (Gast)


Lesenswert?

o_0 schrieb:
> Returt 0

Such dir einen anderen Beruf.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

o_0 schrieb:
> ie Frage ist, ob der auf die QSPI-RAM (SPIFI) kopierte Code „wo auch
> immer“ ausführbar ist ohne weiteren Ram zu benötigen.
Nicht "wo auch immer", sondern im Datenblatt nachlesen in welchem 
Adressenraum der Speicher gemappt wird!

Memory mapping: SPI Flash Interface (SPIFI)
0x1000 0000 - 0x17FF FFFF SPIFI memory mapped access space (128 MB).

Du musst dein Programm also so compilieren das es an diesem 
Adressbereich lauffähig ist und es dann mit der passenden 
Einsprungadresse "anspringen" (nachdem dein Startupcode das auch alles 
vollständig initialisiert hat).

von o_0 (Gast)


Lesenswert?

irgendwer schreibt:
> Nicht "wo auch immer", sondern im Datenblatt nachlesen in welchem
> Adressenraum der Speicher gemappt wird

> Memory mapping: SPI Flash Interface (SPIFI)
> 0x1000 0000 - 0x17FF FFFF SPIFI memory mapped access space (128 MB).

> Du musst dein Programm also so compilieren das es an diesem
> Adressbereich lauffähig ist und es dann mit der passenden
> Einsprungadresse "anspringen" (nachdem dein Startupcode das auch alles
> vollständig initialisiert hat).
Ist bekannt, habs gemacht. Es ist nicht Gegenstand der Frage wie der 
Code auf den QSPI Ram kommt oder ob im Img Sprungadressen stimmen.
Geht davon aus, dass alles passt.

Mich interessiert, ob der an der SPIFI (Flash Interface) angeschlossene 
RAM als vollwertigen RAM genutzt werden kann.
Nicht wie im Flash Modus als Read only.
Sondern R/W, gleichwertig (wenn auch langsam) wie interner SRAM oder 
SDRAM über externen memory controller.

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.