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
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
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?
@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?
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.