El pin SDA en las líneas I2C parece extraño

Estoy tratando de analizar los comandos I2C enviados por un software de PC al chip R3910 DSP

El software utiliza una caja de programación (proporcionada por la misma empresa que fabrica el chip R3910) para comunicarse con el chip a través de I2C. El software puede enviar comandos para hacer cosas como silenciar/reactivar el chip, cambiar parámetros, habilitar funciones de desactivación, etc. El chip tiene pines SCL y SDA dedicados y la lógica alta en estas líneas es de alrededor de 1,29 V, la lógica baja es 0.

Estoy usando el pin de entrada analógica de un analizador lógico LHT00SU1 y el software PulseView para ver los cambios en las líneas SDA y SCL. La línea SCL parece mostrar un patrón normal, consistente con lo que se esperaría que pareciera un comando I2C. A continuación se muestra una sección de los datos totales recopilados en el pin SCL al enviar el comando de silencio desde el software de PC:

ingrese la descripción de la imagen aquí

La línea SDA, sin embargo, parece normal en algunos lugares y distorsionada en otros.

ingrese la descripción de la imagen aquí

Los primeros ciclos en el lado izquierdo de esta figura se ven bien, y lo que esperaría en una línea I2C, pero en el medio, la imagen se ve un poco extraña, por ejemplo, la lógica baja no llega a 0, mientras que en el cierto No estoy seguro de lo que está pasando en absoluto. Obtengo este mismo patrón en la línea SDA si repito el experimento con una tasa de muestreo más alta para el analizador lógico. He visto un patrón similar al ver la línea SDA usando un osciloscopio de alta calidad, así que estoy pensando que esto no está relacionado con la frecuencia de muestreo de mi analizador lógico.

¿Obtengo la lectura correcta en las líneas SDA/SCL?

La conexión de hardware actual se parece a esto.

esquemático

simular este circuito : esquema creado con CircuitLab

Los pines del programador están conectados directamente a las almohadillas I2C en el chip, mientras que conecto las almohadillas SCL, SDA y GND directamente a mi programador. El circuito real se ve así:

ingrese la descripción de la imagen aquí

He leído en algunos blogs que las líneas I2C requieren resistencias pull up, pero los esquemas de muestra del chip R3910 no mencionan ninguna resistencia pull up. Además, puedo controlar el chip usando la PC sin problemas (por lo que la señal I2C en sí no se daña) y los datos en la línea SCL también parecen normales, por lo que asumo que el chip tiene pull ups internos para las líneas I2C. Conecto el programador con el chip R3910 en una PC de escritorio, mientras uso el analizador lógico en una computadora portátil separada que funciona con batería, por lo que el analizador lógico y el programador están completamente separados entre sí (leí sobre la conexión a tierra que causa problemas al conectar la lógica barata analizadores y programador para el dispositivo bajo prueba a la misma PC).

¿Qué está causando la distorsión en mi señal SDA y cómo puedo hacer que se vea mejor en mi analizador lógico?

