¿Puede I2C Master estirar el reloj?

2

El manual I2C de NXP permite el estiramiento del reloj (manteniendo SCL bajo) por dispositivos esclavos para que el maestro espere a que procesen los datos, las interrupciones y demás. Todo esto está bien y bien, aunque no tener tiempo de espera parece cuestionable.

Ahora, me pregunto si un controlador maestro puede usar el mismo método, por ejemplo, cuando se espera que el procesador host proporcione / recopile datos. Por simplicidad, solo considero una configuración maestra única, aunque no debería importar.

Editar: En aras de la claridad, me preocupan los casos en los que durante una transferencia de varios bytes, el procesador host no puede proporcionar / recopilar datos a / desde el controlador maestro. No es factible emitir una PARADA y, posiblemente, restablecer la máquina de estado del esclavo (contadores de incremento automático, registros internos de 32 bits, etc.).

    
pregunta Arne

2 respuestas

3

Al ser el maestro el generador de reloj, de hecho está reduciendo la frecuencia del reloj por sí mismo, a diferencia de un esclavo, que tiene el reloj generado por el maestro, pero quiere indicar al maestro que mantenga it.

Según Wikipedia :

  

Aunque el maestro también puede mantener baja la línea SCL durante el tiempo que desee , el término   El "estiramiento de reloj" se usa normalmente solo cuando los esclavos lo hacen.

Pero

  

Para garantizar un rendimiento de bus mínimo, SMBus establece límites en cuanto a qué tan lejos pueden estar los relojes   estirado. Los anfitriones y esclavos que se adhieren a esos límites no pueden bloquear el acceso al bus para > más de un breve periodo de tiempo, lo cual no es una garantía hecha por sistemas I²C puros.

Por lo tanto, cuando use el estiramiento de reloj, asegúrese de que los dispositivos lo admitan, ya que, por razones de marcas registradas, I2C se implementa como otros nombres y no tiene todas las características. Pero eso es más una preocupación para los dispositivos esclavos.

    
respondido por el Diego C Nascimento
1

I 2 El "estiramiento" del reloj C se refiere al mecanismo por el cual un dispositivo esclavo mantiene bajo SCL después de que el maestro lo ha puesto bajo, para evitar que subiendo de nuevo antes de que el esclavo esté listo para procesar el siguiente bit de datos.

Si el maestro está esperando más datos de, por ejemplo, una CPU host, en primer lugar, simplemente no reducirá el nivel de SCL; simplemente lo dejará alto hasta que pueda comenzar la próxima transferencia de datos. No hay ninguna razón para que el maestro mantenga SCL bajo durante un período de tiempo prolongado.

La única excepción sería durante la fase de arbitraje de una configuración de maestro múltiple. En ese caso, se producirá cierto alargamiento de reloj como resultado de que los distintos maestros no estén estrictamente en fase cuando inician sus transferencias.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas