El diseño del bus I2C es tal que -
- cuando se produce un flanco descendente en SCL, que puede hacer que un dispositivo esclavo afirme inmediatamente SDA, sin ningún retardo mínimo particular;
- el orden relativo de los flancos ascendentes y descendentes es de vital importancia.
Debido a la diferencia en la fuerza del driver y la capacitancia de la línea, sería teóricamente posible que un dispositivo respondiera a un flanco de caída algo lento en SCL conduciendo SDA tan rápido que otro dispositivo viera caer SDA primero.
Podría haber sido posible definir múltiples umbrales lógicos en SCL, y especificar que para que un flanco descendente en SCL se considere que viene después de un flanco en SDA, todavía debe estar por encima de 2/3 VDD cuando se detecta el flanco en SDA, pero un dispositivo no puede afirmar SDA en respuesta a un flanco descendente en SCL hasta que haya caído por debajo de 1/3 VDD, pero la especificación no está escrita en tales términos.
En cambio, los dispositivos que ven los flancos descendentes casi simultáneos en SDA y SCL generalmente considerarán que el flanco en SCL ha ocurrido primero a menos que sea sustancialmente precedido por el flanco en SDA. Algunas implementaciones de I2C manejan esto sincronizando SCL y SDA a algún reloj externo y requiriendo que un flanco descendente de SDA sea observado dos períodos antes que el de SCL para ser considerado como que ha llegado primero. Si la velocidad de las operaciones en SCL y SDA es demasiado rápida en relación con el reloj de sincronización, los dispositivos pueden percibir secuencias arbitrarias de señales altas y bajas en SCL y SDA; si una de esas secuencias parece dirigirse al dispositivo lento, puede reaccionar en consecuencia, aplastando cualquier otra comunicación que pueda estar en marcha.
No hay ninguna razón en particular para que los dispositivos en un bus I2C tengan que depender de la sincronización con un reloj del sistema (ser capaz de percibir dos umbrales discretos en SCL sería mejor), pero el hecho es que algunos dispositivos de hecho trabajan de esa manera. Ten en cuenta que incluso si un dispositivo que estuviera limitado a velocidades lentas internamente quisiera coexistir con un bus rápido, probablemente tendría que emplear, como mínimo, el estiramiento del reloj cada vez que ocurriera algo en lo que pudiera estar interesado.
Esto provocaría que algunas comunicaciones se produjeran más lentamente de lo que lo harían de otro modo, pero la degradación de la velocidad probablemente no sería tan grave como la que se requiere con el diseño de reloj sincronizado (la cantidad real por la que el dispositivo lento estira los relojes probablemente no sería tan grave como la cantidad por la que el reloj debe ser ralentizado para evitar los fallos del peor escenario en las unidades de reloj sincronizadas).