¿Cuál es la frecuencia de reloj I2C que usas?
@MituRaj Creo que ronda los 300 kHz.
¿Está utilizando un R3910 o un R8910? Por favor, corrija el esquema del texto en consecuencia. Si es posible, proporcione también un enlace a la hoja de datos.
¿Tiene posibilidad de reducir la frecuencia de funcionamiento? y también para monitorear el voltaje del bus con un multímetro digital cuando el bus está inactivo.
@Umar Creo que la frecuencia del reloj I2C está arreglada, no puedo encontrar ninguna opción en el software de PC para arreglar esto. Los voltajes de pin inactivo son: Vcc: 1,296 V, SDA: 1,296 V, SCL: 1,296 V
Según la hoja de datos, el voltaje SDA máximo es de 1,25 V, por lo que ya hay algún problema con su configuración. Es posible que necesite un cambiador de nivel bidireccional para operar esto de manera segura. También su publicación dice 1.37V, que es demasiado
¿El chip R3910DSP tiene tapas de desacoplamiento?
@Huisman, consulte la actualización de la hoja de datos
@Maple, ¿crees que necesito un cambio de nivel entre el programador y el chip? El programador es fabricado por el fabricante de chips y según ellos se pueden conectar directamente. Pero el hecho de que los voltajes inactivos de I2C sean mayores que el máximo de la hoja de datos es realmente extraño
@Huisman No lo creo
Creo que Maple está sugiriendo en la dirección correcta. Respecto a los tapones de desacoplamiento: (casi) nunca está de más añadirlos.
@Maple lo siento, los 1,37 V fueron un error, en realidad son 1,29 V
@ user13267 bueno, todavía demasiado. Probaría el cambio de nivel solo para ver si ayuda. En cuanto a las tapas de desacoplamiento, en este caso particular el dispositivo es muy especializado. Es más o menos una versión SoC de audífono, con solo batería, micrófonos y un interruptor requerido.
@Maple, sí, es por eso que asumí que los pull ups I2C también estaban integrados. Además, el programador es estándar, fabricado por los fabricantes de chips. ¿Podría ser que la hoja de datos tenga un error en su lugar? También puedo controlar el chip muy bien, así que no creo que los comandos I2C estén dañados. Además, las distorsiones en el gráfico no son aleatorias, obtengo el mismo patrón cada vez que emito el mismo comando desde el software de la PC.
Bastante seguro de que necesita pull-ups allí que reducirían su voltaje.
Parece que el maestro es mucho más fuerte para derribar que el esclavo. Puede significar que hay pull-ups demasiado fuertes, pero si los voltajes están dentro de la especificación de nivel lógico para cada chip en el bus, entonces está bien. Algunos chips tienen controladores de salida muy débiles, o puede haber resistencias en serie en la placa esclava, por lo que esta también puede ser la razón de un voltaje más alto para una lógica baja.

Respuestas (2)

El último pulso SCL de cada serie pertenece al bit ACK. Para operaciones de direccionamiento y escritura, la línea SDA es controlada por el esclavo durante este tiempo de bit. A la derecha de su gráfico inferior están las operaciones de lectura, donde el comportamiento se invierte, y ahora son los 8 bits de datos que no se extraen correctamente, mientras que el bit ACK del host está bien.

Parece que su esclavo no puede bajar correctamente la línea SDA a GND. Compruebe el cableado de GND. Especialmente, asegúrese de que no haya una corriente alta en la línea GND debido a algún cortocircuito en la placa del dispositivo.

Tampoco pase corriente de suministro para relés, etc. a través de la línea GND. Utilice una fuente de alimentación local para la placa externa. Si no puede evitar esto último, use diferencial I²C en su lugar.

No estoy conectando relés ni nada más a este circuito. El circuito básico es simplemente la placa del programador conectada al chip (conectado como lo especifica el fabricante; el programador es el programador estándar para este chip) y funciona perfectamente. Mi única adición es que aproveché las conexiones sda, scl y gnd para el analizador lógico

Sugiero usar un osciloscopio. La nota en los estados del analizador lógico

Desde el enlace en la pregunta:

El Noname LHT00SU1 es un analizador lógico de 8 canales basado en USB con una frecuencia de muestreo de hasta 24 MHz, con 1 canal analógico adicional ( en teoría, 2, pero solo se puede usar uno a la vez ; ancho de banda analógico de 3 MHz).

Este podría ser el problema de raíz. No sospecho del cableado ya que la funcionalidad siempre está bien cuando se programa a través de una PC

He probado un osciloscopio antes, pero el comando i2c general es muy largo (las capturas de pantalla publicadas aquí son solo una pequeña sección) y no es posible ver todo en mi osciloscopio. Pero en raras ocasiones, cuando logré detener la visualización del osciloscopio mientras ocurría la transferencia ic2, he visto picos similares a los que se ven en el lado derecho de la imagen inferior. También sé lo de los dos canales, he conectado la línea i2c al canal que puede mostrar el software pulseview
¿Puedes desconectar el esclavo y luego monitorear la línea i2c... tal vez solo con la terminación pull-up externa? Y luego controle el reloj y las líneas de datos tanto como sea posible. Entiendo que el esclavo no estará allí.
El programador no funcionará sin el chip conectado
¿Puedes monitorear la corriente a través de la línea SDA?
No sé si tengo el equipo para hacer eso, preferiría métodos alternativos para solucionar este problema.