PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gibt es günstigen 32k i2c eeprom oder ram?



22.11.2004, 18:58
Hi
Gibt es günstigen 32k Eeprom oder Ram baustein der einfach per I2C oder SPI angesteuert werden kann.
Kann mir mal schnell jemand einen gebräuchlichen Typ nennen?

RCO
22.11.2004, 19:03
https://www.roboternetz.de/phpBB2/viewtopic.php?t=4649

"i2c-eeprom 24c16 (16kbyte)"

Hier interessant Pebisofts Beitrag

MFG Moritz

22.11.2004, 19:15
Hallo

24C16 hat nur 2 KByte

Was du suchst ist ein 24C256 , der hat 32KByte

http://www.simons-elektronik.de/Index.asp?ID=8C234B5C05124CF0A0811B5E693BBCFD

MFG
Dieter

Frank
22.11.2004, 19:17
Hi,
kleiner Rechenfehler, das hat nur 2048x8 Bit´s, also insgesamt 2 kByte

Mich würde eines mit 64 KByte interessieren. Gibt´s das auch?

22.11.2004, 20:20
Hallo Frank

Es gibt auch ein 24C512 . Hat aber nicht jeder Händler.

MFG
Dieter

Frank
22.11.2004, 20:22
Hallo,
Weißt du zufällig wie schnell man z.B. die ganzen 64 kb oder 32 KB auslesen kann. Wieviel Sekunden dauert das?
und wie lange dauert das Beschreiben des ganzen Bausteins?

22.11.2004, 21:05
Hallo Frank

Die EEPROMS unterstützen ja den PAGE Write Modus. Du kannst also 64 Bytes übertragen und dann erst speichern. Die neuen EEPROMs benötigen 5 ms zum schreiben, egal ob du nur ein Byte speicherst oder 64 Bytes auf einen Schlag.

Also 1 Byte Control + 2 Byte Adresse + 64 Bytes Daten , dann 5 ms warten zum schreiben und weiter gehts.

Also sollte ein 32 KByte Teil in ca 3,5 Sekunden voll sein, bei einem Bustakt von 400 KHz.

MFG
Dieter

pebisoft
22.11.2004, 21:28
hallo, im küchenbrettroboter von mir habe ich den i2c eeprom 24c64 eingebaut. der hat 8kbyte speicher und hat die gleiche baugrösse wie der 24c16 und 8 beinchen. man kann ihn mit bascom ganz leicht beschreiben und auslesen, eine wunderbare sache. koste bei reichelt ca 70 cent (geschenkt). im bascomforum gibt es beispielcode.
mfg pebisoft

22.11.2004, 21:33
Hallo

Der 24C64 hat 64 KBit --->>> ergeben 8 KByte !!!!

MFG
Dieter

Frank
23.11.2004, 18:06
Hallo Frank

Die EEPROMS unterstützen ja den PAGE Write Modus. Du kannst also 64 Bytes übertragen und dann erst speichern.
...
Also sollte ein 32 KByte Teil in ca 3,5 Sekunden voll sein, bei einem Bustakt von 400 KHz.

MFG
Dieter

Dank für Info, na das klingt doch ganz gut. Ich weiß zwar noch nicht genau wie die Ansteuerung genau läuft, aber sonderlich schwierig scheint es ja nicht zu sein.

Gruß Frank

edgar
03.02.2005, 09:05
wo bekommt man denn ein 24c512 oder 24c1024 günstig? Besonders interessant wäre der 24c1024.
gruß werner...

negaH
03.02.2005, 13:03
nimm doch 4x 24c256, bzw. du kannst bis zu 8 der Chips parallel am i2c schalten. Man muß nur höllisch aufpassen das man i2c EEPROMs erwischt die auch wirklich die 3 Addresspins auswerten. Es gibt Chips die diese Einstellungen vollkommen ignorieren.

Gruß Hagen

03.02.2005, 15:33
ja genau oder du nimmst einfach 8 x 24c128 oder 16 x 24 c 64
:-)

negaH
03.02.2005, 15:38
16x wird nicht gehen. Die i2c EEPROMs haben nur 3 externe Address-PINs, ergo. max. 8 Stück am gleichen i2c Bus geht.

Gruß Hagen

15.02.2005, 17:26
Hallo..
ich habe mir eigene 24c64 eeproms zugelegt. Ich bin verzweifelt auf der Suche nach einer Antwort zu folgender Frage:
Welchen Wert müssen die beiden Adressbytes (bit 15..8 und bit 7...0) haben? Ich weiss nur das bit 15...13 uninteressant sind.
Wäre jemand so nett, und kann mir da weiterhelfen !!!
Gruss Uwe

