Forum: Mikrocontroller und Digitale Elektronik Frage zu uC Speicher Typen, Ausführung von code


von Mark O. (maolimu77)


Lesenswert?

Hallo zusammen,
als Hobby habe ich in den letzten Monaten mit einem Arduino, FEZ Panda 
(ARM 7 von NXP, .Net Micro Framework) und anderen uC basierten Boards 
gespielt.

Ich bin jetzt an einem Punkt an dem die standard .Net Microframework 
Klassen nicht das tun was ich möchte bzw weniger als der Prozessor kann 
bereitstellen. Zb unterstützt der im NXP ARM7 Prozessor eingebaute 
"Timer Peripheral" weitaus mehr Funktionen als man über .Net 
Microframework ansteuern kann. Ich lese also derzeit ARM Manuals, 
Manuals des Prozessoren, usw

Dabei ist mir immer noch nicht verständlich wie bei einem uC Code 
ausgeführt wird:

1)
Zum einen gibt es die uC mit nur internem SRAM und Flash. Flash ist 
meistens grösser als RAM. In Foren Beiträgen las ich dass der Code 
direkt aus Flash ausgeführt wird. Stimmt das? Kann ein uC direkt aus 
Flash Code ausführen? Oder ist damit nur gemeint, dass wann auch immer 
neuer Code ausgeführt werden muss dass sich auf Flash befindet, ein 
kleiner Teil in SRAM nachgeladen wird um anschliessend ausgeführt zu 
werden?

Sprich bei einem solchen Prozessor wird ständig aus Flash in SRAM 
nachgeladen?

2)
Zum anderen gibt es uC mit externen SDRAM und Flash (oder NAND oder 
oder). Bei den Board die ich bisher gesehen habe, war meisten mehr SDRAM 
als Flash vorhanden. Die Flash Anbindung kann über verschiedenste Wege 
ausgeführt werden, SPI oder EBI, etc. Je nach dem wie die Anbindung 
gemacht wird, ist jedoch zu erwarten dass diese sehr viel langsamer ist 
als bei einem uC mit integriertem Flash. Was macht man in solch einem 
Fall? Nach reset den gesamten Flash Inhalt (oder so viel wie möglich) in 
SDRAM kopieren damit möglichst selten, am bester gar nicht, aus Flash 
nachgeladen werden muss?

3)
Kann Code direkt aus SDRAM ausgeführt werden, oder muss hier auch erst 
von SDRAM zum internen SRAM kopiert werden?



Zu diesen Fragen konnte ich bisher keine Erklärung für Dummyes finden im 
Web finden.
Kennt jemand ein Link zu dem Thema? Ein Buch?

Grüsse
mark

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

1) Ja, der µC führt den Code direkt aus dem Flash aus.

Bei µCs mit sehr hoher Taktfrequenz (>> 50 MHz) allerdings ist das Flash 
dafür zu langsam, und dort wird daher üblicherweise im RAM gearbeitet - 
was natürlich ausreichend großes RAM voraussetzt. Das aber passiert 
nicht automatisch, sondern muss vom Programm selbst erledigt werden.

2) Diese Konstruktion (ext. Flash per SPI) dient in der Tat dazu, 
Programme aus dem Flash ins RAM zu kopieren. Ein direktes Abarbeiten aus 
dem Flash ist hier nicht möglich.

3) Wenn der µC einen SDRAM-Controller hat, dann verhält sich SDRAM 
weitestgehend so wie das interne SRAM. "Weitestgehend", da es i.d.R. 
langsamer ist und daher mit Waitstates angesteuert wird. Das interne 
SRAM hingegen kann mit vollem Prozessortakt betrieben werden, und 
deswegen werden geschwindigkeitsrelevante Teile durchaus auch bei so 
einer Konstellation aus dem SRAM ausgeführt.

Die Punkte 2 und 3 aber sind nur für größere µCs mit Taktfrequenzen >> 
50 MHz relevant.

Auf größeren ARMen (wie ARM9 oder Cortex-M4) also ja, auf kleinen ARMen 
(ARM7-TDMI oder Cortex-M0) oder kleineren Architekturen wie AVR, MSP430, 
MSC-51 hingegen nicht.

von MCUA (Gast)


Lesenswert?

Es gibt alle möglichen Varianten der Ausführung. Das hängt von konkreten 
uC ab.

von Mark O. (maolimu77)


Lesenswert?

Danke!
Gibt es dazu eine gute Einstiegslektüre, irgend ein empfehlenswertes 
Buch?
Vielleicht etwas das die verschiedenen Architekturen (PIC, ARM 7, ARM 9, 
ARX Cortex X, usw) und deren Besonderheiten skizziert?

von Naseweis (Gast)


Lesenswert?

Hi, die Zugriffsarten auf den Speicher, sei es nun Flash, embedded oder 
extern, sowie RAM und SDRAM hängen typischerweise NICHT von der 
Prozessorarchitektur sondern vielmehr von der Implementierung des 
Herstellers ab. Der Prozessor greift im wesentlichen auf eine Adresse zu 
und erwartet dort ausführbaren Programmkode oder Daten. Ob diese im RAM, 
Flash oder sonstwas stehen, ist dem Prozessor in diesem Moment "egal". 
Grundsätzlich will der Prozessor, im wesentlichen auch unabhängig von 
der Architektur, auf wahlfreienzugriffsspeicher ( random access memory ) 
zugreifen. Dies bedeutet im ersten Ansatz nur, dass der Speicher nicht 
seriell organisiert ist, wie Beispielsweise NAND-Flash oder Speicher der 
über eine serielle Schnittstelle angeschlossen ist. Deshalb kann, 
pauschal gesagt, ein Prozessor nicht direkt Programm aus NAND-Flash 
ausführen, sondern muß dieses erst in einen geeigneten Speicher, z.B. 
SRAM oder SDRAM kopieren. Und ja, es gibt Ausnahmen. Aus genannten 
Gründen biete sich an, einen bestimmten µC aussuchen und dort die Arten 
des Speicherzugriffs zu studieren.

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.