Forum: Mikrocontroller und Digitale Elektronik Theoretische Überlegung: Was bringt externer, seriell angebundener SRAM?


von Max M. (maxmicr)


Lesenswert?

Guten Abend,

eine theoretische Frage:

Bei Mouser findet man externes SRAM bis zu 1Mbit, das sich über SPI 
ansprechen lässt.
Meine Frage ist nun, wofür man das genau benötigen könnte?

Klar, wenn der Controller selbst zu wenig RAM hat. Aber das Problem ist 
doch viel eher, wie man dieses externe RAM per SPI in den eigenen Code 
einfügt ohne Handstände machen zu müssen?

Ich bezweifle, dass sich ein C-Compiler dazu überreden lässt, das 
externe SRAM in den Controller-Eigenen Speicherbereich einzubinden und 
dann automatisch (SPI)-Lese- und Schreibvorgänge auszuführen, sollte auf 
Variablen im externen SRAM zugegriffen werden (lesend oder schreibend - 
je nach dem).

D.h. rein praktisch gesehen lässt sich externes SRAM nur für große, 
aneinanderhängende Daten verwenden (z.B. große Arrays oder Strukturen), 
sehe ich das richtig?

Alles andere würde nach meiner kurzsichtigen Denkweise keinen Sinn 
machen, ein Beispiel:

Für eine uint8_t Variable müsste ich mir im Controller die (je nach 
externem SRAM) 20-bit lange Adresse merken, was natürlich viel mehr 
Platz benötigt, als die Variable gleich im internen RAM abzulegen.

Für ein großes Array oder eine große Struktur merke ich mir dann nur die 
Startadresse und die Länge und lese das sukzessive aus dem externen SRAM 
aus.

Oder hab ich da etwas komplett falsch verstanden?

Mehr Sinn würde externes RAM machen, dass man über eine eigene 
Peripherie, die der Controller schon mitbringt, parallel ansteuern kann 
und für das Compiler auch Unterstützung mitbringen.

von Jens (Gast)


Lesenswert?

Max M. schrieb:
> Ich bezweifle, dass sich ein C-Compiler dazu überreden lässt, das
> externe SRAM in den Controller-Eigenen Speicherbereich einzubinden

Dafür braucht's den Compiler auch gar nicht. Der Controller bildet 
diesen externen Speicherbereich auf seinen adressierbaren Speichrbereich 
ab und regelt den Zugriff transparent. Schau dir 'mal das QSPI-Interface 
bei den großen STM32-Controllern an.

Jens

von Frank K. (fchk)


Lesenswert?

Max M. schrieb:

> D.h. rein praktisch gesehen lässt sich externes SRAM nur für große,
> aneinanderhängende Daten verwenden (z.B. große Arrays oder Strukturen),
> sehe ich das richtig?

ja.

> Mehr Sinn würde externes RAM machen, dass man über eine eigene
> Peripherie, die der Controller schon mitbringt, parallel ansteuern kann
> und für das Compiler auch Unterstützung mitbringen.

Auch das wurde bereits vor über 50 Jahren erfunden. Die meisten 
Mikrocontroller haben allerdings keinen externen Adress-/Datenbus - die 
sind darauf optimiert, dass alles intern ablaufen kann. Da muss man dann 
eben einen auswählen, der die eigenen Bedürfnisse abdeckt.

fchk

von Gerd E. (robberknight)


Lesenswert?

Typisches Beispiel wo sowas Sinn machen kann:

Du hast einen schnellen, seriellen ADC und willst mit dem eine kurze 
Zeitspanne sampeln und die Daten dann hinterher aufwendiger auswerten. 
Der µC hat dafür meist nicht das nötige RAM und nicht die Leistung um 
das live zu machen. Dann kannst Du zuerst die Daten vom ADC direkt ins 
serielle RAM schieben und dann hinterher in aller Ruhe auswerten.

Natürlich wäre ein µC oder FPGA mit (DDR-)DRAM schöner, aber oft auch 
deutlich größer und aufwendiger.

