¿Por qué el decodificador da un signo de interrogación?

3

Estoy usando un ámbito para depurar I2C (bit banging) dejándolo capturar la señal. Creo que la salida debería ser buena, pero el decodificador del alcance da lo siguiente:

donde hay un signo de interrogación después del segundo byte (estoy haciendo una lectura de múltiples bytes aquí). ¿Alguien sabe lo que podría significar ese signo de interrogación? ¿Es un error?

Gracias

- EDIT 1

Añadir captura escalada.

- EDIT 2  Habiendo tomado el consejo de @Michael Karas, ahora he usado otra sonda para Ch1. De hecho, la vieja sonda era mala y mal compensada! Sin embargo, el decodificador todavía da un signo de interrogación.

    
pregunta Kar

3 respuestas

2

Observando de cerca su forma de onda (ahora que está limpia con una sonda de buen alcance), se puede analizar como se muestra a continuación:

La causa más probable de la? en el decodificador RIGOL I2C se debe a que el protocolo I2C se ha arruinado todo.

La primera parte del protocolo parece muy razonable. Más tarde se pone bastante desordenado Y es seguramente lo que ha llevado al problema. Recomendaría que se tome una mirada muy cuidadosa en las siguientes tres áreas. Una vez que se solucionen, las cosas pueden comenzar a mejorar.

Nota A. El proceso de inyección del inicio repetido parece extremadamente sospechoso. No debe requerir las transiciones adicionales en SDA para que el inicio repetido funcione.

Nota B. La zona de transición de pasar de la salida de la Dirección del esclavo en modo de lectura a la preparación de la lectura de datos tiene sospechas de transiciones adicionales en SDA.

Nota C. El carácter completo de la sincronización de SCL a partir de este punto es muy sospechoso. La sincronización del reloj debe intentar mantener el aspecto de los tres bytes anteriores de la sincronización del reloj. De hecho, si los tres bytes anteriores de la sincronización podrían ajustarse para dar un ciclo de trabajo más cercano al 50%, también podría ser una mejora.

    
respondido por el Michael Karas
2

El problema sobre el que escribí en los comentarios bajo la pregunta sobre la integridad de la señal de la forma de onda tiene que ver con la forma de onda SCL que se muestra a continuación:

Para poder garantizar que tiene comunicaciones confiables con el dispositivo de destino, será necesario asegurarse de que su controlador SCL pueda realmente llevar la señal SCL hasta el nivel de GND y no tener casi un voltio por encima del Nivel de GND. El dispositivo esclavo no funcionará correctamente si la señal del reloj solo baja a 1V.

La forma de onda SCL representada puede ser causada por una sonda de alcance que no ha sido compensada adecuadamente en frecuencia.

También es posible que haya sondeado la señal sin el cable GND del alcance conectado cerca de la fuente de la señal.

También es posible que tenga una sonda de alcance realmente mala o una con contactos internos defectuosos en los conectores.

Dado que la forma de onda que muestra para el SDA se ve tan limpia, es posible que desee capturar las formas de onda con las sondas intercambiadas para ver si el SCL se muestra correctamente con la otra sonda de alcance.

Si la forma de onda SCL que se muestra en el alcance del alcance es realmente una representación precisa de la forma de onda en la placa, entonces es necesario realizar algunos trabajos para corregir el problema.

    
respondido por el Michael Karas
1

Independientemente de los otros problemas, el signo de interrogación en la línea de decodificación I2C indica un no reconocimiento (NACK). La línea de datos se deja alta después del último byte, en este caso, lo que indica que el maestro ha terminado de aceptar datos.

    
respondido por el AJameson56

Lea otras preguntas en las etiquetas