Brett vorm Kopf: Schreiben auf I2C EEPROM

11/11/2010 - 18:49 von Johannes Bauer | Report spam
Hallo,

ich habe hier gerade ein volles Brett vorm Kopf mit einem I2C EEPROM
24LC21. Lesen funktioniert einwandfrei, positionieren des Zeigers (also
Schreiben!) auch. Nur beim Schreiben von Bytes wird mit immer der
doppelte Wert (also um ein Bit nach links geschoben) ins EEPROM geschrieben.

Hier das Bild (ist zwar eng, man kann aber alles erkennen, was wichtig
ist, wenn man's vergrößert):
http://www.pictureupload.de/origina...30_i2c.png

Man sieht zunàchst, dass ich eine gültige Start Condition erzeuge. Dann
8 Bits reinclocke (0xa0 = 0x50 << 1). Dann lese ich das ACK aus.

Danach die Adresse: 0x11 (0b00010001 = 17) und wieder ein enormes Delay
bevor ich das ACK lese.

Dann kommt das Byte, das ich schreiben will, hier 0x58 (0b01011000 'X'). Wieder eine Pause, dann ACK auslesen.

Danach die Stop Condition. Wenn ich dann das EEPROM auslese, steht an
der Stelle aber keine 0x58, sondern 0xb0.

Wieso das denn? Übersehe ich irgendwas ganz plumpes? Schiebe ich
irgendwo ein Bit zuviel rein? Interpretiert der EEPROM mein ACK als
Datenbit?

Viele Grüße,
Johannes



Wo hattest Du das Beben nochmal GENAU vorhergesagt?


Zumindest nicht öffentlich!


Ah, der neueste und bis heute genialste Streich unsere großen
Kosmologen: Die Geheim-Vorhersage.
- Karl Kaos über Rüdiger Thomas in dsa <hidbv3$om2$1@speranza.aioe.org>
 

Lesen sie die antworten

#1 Waldemar Krzok
11/11/2010 - 19:03 | Warnen spam
Johannes Bauer wrote:

Hallo,

ich habe hier gerade ein volles Brett vorm Kopf mit einem I2C EEPROM
24LC21. Lesen funktioniert einwandfrei, positionieren des Zeigers (also
Schreiben!) auch. Nur beim Schreiben von Bytes wird mit immer der
doppelte Wert (also um ein Bit nach links geschoben) ins EEPROM
geschrieben.

Hier das Bild (ist zwar eng, man kann aber alles erkennen, was wichtig
ist, wenn man's vergrößert):
http://www.pictureupload.de/origina...30_i2c.png

Man sieht zunàchst, dass ich eine gültige Start Condition erzeuge. Dann
8 Bits reinclocke (0xa0 = 0x50 << 1). Dann lese ich das ACK aus.

Danach die Adresse: 0x11 (0b00010001 = 17) und wieder ein enormes Delay
bevor ich das ACK lese.

Dann kommt das Byte, das ich schreiben will, hier 0x58 (0b01011000 > 'X'). Wieder eine Pause, dann ACK auslesen.

Danach die Stop Condition. Wenn ich dann das EEPROM auslese, steht an
der Stelle aber keine 0x58, sondern 0xb0.

Wieso das denn? Übersehe ich irgendwas ganz plumpes? Schiebe ich
irgendwo ein Bit zuviel rein? Interpretiert der EEPROM mein ACK als
Datenbit?



Mit EEPROMs am I2C habe ich nicht gespielt, aber schau noch mal in die
specs, ob das zu schreibende Byte nicht ohne ACK zu schicken ist. Manche
Devices die ich am Wickel hatte hatten so was (und mir ein paar graue Haare
mehr bereitet :-)).

Waldemar

Ähnliche fragen