Forum: Mikrocontroller und Digitale Elektronik Mehrere parallele SRAMs & Chipselect


von Max M. (maxmicr)


Lesenswert?

Guten Abend,

ich bin gerade auf der Suche nach einem günstigen parallen SRAM Modul.
Das Interface des Prozessors hat dafür folgende Pins:

D0-D15: Datenbus
A0-A23: Adressbus
~CS: Chipselect
~LB: Lower Byte Strobe
~UB: Upper Byte Strobe
~RD: Read Strobe
~WR: Write Strobe

Wie man sieht, kann der Prozessor theoretisch 16Mbyte ansteuern.

Mein SRAM-Modul-of-Choice (günstig beim Chinesen): EM610FV8S
Das hat leider ein etwas anderes Interface:

D0-D7: Daten
A0-A16: Adresse
~CS und CS: Komplementäre Chipselects
~OE: Output Enable
~WE: Write Enable

Fragen:

- Was mache ich mit den komplementären Chipselects? Kann man den ~CS-Pin 
des Prozessors einfach negiert als CS an das SRAM-Modul anschließen 
(falls ja: wie macht man die Negation elektronisch?)?
- Das Modul hat keinen Lower- oder Upper Byte Strobe (da es eben in 
8-Bit Blöcken organisiert ist) - das ergibt vermutlich dahingehend ein 
Problem, dass ich zwar laut Datenblatt dem Prozessor mitteilen kann, 
welche Datenbusbreite der Speicherbus hat, dieser Bus aber gleichzeitig 
auch zur Ansteuerung eines Displays verwendet werden kann - da würde ich 
wiederum gerne auf 16-Bit parallel 8080 zurückgreifen. Wie löst man 
diesen Konflikt?
-- Als Erweiterung zum 2. Punkt: 128kByte RAM wären mir eh nicht genug, 
d.h. das Problem könnte umgangen werden indem man 2 SRAM-Module 
anschließt - nur wie verwurschtel ich dann ~CS/CS mit ~LB und ~UB der 
verschiedenen Module? Also sowas wie "wenn ~CS = 0 & ~LB = 0 dann wähle 
Modul 1 an" und "wenn ~CS = 0 & ~UB = 0 dann wähle Modul 2 an"?

: Bearbeitet durch User
von Leierkastenonkel (Gast)


Lesenswert?

Max M. schrieb:

> - Was mache ich mit den komplementären Chipselects?

Schau ins Datenblatt Du D...! Seite 3, untere Tabelle, die Bemerkung in 
()!

http://pdf.eepw.com. cn/e20090825/7f7e56afeedd7d434d40bf5ebb9a63ae.pdf

von H.Joachim S. (crazyhorse)


Lesenswert?

/CS und CS können die Dekodierung vereinfachen.
Bau einen 16bit-Speicher, also 8bit upper, 8bit lower (mit jeweils 
gleichem CS)
LB und UB brauchst du dann nicht.
Ab A17 kannst du dann einen Adressdekoder anschliesen, je nachdem, 
wieviele Speicherblöcke du anschliessen willst.

von Max M. (maxmicr)


Lesenswert?

H.Joachim S. schrieb:
> Ab A17 kannst du dann einen Adressdekoder anschliesen, je nachdem,
> wieviele Speicherblöcke du anschliessen willst.

Magst du kurz erläutern, wie so etwas aussehen könnte?
Wenn A17 angewählt ist soll Modul 2 übernehmen, d.h. die Datenleitungen 
müssen dann auch von Modul 2 kommen - also brauch ich einen Multiplexer 
der A17 als Eingangssignal hat und die Datenleitungen umlegt?

H.Joachim S. schrieb:
> /CS und CS können die Dekodierung vereinfachen.

D.h. ich kann CS auch einfach mit einem Pullup auf 3.3V legen?

: Bearbeitet durch User
von Leierkastenonkel (Gast)


Lesenswert?

Max M. schrieb:

> D.h. ich kann CS auch einfach mit einem Pullup auf 3.3V legen?
Nein! RTFM!

Beitrag "Re: Mehrere parallele SRAMs & Chipselect"

von H.Joachim S. (crazyhorse)


Lesenswert?

Leierkastenonkel schrieb:
> Nein! RTFM!

Ruhig, Brauner :-)
Klar geht das.
Das Modul ist selektiert, wenn /CS=0 und CS=1.
CS dauerhaft auf 1 -> nur /CS=0 ist wirksam.

