mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C EEprom Speicherverwaltung


Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsche Geräte-Adresse ?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ne, die ist immer gleich. Ich nehme für beide das gleiche Programm. Nur 
das ich das EEpromm tausche. Es hängt also immer nur ein EEprom am 
Atmega32.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, den Chiptyp hast du nicht verraten...
8x256 heisst 256kByte? Wenn ja, lässt der sich nicht mit 2 Byte 
adressieren.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier nochmal die Typen: 24C02 EEPROM DIP8/S Conrad Best.Nr. 160962 und 
ST42568WP (der funzt).

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also 2kBit.
Der bekommt nur ein Adressbyte gesendet.
also:
start
device-adresse (i.a. 0xA0)
byteadresse

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was meinst Du mit Device Adresse 0xA0? Ich habe die Adressbits alle auf 
0 gelegt und spreche das EEprom Softwaremäßig auch mit 0 an. Oder geht 
das beim dem von Conrad nicht?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch mal zum Verständnis für mich: Wenn ich ein EEprom mit 8x32 = 256b
habe, muss die Adresse ein Byte sein. Und bei einem 8x256 = 2K ein int 
als Adresse?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich geb auf.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte nicht Aufgeben! Wie Du sagst sende ich in meinem Code ja eine low 
und eine high Adresse. Aber wieso geht das dann beim 256er und beim 2kb 
nicht?

Autor: Denny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielleicht hilft dir die Seite weiter:
http://www.roboternetz.de/wissen/index.php/Bascom_...

Ist zwar für Bascom, aber dort steht genau wie das mit dem High und Low 
Byte
zusammen hängt.



Gruß Denny

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg T. (brause)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bin gerade auf der Suche nach großen I2C-EEPROM's
und zwar >16 kByte. Habe bei Reichelt nichts gefunden
schon gar nicht 64 kByte.
Könnt Ihr mir da einen Hinweis geben?

Vielen Dank
Grüße
Jörg

Autor: Johannes K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der "AT24C512B" hat 512K, also 64KByte.
Gibts bei Reichelt für 1.50€ im DIP-8 Package.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johannes,

vielen Dank für die Info.
Danke und Gruß
Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.