Guten Tag,
zur Zeit habe ich einige zeitliche Probleme mit meinen externen
Speicherbausteinen und ich würde gernebesser verstehen warum und falls
mölgich Fehler korrigieren.
Ich verwende einen Cortex M3 - LPC1778 mit 512kB internem Flash.
Zusätzlich sind extern 1x16 MByte NOR Flash, 1x128 MByte Flash und 1x32
MByte SDRAM angeschlossen.
Ich habe folgendes Problem:
Die Codeausführungszeit im externen Flah ist bis um den Faktor 40 höher
als im internen Flash. Je nachdem, was an Code ausgeführt wird und auf
welche Speicherbausteine zugegriffen wird.
Als kleines Beispiel:
1 | void Test(void)
|
2 | {
|
3 | uint32_t i;
|
4 | for (i = 0; i < 0x140000; i ++ )
|
5 | {
|
6 | Testbereich[i] = 0xFF;
|
7 | // Adresse Testbereich --> 32MByte external SDRAM
|
8 | }
|
9 | }
|
Wird dieser Teil vom Code im internen Flash ausgeführt, geschieht dies
um den Faktor 40 schneller als im externen Flash.
Ich denke, dass die Ausführungszeit langsamer ist weil der uC sehr viele
instruction fetch stalls und memory wait states für den externen Flash
in die interne pipeline einfügen muss.
Der interne Takt liegt bei 120 MHz mit Power Boost on und der EMC ist
auf 60 MHz eingestellt. Das externe Flash hat eine minimale Zugriffzeit
von 70 ns aber durch die Einstellungen im EMC hat sich eine Zeit von
etwa 84 ns ergeben.
Kennt ihr eine Möglichkeit die Codeausführungszeit in externen
Speicherbausteinen zu erhöhen ? Habt ihr gute Quellen für Informationen,
um die interne Cortex M3 pipeline zu verstehen und warum bzw. wie die
hohe Anzahl an instruction fetch stalls und memory wait states zustande
kommt ?
Vielen Dank