von Thomas Z. (usbman)


Lesenswert?

Max M. schrieb:
> Ansteuerung eines Displays verwendet werden kann - da würde ich wiederum
> gerne auf 16-Bit parallel 8080 zurückgreifen. Wie löst man diesen
> Konflikt?

Was ist das den ein 8080 mit 16 Bit? Da verwechselst du was.
 Geht es um einen C166? Dort kann man das Businterface auf 8 Bit laufen 
lassen. Dann kannst du deinen Speicher direkt anschließen sonst musst du 
halt Speicher mit 16Bit suchen.
Alternativ 2 Module und mit upper und lower strobe selktieren
Thomas

: Bearbeitet durch User
von Max M. (maxmicr)


Lesenswert?

H.Joachim S. schrieb:
> Klar geht das.

Danke

Thomas Z. schrieb:
> Was ist das den ein 8080 mit 16 Bit? Da verwechselst du was.

Das ist meines Wissens nach eine gängige Beschreibung für ein paralleles 
Interface zum Ansteuern von Displays (8-Bit oder 16-Bit). Aber eventuell 
verwechsel ich da tatsächlich etwas?

Thomas Z. schrieb:
> Geht es um einen C166?

Nein, es geht um einen MT6502.

Thomas Z. schrieb:
> Dort kann man das Businterface auf 8 Bit laufen
> lassen.

Warum sollte ich das machen, wenn ich das Display so schnell wie möglich 
ansteuern möchte (was mit 16-Bit am besten klappt)?

Thomas Z. schrieb:
> Alternativ 2 Module und mit upper und lower strobe selktieren
> Thomas

Ich komm nicht ganz mit ehrlich gesagt.
Wenn ich 2 dieser genannten Module habe, dann wäre meine Idee gewesen:

D0-D7 an Modul 1
D8-D15 an Modul 2
A0-A16 an Modul 1 und Modul 2
CS mit Pullup auf 3.3V
~CS an Modul 1 und Modul 2
~RE und ~WE auch an Modul 1 und Modul 2
~UB und ~LB offen lassen

Im Prozessor gibt es ein Register-Flag mit dem man einstellt, welche 
Busbreite man verwendet. Es wird konkret erwähnt, dass dann in mehreren 
Zyklen der Arbeitsspeicher geladen wird (es handelt sich um einen 32-Bit 
ARM-Kern).

Aber andererseits frage ich mich: wozu die UB und LB Leitungen wenn der 
Prozessor eh weiß, wie viele Bits der RAM hat?
Ich hab mir mehrere SRAM Module angesehen und die mit 16-Bit organisiert 
waren hatten ebenfalls die ~UB/~LB Pins - also eventuell um damit 
kompatibel zu sein?

: Bearbeitet durch User
von Helmut S. (helmuts)


Lesenswert?

> Aber andererseits frage ich mich: wozu die UB und LB Leitungen wenn der
Prozessor eh weiß, wie viele Bits der RAM hat?

Damit man auch ein einzelnes Byte schreiben kann.

von foobar (Gast)


Lesenswert?

Ich weiß nicht, wie es bei dem Proz ist, aber UB/LB werden üblicherweise 
benutzt, um Byteweise auf einem 16-Bit-Bus schreiben/lesen zu können. 
Entsprechenden werden UB/LB an die unbenutzten zusätzlichen CS-Pins 
angeschlossen.

von Thomas Z. (usbman)


Lesenswert?

Bei einem echten 16 Bit Interface fehlt A0. Es werde immer 16 Bit an 
D0..D15 ausgegeben.  Bei 2 8 Bit RAMs  A1...Ax am Ram auf A0..Ax-1. A0 
von der CPU geht am Ram auf !CS am andern RAM auf CS eventuell noch über 
einen Adressdekoder. Achtung Setup Zeiten berücksichtigen. So hab ich 
das immer gemacht.
Das Timing sollte aber auch im Datenblatt zu finden sein.

Thomas

von Gustl B. (gustl_b)


Lesenswert?

Man kann auch zwei RAMs mit je 16 Adressleitungen nehmen, die auch beide 
an die Leitungen A0 bis A15 hängen und A16 wird dann das CS.

Man braucht sich auch keine Gedanken um die Polarität von CS machen denn 
egal wie, A16 ist einmal low und einmal high für die beiden Hälften des 
Adressbereichs. In einem der beiden RAM Steine landen also immer Daten. 
In welchem der beiden ist uninteressant.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Max M. schrieb:
>> Was ist das den ein 8080 mit 16 Bit?
> Das ist meines Wissens nach eine gängige Beschreibung für ein paralleles
> Interface zum Ansteuern von Display

