I2C EEprom Speicherverwaltung

Gast #1027303
Lesenswert?

Hallo

Ich habe hier zwei I2C EEproms. Eins 24c256 8x32 und eins mit 8x256. 
Beim 8x32 kann ich wunderbar mit AT24WriteByte(adr,wert); und mit 
AT24ReadByte(adr); (siehe Anhang)auslesen und wieder einlesen. Beim 
8x256 bekomme ich nur kryptische Zeichen, obwohl gleicher Code. Woran 
kann das liegen? Wird der Speicher beim 8x256 anders angesprochen?
Frank
Angehängte Dateien:
Gast #1027627
Lesenswert?

doch, das geht.
0b1010 //highteil der Devivceadresse
xxx    //lowteil der deviceadresse, hat verschiedene Funktionen. 
Teilweise abhängig von der Hardwareverschaltung des Chips 
(Adresseingänge), teilweise als weiteres Adressbit(s) genutzt
x  schreib/lese bit.

Und wenn nun beim 24C02 A0,A1 und A2 auf Masse liegen, brauchst du als 
Device-Adresse 0xA0 bzw 0xA1

Das Problem bei dir: du sendest device-Adresse, high-Adresse, 
low-Adresse.
Der 2402 bekommt aber nur ein Byte Adresse - mehr braucht man ja für 256 
Byte auch nicht.
Du musst also das Programm entsprechend ändern, dass nur ein Byte 
Adresse gesendet wird.

//Random Byte Write
uint8_t AT24WriteByte(uint16_t dataaddress, uint8_t data)
{
  uint8_t deviceaddress = AT24Addr;
  uint8_t SLA_W = deviceaddress + AT24Command;

  AT24Poll(0);

  TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
  while ((TWCR & 0x80)!= 0x80);
  TWDR = SLA_W;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while ((TWCR & 0x80)!= 0x80);
  if (TWSR != 0x18){
    return 1;
    //Keine Antwort vom EEPROM
  }
  TWDR = ((dataaddress>>8)&0xFF);

//hier nur den lowteil senden
//was soll eigentlich &0xFF?? Bringt gar nichts
//das zweite Adressbyte muss entfallen
//beim Lesen analog verfahren
Gast #1027700
Lesenswert?

irgendwie haust du Bit und Byte durcheinander.
Die Speicherkapazität wird bei EEPROMs i.a. in kbit angegeben.
2kbit (24C02)=2048/8=256 Byte -> 8bit-Adresse.
Grösser als 256 byte erfordert mehr als eine 8Bit-Adresse. Das kann 
durch verschiedene Verfahren realisiert werden. Entweder werden 2 Byte 
Adresse gesendet (I2C ist immer Byteorientiert) oder es wird ein Teil 
bereits in der Device-Adresse mitgeteilt (sieht man daran, dass das IC 
nicht 3 sondern weniger Hardwareadresseingänge hat.
Äqivalent geht es bei Speichergrössen >64kByte zu. 16 Adressbits reichen 
nicht -> Codierung in der Device-Adresse oder 3-Byte-Adressteil (habe 
ich zwar noch nicht gesehen, aber wer weiss).
Datenblätter lesen!
Gast #1027831
Lesenswert?

was mich nur wundert ist, dass der code unverändert wie oben mit 
St4256bwp, funktioniert. Ich schreibe mit  AT24WriteByte(10,55);,die 
Zahl 55 auf die Adresse 10. Beim 24c02 mit 8x256 braucht man demnach 
doch auch nur eine 8Bit Adresse. Also müßte der Code auch hier gehen? 
Oder mache ich immer noch einen Denkfehler?
Gast #1027964
Lesenswert?

halt dich doch einfach an die Datenblätter.
Warum es bei einem funktioniert, obwohl es nicht korrekt angesteuert 
wird, ist doch irrelevant. Steuere es mit EINEM Adressbyte an, fertig.
Bleibt die Frage - was willst du überhaupt mit einem 32Byte-EEPROM? Das 
gibts doch eh nur noch antiquarisch. Weil du es gerade da hast?
Gast #1028285
Lesenswert?

Also ich habe es jetzt mit nur einem Byte als Adresse hinbekommen.
Danke noch mal an Crazy Horse für die Geduld!! Ich habe hier den 8x32 = 
256 Kb und den 24c02. Sind schon ein wenig älter. Welche maximalen 
Größen gibts denn? Ich habe bei Reichelt und Co. nur bis 512 Kb 
gefunden.
#1028340
Lesenswert?

@ Frank (Gast)

>Größen gibts denn? Ich habe bei Reichelt und Co. nur bis 512 Kb
>gefunden.

Reicht das nicht? Das sind 64kByte. VOn Atmel gibts bis 2 Mbit, also 256 
kByte. Wenns noch grösser sein soll gibt es, auch von Atmel, Flash mit 
SPI, bis zu sagenhaften 32 Mbit zum Wahnsinnspreis.

AT45DB041B bei

http://www.csd-electronics.de/de/index.htm

IC's -> Speicher -> Flash

MFG
Falk

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