Forum: Mikrocontroller und Digitale Elektronik SDRAM LDQM & UDQM


von Dennis X. (Gast)


Lesenswert?

Hallo zusammen,
ich hab grad so einen kleinen Knoten im Kopf.
Ich hab ein SDRAM (AS4C16M16SA) und einen Mikrocontroller STM32F746 im 
144 Pin Gehäuse.
Das Ding ist, aufgrund anderer Beschaltung kann ich nur 8 Datenbits 
fahren. Heißt ich hab zwar alle 13 Adressleitungen angeschlossen aber 
eben nur 8 Bit an Daten. Das SDRAM hat jedoch noch die 16-Bit Byte 
Enable Leitungen LDQM und UDQM, welche ich nun am Mikrocontroller nicht 
mehr nutzen kann.
Wie sieht der Workaround aus damit das alles trotzdem klappt? Ich habe 
dieses RAM da und würde es eben auch gerne verwenden.

Grüße
Dennis

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmm. Auf (unterschiedlichen) festen Pegel legen und nur eine Hälfte des 
Speichers verwenden?

Oder gegebenenfalls aus einer zusätzlichen Adressleitung erzeugen, 
einmal invertiert, einmal nicht invertiert, und untere und obere Hälften 
des Datenbusses miteinander verbinden.

So, wie ich das Datenblatt (und das Timingdiagramm auf S. 47) 
interpretiere, scheint HIGH-Pegel auf den xDQM-Leitungen den zugehörigen 
Ausgangstreiber im Tristate zu lassen, aber ... ich kenn mich mit SDRAMs 
nicht aus, daher sind das natürlich nur Vermutungen.

von Dennis X. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Hmm. Auf (unterschiedlichen) festen Pegel legen und nur eine Hälfte des
> Speichers verwenden?

Ja genau auf sowas will ich hinaus. Aber gerne würde ich das einmal 
hören dass da so funktioniert. So richtig schlau draus werd ich da aus 
der Datenblatt nämlich nicht.
Im stmcubemx heißen eben diese beiden Pins 16 Bit Byte enable. Wenn ich 
den haken setz und die Pins frei sind so hab ich genau die beiden 
Leitungen.

von Georg (Gast)


Lesenswert?

Dennis X. schrieb:
> Wie sieht der Workaround aus damit das alles trotzdem klappt?

A13 invertiert und nichtinvertiert an die DQMs anschliessen und D0 mit 
D8 usw. verbinden müsste klappen - die DQM-Signale werden zum gleichen 
Zeitpunkt gelatcht wie die oberen Adressen, also auf die Verzögerung 
achten.

Georg

von Sigi (Gast)


Lesenswert?

Falls es hilft: Ich habe ein FPGA-Board mit DDR-SODIMM-Sockel,
bei dem nur 32 Data-Bits zum FPGA geführt werden, die restlichen
Signale für die "oberen 32-Bits" (Daten- als auch Masken-Bits)
sind NC. Es funktioniert problemlos, allerdings hätte ich die
ungenutzten Maskenbits etc. mit Pullups versehen.
Auf dein SDRAM-Problem übertragen heisst also, LDQM zu nutzen
und UDQM auf High ziehen. Für die unteren 8 Bits sind die oberen
8 Bits ja irrelevant.

von Dennis X. (Gast)


Lesenswert?

Sigi schrieb:
> LDQM zu nutzen und UDQM auf High ziehen. Für die unteren 8 Bits sind die
> oberen 8 Bits ja irrelevant.

Also wie schon vorgeschlagen dann (invertiert) mit der 13. Adress 
Leitung zu verbinden?

von Sigi (Gast)


Lesenswert?

Falls dir die halbe Kapazität reicht:
Einfach UDQM=HIGH und D8..D15 NC.

Mir ist nicht ganz klar, was mit der
13. Adresssignal und dem Invertieren
gemeint ist. Soll damit zwischen
unteren und oberen 8-Bits geschaltet
werden?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sigi schrieb:
> Soll damit zwischen
> unteren und oberen 8-Bits geschaltet
> werden?

Genau das. Dann kann die gesamte Kapazität des SDRAMs verwendet werden; 
es müssen allerdings beide Hälften des Datenbusses zusammengelegt 
werden.

von Dennis X. (Gast)


Lesenswert?

Also dann im Prinzip LDQM mit a12 verbinden. UDQM mit !a12 verbinden und 
dann eben D8 mit D0, D9 mit D1...
Ist da so korrekt?weniger Speicher hab ich dadurch natürlich auch. Ist 
auch nicht unbedingt notwendig alles zu benutze.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dennis X. schrieb:
> LDQM mit a12 verbinden. UDQM mit !a12 verbinden und dann eben D8 mit D0,
> D9 mit D1... Ist da so korrekt?