Der 8080 ist einer der ersten 8bit Mikroprozessoren von Intel. 
https://en.wikipedia.org/wiki/Intel_8080

von hfhd (Gast)


Lesenswert?

gibt auch das motorola 68000 und intel 8080 interface für LCDs
Das meinte er vermutlich

das I80 ist scheinbar verbreiteter

von OMG (Gast)


Lesenswert?

Max M. schrieb:
> ich bin gerade auf der Suche nach einem günstigen parallen SRAM Modul.

Wenn man schon einen 16 Bit Datenbus hat dann nimmt man doch
auch ein 16bittiges SRAM.

Spart Platz, Arbeit, Leitungen, Buskapazität und Verwirrungen ....

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Max M. schrieb:

> Wenn ich 2 dieser genannten Module habe, dann wäre meine Idee gewesen:
>
> D0-D7 an Modul 1
> D8-D15 an Modul 2
> A0-A16 an Modul 1 und Modul 2
> CS mit Pullup auf 3.3V
> ~CS an Modul 1 und Modul 2
> ~RE und ~WE auch an Modul 1 und Modul 2
> ~UB und ~LB offen lassen

Nein, /UB muss mit dem /CS des Moduls verbunden werden, das an D8--D15 
hängt und entsprechend /LB am /CS des Moduls an D0--D7.
/CS muss dann invertiert auf die beiden CS der Module geführt werden 
(wenn noch weitere Teilnehmer am Bus hängen).

Grüßle
Volker (der vor 30 Jahren mit dem MC68000 bastelte)

von Max M. (maxmicr)


Lesenswert?

Stefanus F. schrieb:
> Der 8080 ist einer der ersten 8bit Mikroprozessoren von Intel

Danke für dein Geschichtswissen, das macht meine Aussage aber nicht 
falsch.

Helmut S. schrieb:
> Damit man auch ein einzelnes Byte schreiben kann.

Okay, macht Sinn. Nur wie verschalte ich UB und LB bei einem 16Bit Block 
(bestend aus 2 Modulen)?

foobar schrieb:
> Entsprechenden werden UB/LB an die unbenutzten zusätzlichen CS-Pins
> angeschlossen.

Da ~UB und ~LB negiert sind, CS beim Modul aber nicht (~CS des Moduls 
ist ja weiterhin mit ~CS der CPU verbunden oder?) bräuchte ich wieder 
eine Negation.

Gustl B. schrieb:
> Man kann auch zwei RAMs mit je 16 Adressleitungen nehmen

Ja, könnte man.

Thomas Z. schrieb:
> Bei 2 8 Bit RAMs  A1...Ax am Ram auf A0..Ax-1. A0 von der CPU geht am
> Ram auf !CS am andern RAM auf CS eventuell noch über einen Adressdekoder

Tut mir Leid, ich verstehe deine Sätze nicht.


Was würde denn passieren, wenn ~UB und ~LB nicht angeschlossen sind? Was 
erwartet die CPU dann?

: Bearbeitet durch User
von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Max M. schrieb:

> Was würde denn passieren, wenn ~UB und ~LB nicht angeschlossen sind? Was
> erwartet die CPU dann?

Beim Lesen vermutlich kein Problem, beim Schreiben eines einzelnen Bytes 
jedoch ungültige Werte im zweiten Byte. Wenn Deine MCU keinen Zugriff 
auf einzene Bytes macht, sollte es m.E. funktionieren.

Grüßle
Volker

: Bearbeitet durch User
von Max M. (maxmicr)


Lesenswert?

Volker B. schrieb:
> Wenn Deine MCU keinen Zugriff auf einzene Bytes macht, sollte es m.E.
> funktionieren.

Hm das weiß ich natürlich nicht was der Compiler und die CPU da machen. 
Ich kenne auch nicht jeden ARMv7 Assembler-Befehl.
Ich muss das nochmal genauer durchdenken aber gegen einen kleinen 
Schaltplan hätte ich auch nichts ?

von OMG (Gast)


Lesenswert?

Unglaublich mit welcher Hartnäckigkeit hier das 8-Bit-Pferd
geritten wird.