negaH
15.02.2005, 23:43
Ähm? sie enthalten die Speicheradresse ab der die nachfolgenden Bytes gelesen oder gespeichert werden sollen. Sogesehen müssen sie den Wert der Addresse annehmen die DU lesen oder schreiben willst.

Wichtig ist nur das du das Pageboundary beachtest. Das ist meisten 32 Bytes, d.h. schreibst du zb. ab Addresse 2 so kannst du nur 30 Bytes in einem Rutsch lesen oder schreiben, da nach diesen 30 Bytes der interne Addresszähler von 31 wieder auf 0 geht. Würdest du ab Address 2 zb. 32 Bytes schreiben dann würden die Bytes 30 und 31 eben an Addresse 0 und 1 gespeichert, wegen dem Überlauf des Pageboundary.

Du solltest auch mal angeben welchen 24c64 du genau hast, den Hersteller und Link zum Datenblatt. Desweiteren ob du den Rest des I2C Protokolls richtig umgesetzt hast, bzw. ob der Rest auch schon getestet funktioniert.
Es könnte nämlich sein das du die falsche Slaveaddresse sendest und deshalb der EEPROM nicht reagiert. Leider geht dies aus deinem Posting nicht hervor.

Sollen mehrere solcher EERPOMs kaskadiert wie ein einziger großer EEPROM angesprochen werden so nimmt man zb. eine 16Bit Addressangabe. Im I2C Protokoll extrahiert man nun 3 Bits -> Bits 13 bis 15 und benutzt diese als A0-A2 in der Slaveaddresse. Natürlich müssen die EERPOMs auch ihre Pins A0-A2 entsprechend verbunden haben. In der verbleibenden 16Bit Addresse werden nun Bits 13-15 gelöscht und im weiteren Protokollverlauf gesendet.

Nochmal genauer: Dein 24c64 hat 8Kb = 8192 Bytes = 0x2000 Bytes. Die Addresse kann von 0x0000 bis 0x1FFF gehen und benötigt somit maximal eine 13 Bit Addresse. Du kannst im Addressfeld des I2C Protokolls nun jede beliebige Speicheraddresse zum lesen oder schreiben angeben, und must also den EEPROM nicht Blockweise auslesen um an 1 Byte ranzukommen. Du must nur darauf achten das durch das 32 Bytes Pageboundary du maximal 32 Bytes in einem Rutsch lesen oder schreiben kannst, und das dann auch nur ab einer Addresse die durch 32 ohne Rest teilbar ist -> Address & 0x1F == 0. Willst du also mehr als 32 Bytes lesen oder schreiben oder willst du über diese Grenzen hinweg lesen oder schreiben so muss deine I2C Routine dies explizit berücksichtigen und die Speicherzugriffe zerstückeln.

Du könntest natürlich auch vor jedem einzelnen Byte ein Device-Select durchführen und zu diesem Byte die benötigte Addresse senden. Aber dies wäre ziemlich ineffizient. Deshalb haben die EEPROMs internen einen 32 Bytes große Buffer und einen eigenen Addresszähler der von 0 bis 31 gehen kann. Man muß also im besten Falle für 32 Bytes am Stück nur einmal einen Deviceselect durchführen. Dieser Modus steht unter dem Stichwort "Page Write" und "Page Read" in den Datenblättern.

Gruß Hagen

16.02.2005, 16:46
Hallo..
erst mal ein riesiges Dank für so viele Info's.
So - 1.) ich habe den AT24C64 von ATMEL.
2.) Meine Bus-Verbindung läuft mit dem PCF8584 als Controller (über den Druckerport), dem PCF 8574 und dem PCF 8591 erfolgreich. Den Eeprom habe ich noch nicht getestet, da ich wie gesagt keine Ahnung hatte, wie die Speicheradresse auszusehen hat.
Wenn ich das also richtig verstanden habe, kann ich jeden Schreibvorgang (ein oder mehrere Bytes) mit einer beliebigen Speicheradresse versehen?
z.B. 00000000 00000001 dann 00000000 00000010 u.s.w.
Und dann ist noch ein Problem aufgetaucht. Wenn ich ein "SequentialCurrentRead" mache, muss ich keine Speicheradresse senden. Bedeutet das, ich kann den kompletten Speicherinhalt in eiem Stück auslesen?

Gruss Uwe

