Traductores de direcciones i2c en cascada?

0

Estoy intentando conectar muchos (~ 80) sensores de distancia ToF VL53L0X a un solo bus i2c. Tienen la dirección i2c predeterminada 0x52, que es programable, pero no persistente. Por lo tanto, puedo elegir entre la activación / desactivación selectiva de sensores (a través de la expansión GPIO en i2c, etc.) y reprogramar cada dirección individual al inicio, o hacer que las direcciones se traduzcan sobre la marcha en hardware. Esto es sobre la segunda opción.

Habría el traductor T (algo así como LTC4316, pero preferiblemente uno sin divisores de voltaje) siempre entre el sensor S y el bus, así, cada traductor configurado para una dirección diferente, por supuesto:

master ---+---+---+---+
          T   T   T   T
          S   S   S   S

Ahora me gustaría poder conectar otros módulos idénticos como este uno después de otro, pero para evitar conflictos de direcciones, cada módulo tendría un traductor N al principio:

(--  module 1 --)     (--  module 2 --)      (--  module 3 --)

M---+---+---+---+ === M---+---+---+---+  === M---+---+---+---+
    T   T   T   T         T   T   T   T         T   T   T   T
    S   S   S   S         S   S   S   S         S   S   S   S

El módulo 1 se traduciría por M , el módulo 2 por MM , el módulo 3 por MMM y así sucesivamente, por ejemplo como este (con la dirección del sensor 0 para simplificar, T agregando 1, M añadiendo 4)

global address        4  5  6  7     8  9 10 11   12 13 14 15
module-level address  0  1  2  3     0  1  2  3    0  1  2  3
sensor address        0  0  0  0     0  0  0  0    0  0  0  0

Me gustaría comentar si esta es una buena forma de avanzar lógicamente, si tiene sentido eléctricamente y quizás incluso una sugerencia para IC similar al LTC4316, con la dirección de traducción seleccionable tirando de los pines alto / bajo.

    
pregunta eudoxos

1 respuesta

2

Parece costoso y requiere muchos recursos tener un traductor de direcciones para cada sensor. Tal vez podría usar un interruptor analógico controlado por I2C en su lugar, y simplemente cambiar el SCL a cada uno de los sensores para que no vean ningún comando cuando se desconecta.

Por ejemplo, el Linear Tech LTC1380 es un mux analógico I2C controlado 8: 1 que también se puede desactivar para tener Sin conexión analógica.

Puede simplemente poner en paralelo dos de los LTC1380 para dividir el SCL en 16 rutas diferentes y luego colocar otro LTC1380 en cada una de las 16 rutas para hablar con 8 sensores diferentes en cada una de las 16 rutas del reloj.

Otra posibilidad es mantener 7 canales de mux en cada placa y pasar uno a la siguiente. Las siguientes tablas pasantes también tendrían 7 a bordo y una pasada. La resistencia de ~ 100 ohmios del interruptor analógico eventualmente causaría problemas, pero probablemente podría salirse con 4 niveles de profundidad con resistencias pullup de 4.7K. Después de 4 niveles, te quedarás sin direcciones para los muxes.

Si combina los dos métodos, podría tener un 8: 1 en el nivel superior hablando con 8 3 cadenas profundas con 7 senores cada uno, lo que le otorga 8 * 21 = 168 sensores.

Para ayudar a mantener la calidad de la señal, quizás pueda combinar los muxes analógicos con LTC-4302 , que es básicamente una conexión programable entre dos buses I2C que pueden tener 32 direcciones de pin diferentes programadas. También tiene una aceleración en el tiempo de subida, lo que podría ayudar con los autobuses largos.

No importa lo que haga, asegúrese de no exceder las especificaciones de carga capacitiva I2C (~ 400pf). Dividir los autobuses puede ayudar con eso.

    
respondido por el crj11

Lea otras preguntas en las etiquetas