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 retraso mínimo en particular;
- el orden relativo de los flancos ascendentes y descendentes es de importancia crítica.
Debido a la diferencia en la fuerza del conductor y la capacitancia de la línea, sería teóricamente posible que un dispositivo responda a un borde de caída algo lento en SCL al conducir SDA tan rápido que otro dispositivo vea caer primero a SDA.
Podría haber sido posible definir múltiples umbrales lógicos en SCL, y especificar que para que se considere que un flanco descendente en SCL viene después de un borde en SDA, todavía debe estar por encima de 2/3 VDD cuando el borde en SDA se detecta, pero es posible que un dispositivo no haga valer 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 bordes de caída casi simultáneos en SDA y SCL generalmente considerarán que el borde en SCL ocurrió primero a menos que esté precedido sustancialmente por el borde en SDA. Algunas implementaciones de I2C manejan esto mediante la sincronización de SCL y SDA con algún reloj externo y requieren que se observe un flanco descendente de SDA dos períodos antes que el de SCL para que se considere que es lo 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 parece que una de esas secuencias se dirige al dispositivo lento, puede reaccionar en consecuencia, aplastando cualquier otra comunicación que pueda estar ocurriendo.
No hay ninguna razón particular por la que los dispositivos en un bus I2C deban depender de la sincronización con el reloj del sistema (sería mejor poder detectar dos umbrales discretos en SCL), pero el hecho es que algunos dispositivos funcionan de esa manera. . Tenga en cuenta que incluso si un dispositivo que estaba limitado a velocidades bajas internamente quisiera coexistir con un bus rápido, es probable que tenga que emplear el estiramiento del reloj en cualquier momento en el que esté pasando algo en lo que pueda estar interesado.
Esto causaría que algunas comunicaciones se produzcan más lentamente de lo que podrían hacerlo, pero la degradación de la velocidad probablemente no sería tan mala como se requiere con el diseño sincronizado con el reloj (la cantidad real por la cual el dispositivo lento alarga los relojes no sería tan malo como la cantidad en la que el reloj debe reducirse para evitar fallas en el peor de los casos en las unidades de reloj sincronizadas).