Ich spreche mit dem I2C-Dongle das TWI (Two-Wire-Interface - Atmel Terminologie für I2C) eines ATmega168 an. Beim Lesen von Bytes vom Slave löst die Hardware des Prozessors nach dem letzen Byte einen Interrupt mit Status "Bus error due to an illegal START or STOP condition" aus. Das Schreiben funktioniert problemlos.
Wenn ich mir SCL und SDA mit dem Scope anschaue, sieht es so aus , als würde der Dongle beim letzten Byte nur 8 statt der erforderlichen 9 Takte übertragen.
Kann das jemand bestätigen oder habe ich irgendwo einen Denk- oder sonstigen Fehler?
Gruß aus Berlin-Steglitz
Wolfgang
Problem mit Busprotokoll beim I2C Dongle
Moderator: Guido Körber
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Problem mit Busprotokoll beim I2C Dongle
Das hört sich danach an, als wenn ein ACK erwartet wird wo keiner mehr kommt.
Re: Problem mit Busprotokoll beim I2C Dongle
So ähnlich: Nach meine Doku (NXP) sendet der Master immer 9 Takte pro Byte. Auf dem 9. wird dann ACK gesendet oder auch nicht.
Sendet der Slave Daten zum Master, signalisiert der Master durch Unterdrücken des ACK, dass er jetzt meint, das letzte Byte empfangen zu haben und legt dann die STOP Condition auf den Bus.
Wenn nun das STOP nach nur 8 Takten kommt, bringt das den Slave etwas von der Rolle.
Sendet der Slave Daten zum Master, signalisiert der Master durch Unterdrücken des ACK, dass er jetzt meint, das letzte Byte empfangen zu haben und legt dann die STOP Condition auf den Bus.
Wenn nun das STOP nach nur 8 Takten kommt, bringt das den Slave etwas von der Rolle.
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Problem mit Busprotokoll beim I2C Dongle
Das sollte eigentlich kein Problem sein, zumal ein Slave auf dem IIC nicht viele Optionen hat was er tun kann.
Re: Problem mit Busprotokoll beim I2C Dongle
Nein, so richtig dramatisch ist es nicht: Ich setze den Bus zurück und die Welt ist wieder in Ordnung. Aber ganz spezifikationskonform ist es halt nicht.
Re: Problem mit Busprotokoll beim I2C Dongle
Noch eine andere Frage: Kann ich mehr als 10 Byte auf einmal an einen I2C Slave senden? Beim Lesen ist das ja kein Problem, aber beim Schreiben sehe ich in den Sourcen von Simple-I2C nur, wie man bis zu 10 Bytes auf zwei Portionen aufteilt. Läßt sich das erweitern?
-
- Site Admin
- Posts: 2879
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Problem mit Busprotokoll beim I2C Dongle
Ja, das lässt sich beliebig erweitern, bei "SimpleIIC" haben wir nun mal wegen des "Simple" gewisse Grenzen.
Je Report gehen 6 Byte Nutzdaten mit rüber, mit den Flags kann man angeben ob Start und/oder Stop erzeugt werden sollen. Dazwischen kann man beliebig viele Reports schicken die weder noch erzeugen und damit eine lange Transaktion realisieren.
Je Report gehen 6 Byte Nutzdaten mit rüber, mit den Flags kann man angeben ob Start und/oder Stop erzeugt werden sollen. Dazwischen kann man beliebig viele Reports schicken die weder noch erzeugen und damit eine lange Transaktion realisieren.