Confundido sobre el direccionamiento I2C en PCA8574/74A

La hoja de datos del NXP PCA8574/74A contiene la siguiente línea sobre direccionamiento (p.6):

Cuando AD2, AD1 y AD0 se mantienen en VDD o VSS, se aplica la misma dirección que PCF8574 o PCF8574A.

Me temo que no entiendo lo que se quiere decir aquí. ¿Alguien puede aclarar por favor?
Además, mientras que los rangos de direcciones se dan como (dependiendo de las entradas AD0..AD2)

PCF8574: 0x20 - 0x27
PCF8574A: 0x38 - 0x3F

tanto el texto como la figura 7 sugieren que la dirección del dispositivo se puede elegir libremente entre 0x01 y 0x7F (aunque no veo cómo se haría esto).

texto alternativo

¿O estoy leyendo esto mal?

Respuestas (1)

La hoja de datos indica claramente que hay "8 direcciones esclavas programables que usan 3 pines de dirección" allí mismo en la Sección 2, viñeta 7. En otras palabras, hay una dirección de 7 bits, 4 de esos bits son iguales para todos los chips ( internamente codificado ), y 3 de ellos (bits 0, 1 y 2 en particular) son programables configurando (es decir, conectando eléctricamente ) los valores de los pines a Vss (GND) o Vdd (es decir, 5V). La codificación interna de los 4 bits principales depende del chip que esté utilizando; la tabla 4 indica que esos bits son A[6:3] = 0100 para el PCA8574 y la tabla 5 indica que esos bits son A[6:3] = 0111 para PCA8574A.

Para que quede muy claro, para PCA8574 la dirección más baja posible es 010 0000 == 0x20 y la dirección más alta posible es 010 0111 == 0x27. Del mismo modo, para PCA8574A, la dirección más baja posible es 011 1000 == 0x38 y la dirección más alta posible es 011 1111 == 0x3F.

De acuerdo, y así es como se suelen configurar los dispositivos I2C, pero la figura 7 sugiere que A[6:3] puede ser cualquier cosa entre 0000 y 1111, y el texto también dice expresamente que 111 1100 está excluido.
@stevenvh La Figura 7 simplemente establece el orden de bits (es decir, el bit 6 es el bit más significativo y el bit 0 es el bit menos significativo y debe ir seguido del indicador r/w) con respecto a la transmisión en el bus. 111 1100 se excluye porque las únicas direcciones permitidas son 011 1xxx y 010 0xxx. Las exclusiones para la llamada general es que simplemente "no es compatible" con el dispositivo. No podría decir qué es "especial" sobre la dirección 0b1111100 == 0x7C, no creo que tenga ningún significado en el protocolo I2C... probablemente solo sea un FYI del fabricante para mantener ese valor "fuera del bus".
@stevenvh De manera conservadora, creo que lo que dicen es que no puede usar el PCA8574A en un sistema que (a) usa una llamada general o (b) tiene algún otro dispositivo con la dirección 0x7C, ya que el PCA8574A no puede tolerar esa condición "por alguna razón." Si el PCA8574A es el único dispositivo I2C en su bus, probablemente no sea una restricción que le interese.
@stevenvh: Esa figura 7 es al menos engañosa, si no completamente incorrecta. El título indica que es para el PCA8574/74A, pero para estos chips solo los 3 bits de dirección inferiores son programables, los bits superiores son fijos. Entonces, o el elogio que abarca los bits programables es incorrecto, o el título debería ser algo así como "dirección I2C general de 7 bits".