Forum: Mikrocontroller und Digitale Elektronik DRAM - SRAM Frage


von Michael H. (morph1)


Lesenswert?

He Leute,

ich schreibe zwar hier schon länger mit, musste aber bislang noch keine 
Frage stellen :) Steinigt mich also nicht falls ich einen alten Beitrag 
dazu nicht mit der Suche finden konnte ;)

Zum Problem: Eine neue Mikrocontroller-Serie wird zwar mit MMU geliefert 
und MIPS-Kern, hat aber on-board keinen DRAM Controller. Die vorhanden 
External Bus Interface genannte Schnittstelle kann nur mit SRAM umgehen.

Kann ich bei DRAM den Refresh manuell anstossen? Und wenn ja, weiß einer 
verständliche Seiten wo man dazu was raufinden kann?

Oder gibts gar eigenständige Controller die eine Art SRAM - DRAM 
Umsetzung machen? Also gleich den Refresh etc übernehmen?

Musste bislang noch nie externes RAM anbinden, es würde sich dann aber 
die Möglichkeit bieten auf dem Prozessor ein Linux auszuführen, was bei 
den integrierten 512kB RAM eher nicht umsetzbar ist.

von klausr (Gast)


Lesenswert?

Du könntest ein PSRAM verwenden ->
http://de.wikipedia.org/wiki/Pseudostatisches_RAM

von (prx) A. K. (prx)


Lesenswert?

Michael H. schrieb:
> Kann ich bei DRAM den Refresh manuell anstossen? Und wenn ja, weiß einer
> verständliche Seiten wo man dazu was raufinden kann?

Hast du einen zyklisch per Timer anstossbaren DMA-Kanal frei?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Es gab mal Mischwesen namens PSRAM - PseudeSRAM der sich intern um den 
Refresh kümmerte, nach außen aber ein SRAM-Zugriff gestattete.

DRAM unterscheidet sich ja nicht nur durch die Refreh-Bedingung, sondern 
der Zugriff ist anders. DRAM möchte Spalten- und Zeilenadressen über die 
gleichen Adressleitungen serviert.
http://de.wikipedia.org/wiki/Dynamic_Random_Access_Memory

SDRAM geht noch weiter in den Ansteuerprotokollen.
http://en.wikipedia.org/wiki/Synchronous_dynamic_random-access_memory

DRAM/SDRAM-Controller gibt es schon, aber die drüften nicht billig sein.
Habe aber schon des öfteren hier im Forum von geglückten Versuchen 
gelesen SDRAM direkt am Controller zu betreiben.
Dann ist die Ansteuerung aber nicht mehr Transparent genug für Linux.

von Michael H. (morph1)


Lesenswert?

Danke für die Hinweise, werd mich da mal einlesen :)

Irgendwie find ich die Entscheidung auf DRAM zu verzichten ziemlich 
daneben (restliche CPU 32bit MIPS Architektur 200Mhz), aber man muss 
halte nehmen was einen geboten wird.

Entweder kommt da bis zum echten Release noch was nach oder ich muss 
wirklich ins ARM-Lager wechseln. Im Moment komm ich gut ohne OS aus, 
aber je mehr Peripherie dazukommt umso bequemer scheint mir das Konzept 
zu werden.

von Michael H. (morph1)


Lesenswert?

A. K. schrieb:
> Michael H. schrieb:
>> Kann ich bei DRAM den Refresh manuell anstossen? Und wenn ja, weiß einer
>> verständliche Seiten wo man dazu was raufinden kann?
>
> Hast du einen zyklisch per Timer anstossbaren DMA-Kanal frei?

Müsste sich machen lassen, muss man dann wirklich den kompletten Inhalt 
einlesen und wieder zurückspielen? Das macht doch eine ungeheure Buslast 
ohne wirklichen Nutzen.

Dachte immer das Konzept wäre eher so, dass man den Refresh von außen 
triggert und dann halt für die Dauer diese Zeilen/Spalten nicht für 
Schreibzugriffe nutzen kann.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Michael H. schrieb:
> Müsste sich machen lassen, muss man dann wirklich den kompletten Inhalt
> einlesen und wieder zurückspielen?

Nein, es geht nur um "Wackeln" an den Adressleitungen. Und hier sind die 
physikalischen Adressleitungen gemeint, also die, die bereits die 
gemultiplexte Information tragen.

Sieh Dir im Datenblatt eines DRAMs mal die Beschreibung der 
Refresh-Zyklen an.

Bedenke allerdings, daß DRAMs ziemlich langsam sind, und bedenke, daß 
die schon lange nicht mehr verwendet werden. Üblich sind mittlerweile 
Varianten von SDRAMs (das "S" steht für "synchronous"), die ein deutlich 
aufwendigeres getaktetes Protokoll zur Ansteuerung verwenden.

Die Ansteuerung davon solltest Du mit einem FPGA o.ä. erledigen; ich 
nehme stark an, daß sich da auch schon fertige Designs finden lassen 
sollten.

Klassische DRAMs wurden in PCs bis etwa Mitte der 90er Jahre verwendet, 
als letzte Inkarnation in Form von EDO- bzw. FPM-DRAMs. Alles, was 
danach kam, war SDRAM, bzw. SDRAM mit gesteigerter Datenrate (DDR-SDRAM 
etc.).

von ... (Gast)


Lesenswert?

Da gibts noch ne Sache an die du eventuell denken solltest. Der 
wahlfreie Zugriff bei SRAM ist ja ziemlich fix. Bei SDRAM ist es soweit 
ich festgestellt hab nur schnell, wenn die CPU die Daten als Block liest 
und intern einen Cache hat. Der LPC2468 kann z.B. SDRAM ansteuern, hat 
aber als ARM7 keinen Cache und ist richtig langsam. Ein ARM9 mit 
internem Cache ist bedeutend performanter mit SDRAM, z.B. der 
AT92SAM9G20. Da gibts z.B. kleine Module mit Flash und SDRAM von TaskIt 
für wenig Geld zu kaufen.

von ... (Gast)


Lesenswert?

PS: es sollte AT91SAM9G20 heißen

von 6A66 (Gast)


Lesenswert?

Michael H. schrieb:
> Müsste sich machen lassen, muss man dann wirklich den kompletten Inhalt
> einlesen und wieder zurückspielen? Das macht doch eine ungeheure Buslast
> ohne wirklichen Nutzen.

Hallo Michael,

Das refreshen ohne Controller geht problemlos, du musst jedoch in der 
Refres-routine in der Refresh-zeit einmal an allen Zeilen lesend 
vorbeigekommen sein (ich denke ich hab da 16ms für 1k Zeilen im 
Hinterkopf, das wäre dann etwa 16us pro Zeile). Die Werte drüften sich 
nicht verändert haben. Das läßt sich SW-technisch einfach machen, kostet 
<5% Performache Overhead und benötigt keine HW.

rgds

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.