Dirección del esclavo I2C

-1

¿Cuál es la mejor manera de descubrir si la dirección del esclavo I2C se da en el formato de 8 bits o 7 bits en la hoja de datos?

Como puedo ver en guía de programación para ADV7511 página 16 :

The SDA/SCL programming address for the Main Register Map is 0x72 or 0x7A,
based on whether PD/AD is pulled high (10KΩ resistor to power supply = 0x7A) or pulled low (10KΩ resistor to GND =
0x72) when power is applied to the supplies.

Tengo una resistencia desplegable de 10k en PD / AD, por lo que la dirección debe ser 0x72. Pero si esa es una dirección de formato de 7 bits, eso significa que tengo que agregar un bit más para R / W en LSB y desplazar esta dirección de 7 bits a la izquierda para una posición, y eso es 0xE4 para escritura o 0xE5 para lectura.

Cuando envío ese valor a través del I2C SDA, solo puedo leer la dirección del osciloscopio con un valor 0x64 (7 bits más alto en byte), por lo que asumo que esto no es correcto, porque lo que se envía y lo que Veo en el alcance no es lo mismo. ¿Algo limita esa dirección de esclavo de 7 bits o es demasiado alto? ¿Me estoy perdiendo algo?

    
pregunta Patrick

3 respuestas

2

No se encuentra en la Guía de programación ADV7511W PDF que la dirección que se proporciona está en formato de 8 bits, por lo que si está usando Zynq7002 necesita escribir la dirección del esclavo en formato de 7 bits en el registro de dirección de periféricos I2C, que es 0x72 > > 1 = 0x39 (PD / AD se tira al suelo con la resistencia de 10k).

Antes de que se envíe el byte de inicio de la transferencia, el valor (0x39) que escribió en el registro de direcciones se desplazará a la izquierda para una posición a los 7 bits superiores y el bit R \ W se insertará en el LSB de ese byte de inicio de la transferencia.

Ahora el esclavo reconoce cada byte, y tengo la posibilidad de leer su número de revisión correctamente.

La solución se encuentra en enlace

    
respondido por el Patrick
2

Considera esto:

Si está intentando usar la dirección 0x72 como una entidad de 7 bits, debe poder ver 0xE4 en el alcance como el primer byte I 2 que sale en SDA. Dado que solo está viendo 0x64, significa que no está utilizando el controlador de interfaz I 2 C (o el software si se trata de un bit). La pérdida del bit superior previsto no tiene nada que ver con si el documento ADV7511 está especificando una dirección de esclavo de 7 bits o no.

Entonces, sí, puede que sea necesario que experimentes en las direcciones necesarias para que el ADV7155 responda. Pero primero es necesario obtener el patrón de bits esperado en la línea SDA a la parte antes de intentar determinar los resultados de los experimentos. Ese esfuerzo requerirá que profundices en tu microcontrolador y su I 2 C registra la descripción. Y en el caso de que esté utilizando algún tipo de API de software preempaquetado para interactuar con los registros I 2 C, debe comprender si la interfaz de la API requiere una dirección de 7 bits o espera que tenga para proporcionarle una especificación de dirección de tipo de 8 bits.

    
respondido por el Michael Karas
1

Desde mi experiencia, la mayoría de las direcciones I2C se dan en formato de 7 bits, a menos que se indique explícitamente lo contrario (en tal caso dirían explícitamente, "... para leer use la dirección 0xYY y para escritura use la dirección 0xZZ ... ").

Pero como Michael Karas dijo en su respuesta, lo que se ve con el osciloscopio no tiene absolutamente nada que ver con cómo la hoja de datos del IC esclavo define la dirección I2C. De hecho, no tiene nada que ver con el esclavo en absoluto! Todo depende del maestro I2C. Obviamente, hay algo mal con el controlador I2C o el software de bit bit del microcontrolador o cualquier otro dispositivo que sea el maestro del bus.

¿Cómo has implementado el master? ¿Qué IC usas?

    
respondido por el nickagian

Lea otras preguntas en las etiquetas