¿Importa la velocidad de reloj cuando se recupera del bloqueo I2C del bus?

3

Cuando hay un bloqueo I2C causado por un dispositivo esclavo que conduce la línea SDA baja, necesita generar manualmente algunas señales de reloj haciendo un simple golpe de bit en el pin SCL. Pensé que esto debería hacerse con la misma frecuencia que la comunicación I2C se estaba ejecutando antes del bloqueo, pero también funciona para mí si hago un poco de golpeo con una frecuencia mucho menor. Digamos que tengo la velocidad del reloj I2C configurada para ser 100kHz, luego tengo un bloqueo y genero algunas señales de reloj con una frecuencia de 4kHz e inmediatamente I2C está funcionando bien otra vez. Por favor, explique si la frecuencia del bit bitging es importante al desbloquear el bus I2C.

    
pregunta BartholomeusR

2 respuestas

0
  

¿Importa la velocidad del reloj cuando se recupera del bloqueo de bus I2C?

Respuesta simple: No.

Respuesta detallada: Como saben, los esclavos no están programados para ejecutarse a una frecuencia específica porque SCLK es generado y "servido" por el maestro. Para garantizar un restablecimiento adecuado, solo consulte el diagrama de tiempo que se muestra en la hoja de datos (es decir, la duración mínima del pulso de alta y baja).

Después de 9 o 10 pulsos de reloj, el esclavo debe enviar un ACK y liberar la línea SDA. Si no es así, es posible que se requiera un reinicio del hardware o un ciclo de energía (¡Dios no lo permita!).

    
respondido por el Rohat Kılıç
1

Parece que su problema es que algunos esclavos del bus IIC mantienen bajo el nivel de SDA cuando no deberían hacerlo.

Su solución es dar pulsos de reloj al esclavo hasta que finalmente deje de funcionar SDA. Estos son relojes ordinarios desde el punto de vista del esclavo. Puede usar cualquier velocidad de reloj que el bus y ese esclavo puedan admitir.

Tan pronto como el esclavo libera SDA, haga un arranque de bus para restablecer la lógica de decodificación de mensajes de todos los esclavos.

Algo malo sucedió en este lío en primer lugar. O bien el esclavo tiene errores o hubo errores de datos o de reloj en el bus, de modo que el esclavo recibió algo que el maestro no envió. Ambos son problemas serios. Si es lo último, es probable que tenga ruido en el bus y / o intente ejecutarlo demasiado rápido para los pullups y la capacidad en el bus.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas