Zitat Zitat von Cysign Beitrag anzeigen
Ist das eine Art IDLE-Modus?
Nein, sowas gibts es bei I2C nicht. Wenn man den Begriff "Idle" verwenden will, ist High idle, da wird der Bus nur von den passiven Pullups auf high gezogen.

Für mich sieht das so aus, als ob einer am Bus das Signal aktiv auf High treibt, während ein anderer es auf Low zieht. Ein weiteres Indiz für diese Vermutung sehe ich im SCL-Bild. Dort ist die High-Flanke "runder". Das entspricht eher einem Pullup als die schärfere Flanke bei SDA.

Stimmt diese Vermutung, ist ein Teilnehmer am Bus, nämlich der, der auf High treibt, ein fehlerhafter Software I2C. Eine Hardware Implementation von I2C hätte einen solchen fundamentalen Fehler nicht.

Das der Code funktioniert, ist positivem Karma oder Glück zu verdanken.

MfG Klebwax

- - - Aktualisiert - - -

Zitat Zitat von Ceos Beitrag anzeigen
Solche "Zwischenlevel" erlebe ich sonst nur auf der CLK Leitung wenn ein I2C Device ein Clockstretch länger als 25mS macht, dann erzwingt die I2C Logik eine Clock und je nach Pull-Stärke des Slave kann man da Pegelunterschiede erkennen.

Das mit dem Clockstretch von maximal 25mS sollte ma übrigens IMMER in hinterkopf halten wenn man Slaves mit der Funktion bearbeitet, das hat mir beim Debuggen schonmal graue Haare gemacht XD .... kommt daher dass der I2C mit SMBus Logik arbeitet und die Regel von da kommt.
Nicht ganz. Der I2C Bus ist schon ein paar Jahrzehnte älter als der SMBus und hatte keinen Timeout. Da das in einem Computer nicht denkbar war, ein Bus der das System komplett blockieren kann, hat man den Timeout dazuerfunden und das Ganze mit der Festschreibung von TTL Pegeln und der Alert Leitung SMB genannt.

MfG Klebwax