Das Design des I2C-Busses ist so, dass -
- Wenn bei SCL eine fallende Flanke auftritt, kann dies dazu führen, dass ein Slave-Gerät SDA ohne eine bestimmte minimale Verzögerung sofort aktiviert.
- Die relative Reihenfolge der ansteigenden und abfallenden Flanken ist von entscheidender Bedeutung.
Aufgrund der unterschiedlichen Treiberstärke und Leitungskapazität wäre es theoretisch möglich, dass ein Gerät auf eine etwas langsam fallende Flanke bei SCL reagiert, indem es SDA so schnell fährt, dass ein anderes Gerät SDA zuerst fallen lässt.
Möglicherweise war es möglich, mehrere logische Schwellenwerte für SCL zu definieren und anzugeben, dass eine fallende Flanke bei SCL nach einer Flanke bei SDA immer noch über 2/3 VDD liegen muss, wenn die Flanke bei SDA erkannt wird. Ein Gerät kann jedoch SDA nicht als Reaktion auf eine fallende Flanke bei SCL aktivieren, bis es unter 1/3 VDD gefallen ist, aber die Spezifikation ist nicht in solchen Begriffen geschrieben.
Stattdessen betrachten Geräte, die auf SDA und SCL nahezu gleichzeitig fallende Flanken sehen, die Flanke auf SCL im Allgemeinen als zuerst aufgetreten, es sei denn, der Kante auf SDA geht im Wesentlichen voraus. Einige I2C-Implementierungen behandeln dies, indem sie SCL und SDA mit einem externen Takt synchronisieren und verlangen, dass eine fallende Flanke von SDA zwei Perioden vor der von SCL beobachtet wird, um als zuerst eingetreten zu gelten. Wenn die Betriebsgeschwindigkeit auf SCL und SDA relativ zum Synchronisationstakt zu hoch ist, können die Geräte beliebige Sequenzen von hohen und niedrigen Signalen auf SCL und SDA wahrnehmen; Wenn eine dieser Sequenzen so aussieht, als würde sie das langsame Gerät adressieren, reagiert sie möglicherweise entsprechend und unterdrückt alle anderen laufenden Kommunikationen.
Es gibt keinen besonderen Grund, warum Geräte an einem I2C-Bus auf die Synchronisation mit einer Systemuhr angewiesen sein sollten (es wäre besser, zwei diskrete Schwellenwerte für SCL zu erfassen), aber Tatsache ist, dass einige Geräte tatsächlich so funktionieren. Beachten Sie, dass selbst wenn ein Gerät, das intern auf langsame Geschwindigkeiten beschränkt war, mit einem schnellen Bus koexistieren wollte, es wahrscheinlich mindestens eine Zeitdehnung verwenden muss, wenn etwas passiert, an dem es interessiert sein könnte.
Dies würde dazu führen, dass einige Kommunikationen langsamer ablaufen als sonst, aber die Geschwindigkeitsverschlechterung wäre wahrscheinlich nicht annähernd so schlimm, wie es beim taktsynchronisierten Design erforderlich ist (der tatsächliche Betrag, um den das langsame Gerät die Uhren streckt, würde dies wahrscheinlich nicht tun so schlecht sein wie der Betrag, um den die Uhr verlangsamt werden muss, um Fehler im schlimmsten Fall in den synchronisierten Uhreinheiten zu vermeiden).