La conception du bus I2C est telle que -
- lorsqu'un front descendant se produit sur SCL, cela peut amener un périphérique esclave à affirmer immédiatement SDA, sans retard minimum particulier;
- l'ordre relatif des fronts montant et descendant est d'une importance cruciale.
En raison de la différence de force du pilote et de capacité de ligne, il serait théoriquement possible qu'un appareil réponde à un front descendant quelque peu lent sur SCL en pilotant le SDA si rapidement qu'un autre appareil verrait le SDA tomber en premier.
Il aurait pu être possible de définir plusieurs seuils logiques sur SCL, et de spécifier que pour qu'un front descendant sur SCL soit considéré comme venant après un front sur SDA, il doit toujours être supérieur à 2/3 VDD lorsque le front sur SDA est détecté, mais un appareil peut ne pas affirmer SDA en réponse à un front descendant sur SCL jusqu'à ce qu'il soit tombé en dessous de 1/3 VDD, mais la spécification n'est pas écrite en ces termes.
Au lieu de cela, les dispositifs qui voient des fronts descendants presque simultanés sur SDA et SCL considéreront généralement que le bord sur SCL s'est produit en premier, à moins qu'il ne soit sensiblement précédé par le bord sur SDA. Certaines implémentations I2C gèrent cela en synchronisant SCL et SDA avec une horloge externe et en exigeant qu'un front descendant de SDA soit observé deux périodes avant celui de SCL afin d'être considéré comme étant arrivé en premier. Si la vitesse des opérations sur SCL et SDA est trop rapide par rapport à l'horloge de synchronisation, les appareils peuvent percevoir des séquences arbitraires de signaux hauts et bas sur SCL et SDA; si l'une de ces séquences semble s'adresser au périphérique lent, elle peut réagir en conséquence, annulant toute autre communication en cours.
Il n'y a aucune raison particulière pour que les périphériques sur un bus I2C doivent s'appuyer sur la synchronisation avec une horloge système (pouvoir détecter deux seuils discrets sur SCL serait mieux), mais le fait est que certains périphériques fonctionnent en fait de cette façon. Notez que même si un périphérique limité à des vitesses lentes voulait coexister en interne avec un bus rapide, il devrait probablement utiliser au moins une horloge qui s'étire à chaque fois que quelque chose se passait, ce qui pourrait l'intéresser.
Cela entraînerait certaines communications à se produire plus lentement qu'elles ne le feraient autrement, mais la dégradation de la vitesse ne serait probablement pas aussi mauvaise que celle requise avec la conception synchronisée par l'horloge (la quantité réelle par laquelle le périphérique lent étire les horloges ne le serait probablement pas être aussi mauvais que la quantité de ralentissement de l'horloge pour éviter les pires cas de défaillance dans les unités d'horloge synchronisées).