Depurando el bus I2C usando un osciloscopio

1

¿Es posible depurar un bus I2C con un osciloscopio de dos canales (más un disparador externo)? He estado intentando hacerlo, para detectar una sola transacción desde el principio hasta el final, pero me resulta difícil establecer un activador correctamente en el ámbito.

¿Es posible construir algún tipo de compuerta AND lógica con SCL & SDA como entradas, y alimentar la salida al disparador externo?

Nota: tengo un alcance digital simple de 2 canales, sin funciones adicionales.

    
pregunta Mellowcandle

3 respuestas

2

Si puede controlar el código en el maestro i2c (supongo que esto está relacionado con su pregunta anterior, usando una MCU), puedo ver dos opciones fáciles que no requieren ningún hardware fuera de su configuración actual para generar el disparador :

  • Use cualquier pin adicional que pueda tener (o reutilice temporalmente uno existente): Afírmelo justo antes de las transacciones i2c, desmóntelo justo después.
  • Inserte un retraso conocido entre transacciones, y active el pulso más tiempo que dicho retraso en la línea scl.
respondido por el apalopohapa
2

Lo más fácil sería disparar en la condición de inicio. Eso es SDA cayendo mientras SCL es alto. Esto podría detectarse con un flip flop D cronometrado por el flanco descendente de SDA y con SCL como entrada de datos. Es probable que el desencadenador se reinicie en algún momento durante el mensaje, ya que es probable que el SDA se mueva. Sin embargo, en esos casos SCL siempre debe ser bajo. Configure el alcance para que se active en el borde ascendente de Q para que se active al inicio de un mensaje.

    
respondido por el Olin Lathrop
1

Muchos ámbitos digitales más nuevos tienen la capacidad de decodificar I2C de forma nativa, y pueden configurarse para activarse en una variedad de condiciones. Vergüenza por la tuya. (¿Qué alcance está utilizando, por cierto?)

Si hay suficiente tiempo de inactividad del bus (SCL y SDA alta) antes del evento, simplemente podría hacer una captura de un solo disparo del primer borde de SDA bajando, lo que correspondería al evento de inicio. Asegúrate de tener la base de tiempo de activación cerca del borde izquierdo de la pantalla para capturar el máximo de datos.

Si su alcance puede hacer un disparo un poco más avanzado, puede buscar el borde de SDA descendente mientras SCL es alto, lo que evitaría falsos disparos en la transmisión de datos (es decir, no disparar cuando SCL es bajo y SDA cambia, que es el Norma distinta de las condiciones de arranque / parada).

Ninguno de estos requiere el uso de activadores externos o circuitos adicionales. Usted puede use un D-latch para generar un activador de evento de inicio si tiene que ser externo: Q irá de bajo a alto en una condición de inicio válida. (No he probado esto, así que YMMV)

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas