¡Esta es una revisión vieja del documento!
[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:
SCLal menos 4,7 μs en0y 4 μs en1. Éstos pueden ser tiempos muy cortos para determinados slave que necesitan mas tiempo para procesar el dato de la líneaSDA.
- El slave puede ralentizar la cadencia de
SCLsi su tratamiento de los datos bit a bit es más lento que el del master. Para ello fuerza a0SCL, 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 enSCLhace que la línea pase a0, manteniéndola en ese estado. Sin embargo un flanco de subida no cambia el estado deSCLsi otro reloj esta todavía en nivel bajo0. Por lo tantoSCLpermanecerá a0tanto como el periodo mas largo de cualquier dispositivo cuyo nivel sea0. Los dispositivos que tienen un periodo mas corto de reloj0entran 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 nivel1. Por lo que hay que diferenciar entre los estados de reloj de los dispositivos y los estados de la líneaSCL.
- Resumiendo: La sincronización de la línea SCL se genera a través de…
- … la señal a
0por el dispositivo con el mas largo periodo, es decir el dispositivo mas lento, de nivel a0y … - … la señal a
1por el dispositivo con el mas corto periodo, es decir el dispositivo mas rápido, de nivel a1.
- Si un dispositivo fuerza la línea
SCLa0, el master aunque la quiera poner a1no lo consigue hasta que todos los dispositivos que la fuerzan a0la liberen, es decir la pongan a1.
- Cuando un receptor lee el bit
SDAconSCLa1, mientras trata dicha información fuerzaSCLa0hasta que esta listo para tratar el siguiente bit.