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 - - -
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
Lesezeichen