Ausführbare Datei vom externen SRAM ausführen

8

Ich habe eine STM32-Entwicklungsplatine mit einem externen SRAM. Ich möchte meinen Code von diesem externen SRAM ausführen, aber mein Prozessor unterstützt nur das Booten von Flash, internem SRAM oder Systemspeicher (einem Teil des internen SRAM).

Was ist der einfachste Weg, um Code von einem externen SRAM auszuführen?

Anmerkungen: Ich lade Code mit OpenOCD über JTAG und verwende GDB.

Zufälliges Blau
quelle
3
Wie wird Ihr Programm überhaupt in den externen SRAM gelangen?
Vicatcu
@vicatcu: Ich habe einen funktionierenden Treiber in C.
Randomblue

Antworten:

16

Bevor Sie mit der Ausführung von Code aus dem externen RAM beginnen können, müssen Sie zuerst FSMC initialisieren und Ihren Code in diesen RAM kopieren, damit Sie trotzdem von Flash aus starten können. Ein ordnungsgemäß geschriebenes Linker-Skript (mit einem zusätzlichen Codeabschnitt, der an der richtigen Adresse verlinkt, aber in Flash platziert ist, wie der Abschnitt .data) hilft sehr. Sie können Funktionen, die Sie im RAM platzieren müssen, mit einem korrekten Abschnittsattribut markieren . Kopieren Sie diesen Abschnitt nach der Initialisierung von FSMC auf dieselbe Weise in den RAM, wie .data in Ihren Startcode kopiert wird. Sie müssen nur noch Ihre RAM-Funktionen auf normale Weise aufrufen.

Beachten Sie zwei schwerwiegende Probleme beim Ausführen von einem externen SRAM:

  1. Es wird langsam sein. Wie 6 ... 8 mal langsamer als aus dem Flash läuft oder sogar internen SRAM gemäß diesem . Diese Mikrocontroller-Architektur ist einfach nicht für diese Art der Verwendung optimiert .

  2. Einige STM32-Chips haben einen Siliziumfehler, bei dem der FSMC-Zugriff durch zwei Busmaster den Chip zum Absturz bringt. Dies schließt grundsätzlich die Verwendung von DMA aus. Dies betrifft die STM32F103-Revision Y IIRC, wahrscheinlich auch andere Chips.

Also würde ich das nicht persönlich machen. Noch einmal muss ich auf dieser Website diesen Mikrocontroller wiederholen! = CPU, auch wenn es sich um einen ARM handelt.

Dorn
quelle