====== [Bus I2C] Sincronización de la señal de reloj ====== * La señal de reloj generada por el master debe cumplir unos tiempos mínimos. Por ejemplo para 100 kHz: ''SCL'' al menos 4,7 μs en ''0'' y 4 μs en ''1''. Éstos pueden ser tiempos muy cortos para determinados slave que necesitan mas tiempo para procesar el dato de la línea ''SDA''. * El slave puede ralentizar la cadencia de ''SCL'' si su tratamiento de los datos bit a bit es más lento que el del master. Para ello fuerza a ''0'' ''SCL'', lo que obliga al master a permanecer en un estado de espera, y la vuelve a liberar, es decir desbloquear, cuando está listo para tratar otro bit, ya sea para leerlo o escribirlo, para continuar la transferencia de datos. * Generalizando * La sincronización del reloj se realiza gracias a la conexión AND de todos los dispositivos del bus a la línea ''SCL''. Esto significa que un flanco de bajada de un Master en ''SCL'' hace que la línea pase a ''0'', manteniéndola en ese estado. Sin embargo un flanco de subida no cambia el estado de ''SCL'' si otro reloj esta todavía en nivel bajo ''0''. Por lo tanto ''SCL'' permanecerá a ''0'' tanto como el periodo mas largo de cualquier dispositivo cuyo nivel sea ''0''. Los dispositivos que tienen un periodo mas corto de reloj ''0'' entran en un periodo de espera. * Cuando todos los dispositivos conectados al bus han terminado con su periodo ''0'', es decir están preparados para el tratamiento de un nuevo bit, la línea del reloj se desbloquea y pasa a nivel ''1''. Por lo que hay que diferenciar entre los estados de reloj de los dispositivos y los estados de la línea ''SCL''. * Resumiendo: La sincronización de la línea SCL se genera a través de... * ... la señal a ''0'' por el dispositivo con el mas largo periodo, es decir el dispositivo mas lento, de nivel a ''0'' y ... * ... la señal a ''1'' por el dispositivo con el mas corto periodo, es decir el dispositivo mas rápido, de nivel a ''1''. * Si un dispositivo fuerza la línea ''SCL'' a ''0'', el master aunque la quiera poner a ''1'' no lo consigue hasta que todos los dispositivos que la fuerzan a ''0'' la liberen, es decir la pongan a ''1''. * Cuando un receptor lee el bit ''SDA'' con ''SCL'' a ''1'', mientras trata dicha información fuerza ''SCL'' a ''0'' hasta que esta listo para tratar el siguiente bit. \\