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
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
/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.
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
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"
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.
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
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
> 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.
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.
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
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
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
gibt auch das motorola 68000 und intel 8080 interface für LCDs Das meinte er vermutlich das I80 ist scheinbar verbreiteter
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 ....
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)
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
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
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 ?
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.
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
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.
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
Thomas Z. schrieb: > Ist dir klar, dass bei SRams die > Adressverdrahtung komplett egal ist? Anmerkung: Das gilt auch für die Datenleitungen. :-)
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?
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.