Hallo in die Entwicklergemeinde,
ich habe folgendes Problem: An einem I2C Bus habe ich einen EEPROM
hängen. I2C Adressbereich 0x50 - 0x57. Nun hätte ich an dem gleichen Bus
einen weiteren EEPROM gehängt. Überraschung: Nun brauche ich ein
weiteres EEPROM, welches nicht auf diesen Adressbereich hängt. Als ich
mit der Suche startete, dachte ich, so groß kann das Problem ja nicht
sein. Vor allem bei den 2kByte Speichern würde es sich ja anbieten, die
Adresspins (hier nicht genutzt) für das setzen der DeviceID (oberen 3Bit
der Slave Addresse zu nutzen). Leider fehlanzeige, so ein EEPROM habe
ich nicht gefunden.
Nun zur Frage kennt jemand ein EEPROM welches nicht auf dem
Adressbereich 0x50-0x57 hängt?
Ansonsten bestünde noch die Möglichkeit einen Adressübersetzungschip von
Linear zu nutzen: http://www.linear.com/product/LTC4316
Vielen Dank für eure Hilfe!
Normalerweise haben EEPROM's 3 Adress-Eingänge A0..A2, somit kann man 8
EEPROM's parallel an einem Bus anschließen, indem man jedem EEPROM seine
eigene Adresse gibt.
Zeige mal das Datenblatt von Deinem EEPROM.
Sollte Dein EEPROM nicht diese Adress Eingänge haben, dann suche Dir ein
anderes aus das diese hat.
Joe F. schrieb:> Warum nicht einfach 1 größeres, pinkompatibles (8K) EEprom statt 3> kleine?
Ganz einfach: dann braucht man ein Adressbyte mehr im Protokoll.
Dieter W. schrieb:> Ganz einfach: dann braucht man ein Adressbyte mehr im Protokoll.
Ja und? Ist das Problem dass es dann zu viel Zeit braucht?
Dann nehme lieber ein SPI EEPROM, das kann mit mehreren MHz getaktet
werden.
Ein Dataflash kann 16MByte...
Gallioleo schrieb:> Nun zur Frage kennt jemand ein EEPROM welches nicht auf dem> Adressbereich 0x50-0x57 hängt?
Du verwendest wahrscheinlich ein 24*02. Nimm statt dessen ein 24*025,
und Dein Problem ist gelöst.
* ist AA,LC,C
fchk
Frank K. schrieb:> Du verwendest wahrscheinlich ein 24*02. Nimm statt dessen ein 24*025,> und Dein Problem ist gelöst.
Nein, Leider nicht. Sonst wäre ich ja schon längst fertig :D. Es handelt
sich um 2kByte, also sprich 16kbit. Den 24*16 Type habe ich schon
verbaut. Daher ist ja der Adressraum 0x50-0x57 (7Bit Adr) voll und ich
Suche nach Alternativen :-)
Viele Grüße und schon mal besten Dank für die rege Diskussion.
Gallioleo schrieb:> Frank K. schrieb:>> Du verwendest wahrscheinlich ein 24*02. Nimm statt dessen ein 24*025,>> und Dein Problem ist gelöst.>> Nein, Leider nicht. Sonst wäre ich ja schon längst fertig :D. Es handelt> sich um 2kByte, also sprich 16kbit. Den 24*16 Type habe ich schon> verbaut. Daher ist ja der Adressraum 0x50-0x57 (7Bit Adr) voll und ich> Suche nach Alternativen :-)>> Viele Grüße und schon mal besten Dank für die rege Diskussion.
Ich verstehe das Problem nicht. Du kannst doch 8 EEproms eines Typs
parallel an den Bus hängen. Du musst doch nur jedem Chip eine andere
Adresse geben. Dafür sind die 3 Adressbits doch da.
EEProm schrieb:> Du musst doch nur jedem Chip eine andere> Adresse geben. Dafür sind die 3 Adressbits doch da.
Ja, ich glaube auch, dass du das mit den Adressen noch nicht ganz
verstanden hast.
Adressbereich 0x50 - 0x57 heisst, dass du jedem EEprom dieses Typs
eine von diesen 8 möglichen Adressen per Beschaltung der externen
Adresspins zuweisen kannst.
Ein EEprom belegt also nicht alle 8 Adressen, sondern nur eine davon.
Update:
Oha. Mein Fehler.
Gibt wohl Devices, die intern einen "Block select" über die Adresse
machen, und dann tatsächlich alle 8 Adressen belegen.
Schweinerei... ;-)
>Ja, ich glaube auch, dass du das mit den Adressen noch nicht ganz>verstanden hast.
Hat er nicht.
>Adressbereich 0x50 - 0x57 heisst, dass du jedem EEprom dieses Typs>eine von diesen 8 möglichen Adressen per Beschaltung der externen>Adresspins zuweisen kannst.>Ein EEprom belegt also nicht alle 8 Adressen, sondern nur eine davon.
Diese Adresspins sind bei den 2k Dingern unused.
Die Teile sind quasi 8 256Byte EEPROMs in einem.
Ich habe mal I2C EEPROMs mit anderer Adresse als 0x50 gesehen,
aber das waren Exoten. Nimm einen größeren.
Eigentlich sollten verschiedene Aufgaben verschiedene Adressbereiche
haben. Z.B. Speicher bei 0x5X, so dass man 8 verschiedene Speicher
(verschiedener Module) auslesen kann. Die "Sondernutzung", dass 8
Speicher vereint sind um die Adressierung zu verkürzen ist quasi schon
ein abuse. Und zahllose Speichervarianten mit anderer (hardwired)
Adresse würden den Busgedanken ad absurdum führen. Wenn man so eine
fremde Hardware scannt, kann man meist viele Adressen schon direkt
auslesen (4 Speicher: Gib doch mal alles ab Adresse 0 aus und schaue was
drinn steht. 2 Uhrenbausteine: Mehrmals lesen und nach den
Sekunden/millisekunden suchen)
Frank K. schrieb:> Du verwendest wahrscheinlich ein 24*02. Nimm statt dessen ein 24*025,> und Dein Problem ist gelöst.
Der hilft auch nicht. Die Bausteinadresse ist ebenfalls 1010A2A1A0.
Alternativ wäre noch der Einsatz eines Bus-Multiplexers denkbar. PCA9544
bzw. TCA9544 (nebenbei machen die noch Level-Tanslation von 1,8V bis 5V
Vcc)
Gallioleo schrieb:> Nein, Leider nicht. Sonst wäre ich ja schon längst fertig :D. Es handelt> sich um 2kByte, also sprich 16kbit. Den 24*16 Type habe ich schon> verbaut.
Wer zwingt Dich denn, den Sonderfall 24C16 zu benutzen?
Oben habe ich die Typen genannt, die bis zu 8 Stück am selben Bus
zulassen.
Gallioleo schrieb:> ich habe folgendes Problem: An einem I2C Bus habe ich einen EEPROM> hängen. I2C Adressbereich 0x50 - 0x57.Gallioleo schrieb:> Nein, Leider nicht. Sonst wäre ich ja schon längst fertig :D. Es handelt> sich um 2kByte, also sprich 16kbit. Den 24*16 Type habe ich schon> verbaut. Daher ist ja der Adressraum 0x50-0x57 (7Bit Adr) voll und ich> Suche nach Alternativen :-)
Bitte schreibe mal GAAANNNZZZZ genau ob es nur 1 EEPROM ist oder ob Du
schon 8 EEPROM's am Bus hängen hast!!!
Es wird endlich mal Zeit dass wir hier vollständige Informationen
erhalten, ansonsten können wir nicht helfen.
z.B. Schaltplan von allen Bausteinen am I2C Bus.
Markus M. schrieb:> Bitte schreibe mal GAAANNNZZZZ genau ob es nur 1 EEPROM ist oder ob Du> schon 8 EEPROM's am Bus hängen hast!!!
nun, er hat einen 24*16 am Bus, der die Adressen 0x50 bis 0x57 belegt
(bzw. 0xA0 bis 0xAF wenn man RW als LSB interpretiert)
Er sucht (warum auch immer) halt nicht sein Heil in
10Bit-(oder-mehr-)Adressierung, sondern hatte gehofft, ein Pendant mit
z.B. 0x60..0x67
zu finden. Frommer wunsch, aber durchaus verständlich.
Und, da er nicht der erste ist, vielleicht sogar erfüllbar.