¿Cuáles son las opciones si las direcciones de esclavo I2C se encuentran en conflicto?

4

Ahora tengo diez sensores aceleradores (ADXL345) conectados a un solo PIC16F887 usando I2C. El problema es que ADXL345 solo tiene 2 direcciones de esclavo I2C configurables. Entonces trae conflicto.

Sé que NXP proporciona un multiplexor I2C que soluciona este tipo de problema, pero tengo diez sensores. Por lo que parece de ninguna ayuda.

    
pregunta longtengaa

2 respuestas

6

Diez ADXLs serían 5 pares con el pin ALT_ADDRESS.

NXP realiza conmutadores I2C de 2, 4 y 8 canales, por lo que podría usar un conmutador de 8 canales, que le permitiría hasta 16 ADXLs.

De forma alternativa, puedes girar tu propio interruptor en un ASIC o CPLD.

Una tercera opción sería deshacerse de I2C y usar la interfaz SPI en el ADXL. Esto significaría más pines del PIC para seleccionar los 10 chips, pero conéctelo con un decodificador de 4 a 16 y puede seleccionar cualquiera de ellos para comunicarse en el bus SPI con solo 4 pines del PIC (permitiría hasta a 15 ADXLs si reserva una dirección para "sin chip seleccionado").

    
respondido por el Majenko
0

Si bien es probable que sea posible juntar un poco de hardware adicional que solo permita que un dispositivo I2C vea cada transacción, hacerlo sin depender de ningún comportamiento no documentado puede funcionar mejor que usar SPI. Podría ser posible usar un selector de uno de diez para controlar los cables de selección de dirección en los dispositivos y solo usar una dirección cuando se habla con cualquiera de los dispositivos [el selector de uno de diez controlaría a qué dispositivo respondería esa dirección], pero no vi nada en la hoja de datos que indicara exactamente cuando el dispositivo muestrearía ese pin. Aún así, si desea usar I2C y puede encontrar algo que documente que el pin de dirección se puede usar de esa manera, o está dispuesto a apostar que si se puede usar de esa manera en los chips de hoy, seguirá siendo válido en el futuro corre, esa podría ser la forma más limpia de hacerlo.

    
respondido por el supercat

Lea otras preguntas en las etiquetas