multiplexores I2C anidados

0

Quiero proporcionar 12 actuadores desde un microcontrolador (núcleo de partículas) sobre I2C. El problema es que los controladores para los actuadores tienen todas las mismas direcciones I2C. Así que estoy considerando utilizar multiplexores I2C. Sin embargo, solo he encontrado un multiplexor I2C de 1 a 8 canales como el TCA9548A de Texas Instruments. La idea ahora es que tengo 1 multiplexor conectado directamente al microcontrolador. Este multiplexor está conectado a 3 multiplexores adicionales y cada uno de ellos está conectado a 4 controladores de actuador. Mi pregunta ahora es, si es posible anidar tales multiplexores I2C? Gracias de antemano!

    
pregunta Ditachi

2 respuestas

1

En cuanto a su pregunta directamente, sí, debería ser posible apilar los multiplexores, siempre que cada capa de mux tenga una dirección diferente de la capa anterior. Por ejemplo, si apila dos multiplexores en el siguiente tipo de arreglo:

   L1     L2

          /|---
    /|---|B|
   | |    \|---
---|A|
   | |    /|---
    \|---|C|
          \|---

Entonces los multiplexores son L1 tendrían una dirección para controlar estas líneas de selección, y luego los multiplexores en L2 necesitan una dirección diferente a la de L1 . A podría tener una dirección de 0x10 y tanto B como C podrían compartir la misma dirección de 0x12, por ejemplo.

Para que esto funcione, primero debe enviar un paquete a mux A para seleccionar con cuál de los muxes de segundo nivel desea hablar. Luego, enviaría un paquete a B o C para seleccionar con qué dispositivo hablar. Entonces podrías enviar paquetes a tu dispositivo. Esto podría tomar hasta 40 o más períodos de bits I 2 C antes de poder hablar con uno de los dispositivos. Cuanto más profundo los apiles, mayor será la sobrecarga.

Si bien no se responde directamente a la pregunta de si los mutliplexores pueden apilarse, hay alternativas. Hay una pregunta relacionada aquí que trata sobre I 2 C conflictos de direcciones. @ user3608541 señala en su respuesta que existen IC que pueden realizar la traducción de direcciones. Específicamente da un ejemplo de la LTC4316 .

Para ampliar esa respuesta, estos CI realizan la traducción de direcciones sobre la marcha. Esencialmente, se conectan en línea entre los dispositivos I 2 C maestro y esclavo y monitorean la comunicación entre los dos. Cuando se envía un bit de inicio, el siguiente byte es siempre la dirección del dispositivo. El IC de traducción de direcciones supervisa el bit de inicio y, una vez detectado, realizará modificaciones en la dirección a medida que avanza. En el caso del LTC4316, las modificaciones son una simple adición: el maestro envía una dirección y el esclavo recibe el paquete, pero a la dirección se le ha agregado algún factor constante. El resto del paquete pasa sin modificación.

El resultado neto de esto es que si tiene muchas copias del mismo dispositivo de dirección fija, puede colocar cada una detrás de un IC de traducción de direcciones y configurar los IC para agregar diferentes factores. Por ejemplo, el primero agrega 1, el segundo agrega 2 y así sucesivamente. Esto significaría que para contactar con el primer esclavo, el maestro tendría que hablar con su dirección minus 1 . Para hablar con el segundo esclavo, el maestro tendría que menos 2 . Esto le da a cada uno una dirección única.

Ahora, si estos circuitos integrados son más baratos que los multiplexores, no lo sé (una búsqueda rápida en DigiKey los muestra a $ 3 cada uno por una cantidad baja), pero tienen una clara ventaja en que no tiene la sobrecarga adicional de tiempo Pasé seleccionando la salida correcta del multiplexor.

    
respondido por el Tom Carpenter
1

No creo que realmente necesites anidar los multiplexores. El TCA9548A le permite desactivar todos los puertos posteriores. Por lo tanto, puede hacer lo que quiera con solo un par de ellos conectados al procesador principal (y establecerlos en diferentes direcciones).

    
respondido por el Peter Green

Lea otras preguntas en las etiquetas