Cómo superar el estiramiento del reloj en I2C

2

Tengo el problema de alargamiento del reloj en mi línea I2C, adjunto es la siguiente instantánea de ella ...

Tengo una placa Kinetis K64 que se comunica con el expansor de puertos MAX7304 a 400 KHz.

¿Debo hacer que el conductor tenga una solución alternativa, o si se debe cambiar la resistencia de levantamiento o jugar con capcitancia?

Con todas las lecturas, no he entendido por qué sucede. Estoy tratando de entender cómo abordarlo.

Cualquier pensamiento muy apreciado.

Gracias

    
pregunta user2054364

2 respuestas

6

El MAX7304 no es capaz de alargar el reloj, por lo que el problema reside en su controlador I²C en su software.

Relevante hoja de datos cita:

  

La línea SCL del dispositivo funciona solo como entrada. Se requiere una resistencia de recuperación en SCL si hay   múltiples maestros en la interfaz de 2 hilos, o si el maestro   en un sistema de un solo maestro tiene una salida SCL de drenaje abierto.

(énfasis mío)

Por lo tanto, no puede bajar la línea SCL. El periférico del microcontrolador lo está haciendo porque no se llena con datos lo suficientemente rápido.

Mi método preferido para reducir los tiempos de transmisión es utilizar DMA, que en la mayoría de los casos ofrece un rendimiento óptimo.

Si DMA no es una opción y está utilizando un enfoque de interrupción, asegúrese de que los próximos datos a transmitir estén disponibles y que su interrupción sea muy rápida para colocar el siguiente byte de datos en el registro.

    
respondido por el Arsenal
3

Ve a leer la especificación IIC. El estiramiento del reloj es una manera de los esclavos de reducir la velocidad del autobús a la velocidad que puede manejar. No es una función de resistencias y condensadores. Las resistencias pullup deben ser lo que necesitan para subir la línea, pero no requieren más que la corriente máxima para que la línea sea baja. En cuanto a los condensadores, no coloque condensadores en ninguna de las líneas IIC.

El estiramiento del reloj no es un problema a resolver. Es el sistema que funciona correctamente para permitir que el esclavo funcione según lo previsto. No hay nada que arreglar aquí. No debería estar aquí a este nivel sin entender la IIC de todos modos.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas