Forum: Mikrocontroller und Digitale Elektronik I2C-Protokoll Problem


von Frederic (Gast)


Lesenswert?

Hallo Freunde,
ich kämpfe mich so langsam durch das Protokoll des I2C-Busses und es 
funktioniert schon eine ganze Menge.
Leider treten beim Schreiben der Daten hin und wieder Probleme auf.
Nach dem Schreiben des Device Select Codes, der Speicheradresse und des 
ersten Datums wird dies nicht mit dem erwarteten Ack des Speicherchips 
quittiert.
Erstaunicherweise hängt der Erfolg vom Inhalt des Datums ab!

Wenn das niederwertigste Datenbit nicht gesetzt ist, funktioniert das 
Schreiben immer.

Fehler, also das nicht Quittieren, erzeugt meist ein Datum, bei dem das 
niederwertigste Bit gesetzt ist; ist aber leider nicht immer so.

0000 0001: n.i.O.
1111 1111:   i.O.
0000 1001: n.i.O.
0000 1011: n.i.O.
0000 0010:   i.O.
0000 1010:   i.O.
1111 0111:   i.O.
1110 1111:   i.O.
0110 1111: n.i.O.
0110 1110:   i.O.

Sieht jemand ein Muster darin?


Der Zugriff erfolgt auf ein serielles EEPROM: Atmel AT24C64A

Bitte um Hilfe

Danke im Voraus,
Frederic

von Falk (Gast)


Lesenswert?

Klingt auf den ersten Blick ;-) wie eine Verschiebung deiner Ansteuerung 
um ein Bit. Denk dran, dass nach jedem geschriebenen Byte ein ACK bit 
kommt, welches der EEPROM steurt. D.H. dein Master muss in dem Fall eine 
1 ausgeben, sprich den SDA Ausgang hochohmig schalten.

MfG
Falk

von CSpecker (Gast)


Lesenswert?

Hallo,
hatte mal ein ähnliches Problem. In dem Datenblatt des Herstellers war 
leider nicht vermerkt, daß der Chip eine latenzzeit zum schreiben 
benötigt, die aber unbedingt eingehalten werden muß.
Vielleicht löst das Dein Problem?

von Frederic (Gast)


Lesenswert?

@Falk:
Gebe immer nach einem Byte eine 1 für das ACK-Bit aus. Funktioniert 
bereits beim Device Select Code und den zwei Bytes für die 
Speicheradresse, sowie bei vielen Datentelegrammen (im ersten Posting 
mit i.O. gekennzeichnet).


@CSpecker:
Denke nicht das es daran liegt, da ich einen langsamen Clock (50Hz) 
benutze. Habe die Möglichkeit auch in Betracht gezogen, dabei würde aber 
der Chip den Clock auf 0V ziehen (Clock-Stretching) und das würde ich am 
Oszilloskop sehen.
Ein-Zeit = Aus-Zeit = 10ms


Gibt es eine maximale Zeit bzw. Minimalfrequenz für den Clock? In dem 
Datenblatt 
(http://pdf1.alldatasheet.com/datasheet-pdf/view/83188/ATMEL/AT24C64A.html) 
ist dazu keine Angabe zu finden.
Puls-Pause vom Clock ist gleich (je 10ms), ist das erlaubt?
Kommt bei diesen Zeiten bereits das "Clock-Stretching" zum Zuge?

von Falk (Gast)


Lesenswert?

> Puls-Pause vom Clock ist gleich (je 10ms), ist das erlaubt?
> Kommt bei diesen Zeiten bereits das "Clock-Stretching" zum Zuge?

Das glaube ich kaum. Sooo schnarchlangsam ist der EEPROM nicht.

MfG
Falk

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.