OMG schrieb:
> Wenn man schon einen 16 Bit Datenbus hat dann nimmt man doch
> auch ein 16bittiges SRAM.

von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

Max M. schrieb:
> (...) aber gegen einen kleinen Schaltplan hätte ich auch nichts ?

Gehts noch? Selber machen und lernen!
Ich bin raus!

Grüßle
Volker

von S. R. (svenska)


Lesenswert?

Thomas Z. schrieb:
> Was ist das den ein 8080 mit 16 Bit? Da verwechselst du was.

Es geht nicht um den i8080 als Prozessor, sondern um dessen 
Businterface. Da gibt es Leitungen für /RD und /WR. Das Gegenstück dazu 
ist das Motorola-Businterface, welches diese Funktionen über /EN und 
/DIR abbildet. Die Busbreite ist nur sekundär.

OMG schrieb:
> Wenn man schon einen 16 Bit Datenbus hat dann nimmt man doch
> auch ein 16bittiges SRAM.

Oder zwei 8bittige SRAMs. Die sind vermutlich billiger.

OMG schrieb:
> Unglaublich mit welcher Hartnäckigkeit hier das 8-Bit-Pferd
> geritten wird.

Wenn der Master in der Lage ist, einzelne Bytes zu schreiben, dann muss 
die Logik dahinter das auch korrekt verarbeiten können. Sonst müsste der 
Prozessor immer einen RMW-Zugriff (Read-Modify-Write) machen, was aus 
verschiedenen Gründen doof ist.

Ein ARM7 kann Bytezugriffe.

von Thomas Z. (usbman)


Lesenswert?

Max M. schrieb:
> Tut mir Leid, ich verstehe deine Sätze nicht.

OK ich frag mal anders:

Wie hast du den Upper ,Lower und CS bei deinem Display verdrahtet? Das 
hat ja ein 16 Bit Interface. Ist dir klar, dass bei SRams die 
Adressverdrahtung komplett egal ist?
Das kann man optimieren damit es im Layout am besten passt.
Was steht im Datenblatt wann Upper Lower aktiv wird?

Thomas

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Thomas Z. schrieb:
> Ist dir klar, dass bei SRams die
> Adressverdrahtung komplett egal ist?

Anmerkung: Das gilt auch für die Datenleitungen. :-)

von Max M. (maxmicr)


Lesenswert?

Ich nehme jetzt einfach einen passenden 16bit SRAM chip.
Flash brauche ich allerdings auch noch. Bei Mouser hab ich aber keinen 
16bit parallel NOR Flash mit ~UB und ~LB Pins gesehen. Scheint da 
anscheinend nicht verbreitet zu sein.
D.h. dann bleibt nur 2x 8bit zu nehmen und dann ~CS jeweils mit ~UB und 
~LB zu ver-Und-en?

von Schorsch X. (bastelschorsch)


Lesenswert?

z.B. 29LV160 kann das...

von Mr.T (Gast)


Lesenswert?

Max M. schrieb:
> Ich nehme jetzt einfach einen passenden 16bit SRAM chip.
> Flash brauche ich allerdings auch noch.

Ab jetzt brauchst Du wohl einen Adressdekoder. Bist Du sicher, dass Du 
die Basics drauf hast? Liest sich nicht so...

Ist der µC einer mit 3.3V oder 5V Vcc bzw. falls 3.3V sind die 
angegebenen IOs dann 5V tolerant?

von Max M. (maxmicr)


Lesenswert?

Mr.T schrieb:
> Ab jetzt brauchst Du wohl einen Adressdekoder.

Warum?
Jeder 8bit Flash bekommt die selben Adressleitungen, die insgesamt 16 
Datenleitungen gehen an den Prozessor und die CS der Flashes werden mit 
UB bzw LB und dem CS des Prozessors verundet?

Schorsch X. schrieb:
> 29LV160

Danke, schau ich mir mal an.
Edit: Soweit ich das richtig sehe kann der nur 8 oder 16bit aber man 
kann nicht das hohe bzw das niedrige Byte mit einem Pin selektieren. 
Oder hab was falsch verstanden

Mr.T schrieb:
> Ist der µC einer mit 3.3V oder 5V Vcc

Weder noch. 1.8V Vcore und 2.8V Vmem

Mr.T schrieb:
> sind die
> angegebenen IOs dann 5V tolerant?

Nein, sind sie bei 2.8V Nennspannung vermutlich nicht

: Bearbeitet durch User
von hfhd (Gast)


Lesenswert?


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.