M24M01 Adressieren

Gast #4479957
Lesenswert?

Hallo,

ich arbeite zum erstem Mal mit einem 1Mbit Eeprom und bin ehrlich gesagt 
gerade etwas verwirrt.

Wie kann ich die Daten im zweitem Bereich des EEproms lesen bzw. 
schreiben?

Wenn ich das richtig verstehe muss dem eigentlichen Sendungspaket das 
Device Select vorran gestellt werden. Erst dann darf R/W aktiviert 
werden, oder? Mit dem Adressbit A16 im Device Select Adressiere ich dann 
ob ich im oberen oder unteren Bereich schreibe, oder?

Also muss die Reihenfolge dann:
Stadt anfordern
Device Select schreiben
R/W Schreiben
Adresse
Daten

sein?

Grüße

Jens
#4479980
Lesenswert?

Eigentlich nichts besonderes.

Schreiben: A16 ist im Device-select enthalten, wie du richtig erkannt 
hast.
Für den Master stellet sich das dar wie 2 getrennte ICs am Bus, der eine 
hat die I2C-Adresse A0, der andere A2 (wenn beide Hardware-Adresspins 
auf Masse liegen).
Ansonsten ist das wie bei kleineren Eeproms.
Gast #4479989
Lesenswert?

Hallo Joachim,

danke für die Antwort,

Hallo Pete,

ich habe das Datenblatt gelesen - und an manchen Stellen nicht 
verstanden - bzw. ich bin da gerade nicht sicher ob ich es richtig 
verstanden habe. Sowohl von ON als auch von ST. Deswegen frage ich doch.

Hallo alle Anderen:

Gut - ich schicke also das Device Select vorran. Muss ich das beim 
Senden irgendwie besonders Adresserieren?

Grüße

Jens
#4480005
Lesenswert?

Schreiben, hier solltest du sinnvollerweise noch einen Parameter für 
obere oder untere Hälfte mitgeben oder direkt die Byteadresse als long 
übergeben und daraus die Device-Adresse ermitteln:

void write_uchar_eeprom (unsigned int byte_adress, unsigned char data)
{i2c_start();
i2c_write (0xA0);   //für obere Hälfte 0xA2
i2c_write (byte_adress/256);
i2c_write (byte_adress%256);
i2c_write (data);
i2c_stop();
}

Und beim Lesen analog:
unsigned char read_uchar_eeprom (unsigned int byte_adress)
{i2c_start();
i2c_write (0xA0);
i2c_write (byte_adress/256);
i2c_write (byte_adress%256);
i2c_start();
i2c_write (0xA0|1);     //read byte
return i2c_read(NO_ACK);
}
Gast #4480024
Lesenswert?

Hallo Joachim,

danke :) Das hilft mir jetzt sehr. So hab ich mir das fast auch schon 
gedacht.

Noch eine Frage zum Abschluss - muss nicht passend das R/W bit mit 
gesetzt werden?

Grüße

Jens

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