So ist's gedacht.

> weniger Speicher hab ich dadurch natürlich auch.

Äh, wieso das?

von Georg (Gast)


Lesenswert?

Dennis X. schrieb:
> Also dann im Prinzip LDQM mit a12 verbinden. UDQM mit !a12 verbinden und
> dann eben D8 mit D0, D9 mit D1...

NEIN! Nicht A12, das liegt ja schon am Memory an, sondern mit der ersten 
nicht verwendeten Adresse, also A13. Halbe Datenbreite, dafür doppelter 
Adressbereich, ist das so schwierig?

Georg

von Sigi (Gast)


Lesenswert?

Georg schrieb:
> Halbe Datenbreite, dafür doppelter
> Adressbereich, ist das so schwierig?
Ohne Terminierungen nicht, aber was passiert
bei Terminierungen?
Der Ansatz klappt problemlos bei SRAMs,
bei DDRs sicher nicht. Hast du das man
bei SDR-SDRAMs gemacht?

von Falk B. (falk)


Lesenswert?

@ Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite

>Hmm. Auf (unterschiedlichen) festen Pegel legen und nur eine Hälfte des
>Speichers verwenden?

Die einfache Lösung.

>Oder gegebenenfalls aus einer zusätzlichen Adressleitung erzeugen,
>einmal invertiert, einmal nicht invertiert, und untere und obere Hälften
>des Datenbusses miteinander verbinden.

Vergiss es! Das klappt so nicht!

>So, wie ich das Datenblatt (und das Timingdiagramm auf S. 47)
>interpretiere, scheint HIGH-Pegel auf den xDQM-Leitungen den zugehörigen
>Ausgangstreiber im Tristate zu lassen,

Ja. Ebenso wird damit auch ein Schreibzugriff ignoriert.

Beitrag "Re: Viel RAM am kleinen Controller"

Das könnte auch beim STM32 klappen, damit hat man 2 Seiten Speicher.

von Falk B. (falk)


Lesenswert?

@Georg (Gast)

>A13 invertiert und nichtinvertiert an die DQMs anschliessen und D0 mit
>D8 usw. verbinden müsste klappen - die DQM-Signale werden zum gleichen
>Zeitpunkt gelatcht wie die oberen Adressen, also auf die Verzögerung
>achten.

Nein, das klappt nur bei einfachem SRAM! SDRAM hat einen gemuxten 
Adressbus, da klappt das NICHT!

von Dennis X. (Gast)


Lesenswert?

Georg schrieb:
> NEIN! Nicht A12, das liegt ja schon am Memory an, sondern mit der ersten
> nicht verwendeten Adresse, also A13

Der stm33f7 hat maximal 13 adress Leitungen. Da ich alle 13 am sdram 
haben wollte hab ich das auch aktuell so gemeint.
Wenn ich jetzt einfach sag ich verzichte auf etwas Speicher dann kann 
ich die DQMs fest verschaltet und alle 13 adress Leitungen an das RAM 
fahren. Warum muss ich dann aber die Datenleitungen beschalten?

von Falk B. (falk)


Lesenswert?

@ Dennis X. (debegr92)

>Der stm33f7 hat maximal 13 adress Leitungen. Da ich alle 13 am sdram
>haben wollte hab ich das auch aktuell so gemeint.

Ist OK.

>Wenn ich jetzt einfach sag ich verzichte auf etwas Speicher

Die Hälfte.

> dann kann
>ich die DQMs fest verschaltet und alle 13 adress Leitungen an das RAM
>fahren.

Richtig.

> Warum muss ich dann aber die Datenleitungen beschalten?

Musst du nicht. Durch das inaktive DQM bleiben die im Tristate und gut.

von Dennis X. (Gast)


Lesenswert?

Falk B. schrieb:
>> dann kann
>>ich die DQMs fest verschaltet und alle 13 adress Leitungen an das RAM
>>fahren.
>
> Richtig.

Und wie ich die verschalte ist im Prinzip auch Wurst, wichtig nur nicht 
beide den gleichen Pegel?

von Falk B. (falk)


Lesenswert?

@Dennis X. (debegr92)

>>ich die DQMs fest verschaltet und alle 13 adress Leitungen an das RAM
>>fahren.
>

>Und wie ich die verschalte ist im Prinzip auch Wurst, wichtig nur nicht
>beide den gleichen Pegel?

NEIN! Man muss sich schon richtig verschalten! die DQMs sind LOW ACTIVE, 
d.h. das entsprechende Signal der genutzten Bushälfte muss fest mit LOW 
verbunden werden und das der ungenutzten Bushälfte mit HIGH.

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.