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
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.
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.
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
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.
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?
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?
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.
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.
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?
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
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?
@ 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.
@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!
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?
@ 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.
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?
@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.