I²C - EEPROM's (24C04 ...)

Gast #20221
Lesenswert?

Hallo,

ich habe Probleme mit I²C-EEPROM's vom Typ 24C04 (der Firma "ST").

Es funktioniert alles, bis auf den "Page Write" von mehr als 8 Byte.

Im Datenblatt (in Anhang) steht, daß das EEPROM eine "Page" von 16 Byte 
schreiben kann.


Hat von euch schon mal jemand ähnliche Probleme gehabt ?


Gruß
Matthias
Angehängte Dateien:
Gast #20222
Lesenswert?

Die "Page" beginnt nicht irgendwo im Speicher, sondern nur an Adressen, 
die ganzzahlige Vielfache von 16 (oder 0x10) sind.
Daran mußt du dich halten. Z.B. Wenn du 10 Bytes am Stück ab 0x09 
beginnst zu schreiben, dann sieht dein Speicher danach nicht so (wie 
erwartet) aus:
0x00: xx xx xx xx  xx xx xx xx  xx 00 01 02  03 04 05 06
0x10: 07 08 09 xx  xx xx xx xx  xx xx xx xx  xx xx xx xx

sondern so:
0x00: 07 08 09 xx  xx xx xx xx  xx 00 01 02  03 04 05 06
0x10: xx xx xx xx  xx xx xx xx  xx xx xx xx  xx xx xx xx

Um oberes Ergebnis zu erhalten, zuerst ab Adresse 0x09 beginnend, bis 
0x0F, und ein zweites Mal ab 0x10 beginnend bis 0x12, schreiben.

Was schreib ich hier eigentlich alles? Steht doch im (von dir 
angehängten) Datenblatt S.6. ;)

Schmittchen.
Gast #20224
Lesenswert?

Hallo Schmittchen,

nachdem ich die Adresse welche ich zum schreiben benutzte kotrolliert 
habe, wurde ich stutzig: ich habe immer Adressen verwendet die durch 16 
teilbar sind !

Ich habe mir nun Funktionen geschrieben, die folgendes erledigen:

- das EEPROM mit 0xFF füllen
- das EEPROM ins SRAM kopieren

Die Funktionen benutzen nur Byte lesen/schreiben und kein Page 
read/write ...


Mit diesen Funktionen ist die Fehlersuche etwas leichter ...


hier nun einige Speicherauszüge (zum schreiben verwende ich immer den 
String "0123456789ABCDEF")

8 Byte schreiben auf Adr. 0x20: (alles ok)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 30 31 32 33 34 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

9 Byte schreiben auf Adr. 0x20: (1. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 31 32 33 34 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

10 Byte schreiben auf Adr. 0x20: (1. & 2. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 32 33 34 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

11 Byte schreiben auf Adr. 0x20: (1. - 3. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 33 34 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

12 Byte schreiben auf Adr. 0x20: (1. - 4. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 73 34 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

13 Byte schreiben auf Adr. 0x20: (1. - 5. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 73 77 35 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

14 Byte schreiben auf Adr. 0x20: (1. - 6. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 73 77 75 36 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

15 Byte schreiben auf Adr. 0x20: (1. - 7. Byte falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 73 77 75 77 37 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

16 Byte schreiben auf Adr. 0x20: (alles falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 38 39 73 73 77 75 77 77 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

8 Byte schreiben auf Adr. 0x23: ("alles ok")
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 35 36 37 30 31 32 33 34 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

16 Byte schreiben auf Adr. 0x23: (alles falsch)
0x10: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0x20: 75 77 77 38 39 73 73 77 FF FF FF FF FF FF FF FF
0x30: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF


Bei dem letzten Speicherauszug handelt es sich um den von dir 
beschreiben Effekt. Der bei mir aber bei 8 Byte auftritt !


Meiner Meinung nach hat das EEPROM nur eine Page von 8 Byte !



kann diese Ergebnisse irgendjemand reproduzieren ?


Gruß
Matthias
Gast #20225
Lesenswert?

An einem ähnlichen Problem bin ich auch schon mal fast verzweifelt, Hast 
du wirklich exakt den EEPROM-Typ, für den du auch das Datenblatt hast? 
Ich hatte damals verschiedene Hersteller-Typen, bei einem gings, beim 
anderen nicht (ST ging, Atmel nicht, wenn ich mich recht erinnere, die 
waren in Bezug auf page-write nicht kompatibel, trotz gleicher 
Bezeichnung) Im Datenblatt der Hersteller war jedoch alles richtig 
beschrieben, einmal 8Byte, einmal 16Byte.
Gast #20231
Lesenswert?

Hallo miki,

Laut deinen Datenblatt (Februar 1999) kann das EEPROM eine Page von max. 
8 Byte schreiben. So wie es bei funktioniert. Ich habe den Pin7 auf 0V.

Laut meinem Datenblatt (July 2002) kann das EEPROM eine Page von max. 16 
Byte schreiben.

In deinem Datenblatt heißt das EEPROM 24C04, in meinem M24C04.

Auf meinem EEPROM steht:

"ST Logo" TAI  F
24C04  1
4A9BK722

Ich glaube dein Datenblatt ist zutreffend.


Vielen Dank euch allen !!!


Gruß
Matthias

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren