3 votos

Cómo superar el estiramiento del reloj en I2C

Tengo el problema de estiramiento del reloj en mi línea I2C, adjunto la siguiente instantánea de la misma..

enter image description here

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

¿Debería conseguir el driver con la solución, debería cambiar la resistencia de pull up o debería jugar con la capacitancia? Necesito una pista de por qué estoy recibiendo este estiramiento de reloj.

Con toda la lectura, he entendido por qué sucede. Estoy tratando de entender cómo abordarlo.

Cualquier pensamiento es muy apreciado, gracias

7voto

Stefan Arentz Puntos 151

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

Relevante hoja de datos cita:

La línea SCL del dispositivo sólo funciona como entrada. Se requiere una resistencia pullup 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)

Así que no puede tirar de la línea SCL baja. El periférico de tu microcontrolador lo hace porque no se llena de datos lo suficientemente rápido.


Mi enfoque preferido para conseguir tiempos de transmisión más cortos, es utilizar DMA, que en la mayoría de los casos da un rendimiento óptimo.

Si el DMA no es una opción y estás utilizando un enfoque basado en interrupciones, asegúrate de que los próximos datos a transmitir están disponibles y tu interrupción es muy rápida para poner el siguiente byte de datos en el registro.

4voto

RelaXNow Puntos 1164

Ve a leer las especificaciones de la CII. El estiramiento del reloj es la forma que tiene el esclavo de ralentizar el bus a la velocidad que puede manejar. No es una función de resistencias y condensadores. Las resistencias de pullup tienen que ser las necesarias para subir la línea, pero sin requerir más de la corriente máxima para que la línea esté baja. En cuanto a los condensadores, no pongas condensadores en ninguna de las líneas IIC.

El estiramiento del reloj no es un problema a resolver. Se trata de que el sistema funcione correctamente para que el esclavo funcione como es debido. No hay nada que arreglar aquí. De todos modos, no deberías estar aquí a este nivel sin entender el IIC.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X