Forum: Mikrocontroller und Digitale Elektronik M24M01 Adressieren


von Jens Wörmann (Gast)


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

von H.Joachim S. (crazyhorse)


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.

von Pete K. (pete77)


Lesenswert?

Das alles steht im Datenblatt. Bitte dieses lesen.

von Jens Wörmann (Gast)


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

von H.Joachim S. (crazyhorse)


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);
}

von Jens Wörmann (Gast)


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

von H.Joachim S. (crazyhorse)


Lesenswert?

Ja natürlich, steht doch da
>i2c_write (0xA0|1);     //read byte

von Jens Wörmann (Gast)


Lesenswert?

Vergesst die letzte Frage: Klar - das wird ja mit dem |1 gemacht?

Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.