von Thomas E. (thomase)


Lesenswert?

Ich habe mir damit einen Analyzer gebaut. Dabei werden 8-Bit-Daten mit 
einem Latch abgetastet und mit bis zu 10MHz in 8 parallele SPI-RAMs 
geschrieben. Ein AVR kümmert sich dabei um die Triggerung und schiebt 
die Daten, nachdem eine Sequenz eingelesen ist, per UART an einen PC, 
der sie dann in aller Ruhe mit seiner Core-I-Power anzeigen und 
auswerten kann. Der große Vorteil der SPI-RAMs gegenüber normalen 
statischen RAMs ist, daß die Adressen automatisch inkrementiert werden.

von Falk B. (falk)


Lesenswert?

Thomas E. schrieb:
> Ich habe mir damit einen Analyzer gebaut. Dabei werden 8-Bit-Daten mit
> einem Latch abgetastet und mit bis zu 10MHz in 8 parallele SPI-RAMs
> geschrieben. Ein AVR kümmert sich dabei um die Triggerung und schiebt
> die Daten, nachdem eine Sequenz eingelesen ist, per UART an einen PC,
> der sie dann in aller Ruhe mit seiner Core-I-Power anzeigen und
> auswerten kann. Der große Vorteil der SPI-RAMs gegenüber normalen
> statischen RAMs ist, daß die Adressen automatisch inkrementiert werden.

Naja, nette Spielerei und wahrscheinlich in ASM. Aber 10 MBit RAM kriegt 
man als DRAM deutlich kleiner und einfacher. Die pappt man an den 
passenden Controller mit exterer Speicherschnittstelle und gut.

Beitrag "Re: Viel RAM am kleinen Controller"

von Max M. (maxmicr)


Lesenswert?

Falk B. schrieb:
> Die pappt man an den passenden Controller mit exterer
> Speicherschnittstelle und gut.

Die AtXmega sind glaub ich eher die Ausnahme als die Regel wenn es um 
ein Interface für externen Speicher geht.
Normalerweise muss man da eher in Richtung M4 schauen, normale 8bitter 
haben sowas nicht.

von Markus (Gast)


Lesenswert?


von Max M. (maxmicr)


Lesenswert?

Da wird anscheinend eine eigene malloc Funktion "psmalloc" verwendet.
Könnte man so nicht auch vorgehen, über eine eigene malloc funktion?
Ich verstehe nicht, warum man die "MMU" vom ESP32, die mit dem SRAM 
kommuniziert, nicht auch in Software nachbauen kann?

von Walter T. (nicolas)


Lesenswert?

Andere Variante: Wenn das SRAM als Ebenen-Puffer für ein Display dient. 
Oft kann man dann - ohne die Daten nochmal über den µC zu leiten - die 
Pixel dann direkt vom SRAM ins Display takten.

von Thomas E. (thomase)


Lesenswert?

Falk B. schrieb:
> Naja, nette Spielerei und wahrscheinlich in ASM.

Ja sicher. Aber ASM? Ich? Steht das SM nicht für Saso Mado oder so 
ähnlich? Und das A für Analog ohne og?

von georg (Gast)


Lesenswert?

Max M. schrieb:
> Normalerweise muss man da eher in Richtung M4 schauen, normale 8bitter
> haben sowas nicht.

eZ80 z.B. schon, und alle wirklich alten 8bit-CPUs. Allerdings nur 64k, 
aber das konnte man im vorigen Jahrtausend schon erweitern.

Was man für normal hält ist natürlich rein subjektiv.

Georg

von Uwe D. (monkye)


Lesenswert?

Habe ich verwendet für:
- Messwertpuffer und späteres Übertragen per Draht/Funk
- Bildschirmpuffer
- Puffer für ein kleines Webinterface
- Dynamischen Puffer für Updates: per X- bzw. Y-Modem hochladen und 
danach optional ins EEPROM

Unterbau ist fast immer ein kleiner ATMega.

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.