Es muy probable que se trate de un problema de combinación incorrecta de extracción y / o velocidad de bus. Cuanto más largo sea el cable, más capacitancia parasitaria hay en las líneas SDA y SCL. Esto hace que sus bordes sean más lentos, particularmente los bordes ascendentes, ya que estos solo son pasivamente altos con las resistencias pullup.
Siempre que tenga problemas con varios dispositivos, use las mínimas opciones disponibles. En un bus IIC básico, los nodos deben poder hundir 3 mA para reducir la línea. Eso significa que las resistencias pullup pueden ser tan bajas como 1.1 kΩ a 3.3 V o 1.7 kΩ a 5 V. Si eso no es lo que ya está usando, entonces cambie los pullups.
Para un bus largo, puede ayudar dividir el pullup en cada línea en dos resistencias, una en cada extremo. La combinación paralela se convierte en el valor total de extracción.
Algunos módulos IIC mal concebidos añaden un poco de pullup. Esto puede causar problemas con varios módulos ya que el valor total de extracción puede ser demasiado bajo, y algunos dispositivos pueden no ser capaces de tirar de las líneas lo suficientemente bajas. La mayoría de estos módulos se pueden configurar al menos para que no agreguen cierta resistencia de extracción.
Si las flexiones ya están lo más bajas que pueden, pero no demasiado bajas, y ha tomado medidas razonables para minimizar la capacitancia parásita, entonces debe ajustar el reloj a lo que las líneas pueden soportar. Mira las señales en ambas líneas con un alcance. Asegúrese de que cada línea esté razonablemente cerca de su nuevo estado antes del siguiente límite de reloj posible. IIC no está diseñado para la comunicación de alta velocidad, y realmente no se debe utilizar fuera del tablero. Si lo haces de todos modos, es posible que tengas que reducir la velocidad del reloj.