Las direcciones I²C. ¿Solución de conflictos?

#1
Voy a preguntar una obviedad:
Estoy haciendo unos cuantos circuitos que llevan bastantes cosas colgando del bus I²C,
¿Que pasa cuando dos circuitos tienen la misma dirección?... que no funcionan por que chocan
Y esta la pregunta de verdad:
¿Como se soluciona?
  • Cambiando de dirección uno de los dispositivos en conflicto... No en todos es posible y no en todos los modulitos premontados ese pin, si existe, está accesible
  • Si el dispositivo tiene un Chip Enable hacer uso de él
  • Poniendo dos buses I²C. Este sistema no me gusta, tendría que implantar uno por software y soy de la liga antisoftware salvo que sea imprescindible
  • ¿Veis viable hace un "multiplexor" I²C con un par de buffers triestado? Eso no lo he visto por ningún sitio pero me parece que sería viable

La A y la B serían las ideales pero eso no siempre es posible, o bien porque no exista el pin, o bien porque no esté accesible.
¿Alguna otra idea/recomendación/sugerencia?
 

Dr. Zoidberg

Well-known-Papá Pitufo
#5
Hummmmm....
Si tenes esclavos con la misma direccion, podes modificar tal como decis para generar dos buses con alguna suerte de multiplexor, pero requiere distribucion cuidadosa de los esclavos y vale si solo tenes pares de dispositivos con igual direccion.
Por supuesto que la activacion de uno u otro par SCL/SDA va a complicar un poco el soft...
 
#6
¿De qué"esclavos" se habla?, y ¿cuántos?, vamos para que se hayan duplicado las direcciones es porque hay muchos esclavos de una sola categoría. La solución que veo sencilla es la "a)".
No está de más hacer un pequeño corte en las pistas para cambiar la dirección del módulo.
 
#7
Lo de cortar la pista, en teoría si, en la práctica suelen ser minusculos o lo siguiente. Muy dificil de acceder a la pista.

También está la de poner un maestro por esclavo :LOL::LOL:

Voy a buscar info sobre los multiplexores a ver que hay por ahí y como son de accesibles.
 
#8
Si no podés a) o b), además de lo que mencionó chclau, se me ocurre:

1- Si la cantidad lo permite, usar un uC con más de un bus I2C.
2- Usar un buffer con enable que sirva de repetidor, por ej. un PCA9515 de nxp, el problema es que necesitás uno de estos por c/esclavo con dirección repetida.

Es medio primitivo usar así el I2C, pero bue.
 
#9
Voto por usar un multiplexor, pero debería ser posible multiplexando solo la señal de clock, cierto? (cuidando de que las líneas de reloj sin usar queden en el estado alto).
Si no hay un clock activo el esclavo no debería manejar ni escuchar la línea de datos.
Y sí... también coincido que vale para salir del paso con algo pre-armado, pero no va para hacer un diseño nuevo.
 
#10
Voto por usar un multiplexor, pero debería ser posible multiplexando solo la señal de clock, cierto? (cuidando de que las líneas de reloj sin usar queden en el estado alto).
Si no hay un clock activo el esclavo no debería manejar ni escuchar la línea de datos.
Y sí... también coincido que vale para salir del paso con algo pre-armado, pero no va para hacer un diseño nuevo.
Estuve viendo sobre los multiplexores y te permiten multiplexar las dos señales, clock y datos. Hay uno que permite hasta 8 canales.
 
#11
Un saludo compañeros luego de un largo tiempo sin participar, regreso por acá esperando seguir aportando y aprendiendo de este gran foro. En esta oportunidad tengo un pequeño aporte que espero sea de utilidad, vi hace poco un sistema que implementa registros de desplazamiento para la selección de chips, les dejo un esquema que realice para asi logremos ver si es factible y si es funcional. Actualmente ando trabajando con este protocolo y por eso me intereso el tema.

Funcionamiento: Lo que entiendo es que a través del registro de desplazamiento le damos la dirección o selección a cada dispositivo que este en el bus i2c con el cual nos vamos a comunicar.


Por el momento espero poder experimentar y aprender mas del tema...Saludos:apreton:
 

Adjuntos

Arriba