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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.