I2C-Protokoll Problem

Gast #457063
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
Gast #457065
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
Gast #457189
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?
Gast #457764
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?
Gast #457782
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.