negaH
16.02.2005, 16:53
Beim Schreiben kannst du maximal nur 32 Bytes auf einmal senden, danach musst du erstmal par Millisekunden warten bis der EEPROM wieder bereit ist. Dann führst du erneut einen Device Select durch und sendest die Addresse für die nächsten Bytes. Wichtig ist nur das du das Pageboundary beachtest.
Beim lesen gibt es 3 verschiedene Modis wobei aber nur einer davon wirklich interessant ist. Du führst einen Device Select aus und sendest die Addresse die du lesen willst. Nun kannst du soviele Bytes lesen wie du willst und beim Lesen des letzten Bytes musst statt einem ACK ein STOP senden. Das ist wichtig damit der EEPROM in den Power Save Mode schaltet. Den Current-Address-Read Mode kannste getrost vergessen der funktioniert meistens eh nicht.

Gruß Hagen

19.02.2005, 14:32
Hallo Hagen..
Danke erst mal - ich denke jetzt habe ich eine Weile zu tun, dass alles zu programmieren und zu testen. Aber eine Frage habe ich da noch: Gibt es eine Möglichkeit den Eeprom komplett zu löschen oder geht das nur durch überschreiben?
Gruss Uwe

negaH
19.02.2005, 14:58
Puh, schau ma'mal hier rein http://www.atmel.com/dyn/resources/prod_documents/doc0336.pdf und finden keinen Erase Befehl. Es geht also bei deinem Chip nicht. Aber warum auch ? du kannst ja einen eigenen Erasecode programmieren indem du einfach immer 0xFF schreibst. Ich wüsste nicht das ich einen I2C EEPROM mal hatte der einen separaten Erase Befehl kannte.
Ich kenne nur die alten EEPROMs mit parallem Interface die Pageorientiert arbeiteten. Bei denen MUSSTE man sogar vorher die komplette Page löschen um nur 1 Byte neu schreiben zu können. Sogesehen, kannste mit den neueren I2C EEPROMs sogar froh sein das du nicht löschen musst :)

Gruß Hagen

negaH
19.02.2005, 15:02
Übrigens oben schrien ich "Beim Schreiben kannst du maximal nur 32 Bytes auf einmal senden, danach musst du erstmal par Millisekunden warten bis der EEPROM wieder bereit ist."

In meinen I2C Routinen mache ich dieses Warten immer so das ich sofort nach dem Schreiben einer Page ein neues Device Select durchführe. Deer EEPROM beantwortet dieses erst wenn er fertig programmiert hat. So spare ich mir eine unnötig lange Wartezeit zb. mit Hilfe eines Timers oder so. Die Schreibroutine kehrt also erst zurück wenn der EEPROM fertig ist. Der zweite Vorteil ist das dieses Device Select bei der letzten zu scheibenden Page eine Readoperation ist. Dadurch wird der EEPROM also auch in den Power Save Modus versetzt.

Gruß Hagen

edgar
19.02.2005, 18:42
Der zweite Vorteil ist das dieses Device Select bei der letzten zu scheibenden Page eine Readoperation ist. Dadurch wird der EEPROM also auch in den Power Save Modus versetzt.



kann mir das mal einer erklären?

negaH
20.02.2005, 10:27
Als Device Select bezeichnet man den Teil des I2C Protokolles der als erstes zu einem Gerät gesendet werden muß. Im Grunde ist es 1 Byte mit der Geräteaddresse + dem R/W Bit. Meistens folgt bei EEPROMs danach eine 1 bis 3 Bytes größe Speicheradressangabe. Wichtig ist eben nur das das I2C Gerät auf ein solches Device Select Kommando erst antworten wird wenn es bereit-> ready ist. Im Falle der EEPROMs also erst wenn es die 32 Bytes aus dem internen Latch in den Speicher geschrieben hat.
Führt man nach einem solchen Device Select eine Read Operation aus so hängt es von derem ACK Bit -> 0 oder 1 ab ob der EEPROM in den Power Save Modus schaltet. Im Power Save Modus verringert sich der Stromverbrauch des EEPROM Chips.

Gruß Hagen

teslanikola
27.03.2005, 22:43
Der 24C64 hat 64 KBit --->>> ergeben 8 KByte !!!!

der 24C64 hat 64KBit das ergeben 8192*8 Bit, d.h. ich kann 8192 Byte speichern ( tipp mal 8192 mal 8 in einen ETR ein und TADA es gibt 65536 Bit, das entsprechen 64Kbit)
So damit das endlich mal geklärt ist , ist ja schlimm mit euch [-(