i2c lee el error pero la sonda es exitosa

0

¿Podría decirme un escenario en el que la sonda i2c proporcione la dirección del esclavo pero el comando de lectura i2c falla?

    
pregunta md.jamal

1 respuesta

1

Como una pregunta genérica, no tiene sentido, ya que no existe un estándar común para niveles más altos de comunicación en el bus I2C. Es un poco mejor para SMBus (formato de mensaje estándar en la parte superior de la especificación I2C), pero la mayoría de los chips no son compatibles con el estándar SMBus. Usted debe leer y comprender la hoja de datos de un dispositivo en particular antes de usarla.

Los comandos i2cdetect y i2cdump son muy hostiles, y se supone que debes tomar en serio la advertencia y ser consciente de lo que estás haciendo.

En su caso particular, el método de sondeo predeterminado para la dirección 0x1a es enviar la dirección del dispositivo con el indicador de escritura establecido, verificar el ACK del dispositivo y DETENER la comunicación directamente. Así que has aprendido que el dispositivo @ 0x1a reconoce su dirección, nada más. Luego, i2cdump en el modo predeterminado (byte) funciona enviando un solo byte al dispositivo seguido de una condición de INICIO en el bus I2C repetida, re-direccionando en el modo de lectura y seguido de un solo byte. Esta secuencia se repite con bytes iniciales incrementados una y otra vez. Su salida muestra que el dispositivo respondió con NACK en algún lugar durante esta secuencia. Los puntos posibles (según el protocolo de bus I2C) son después de escribir el primer byte o después de re-direccionar en modo de lectura.

Dicho esto, ha mencionado que su chip en particular es WM8985 . Cuando abre la hoja de datos , página 88 y en particular, puede ver que este chip espera 16 bits de datos de escritura, y no se menciona ninguna funcionalidad de lectura. Así que sí, @linuxfan tiene razón el chip es solo dispositivo de escritura . Además, deberías comunicarte con él enviando bloques de escritura de 16 bits.

Volver a la pregunta genérica original. Es muy posible que los dispositivos que son legibles no devuelvan datos cuando se ejecuta el comando (predeterminado) i2cdump . Por varias razones, pero probablemente simplemente porque el mecanismo de acceso "escriba la dirección del registro de 8 bits, lea 8 bits de los datos del registro" no es válido para este dispositivo en particular, y debe comenzar la lectura mediante algún procedimiento específico descrito en la hoja de datos.

    
respondido por el Martin

Lea otras preguntas en las etiquetas