Una cosa que creo que estoy viendo es que todas tus fichas parecen tener la misma huella, lo que me hace pensar que todas son del mismo chip. Si son el mismo chip, entonces todos deben tener una dirección única, de lo contrario, todos intentarán responder a los mismos comandos dados. Esto es algo bueno si todos necesitan comportarse al mismo tiempo, no tan bueno si necesitan actuar independientemente. Sin embargo, si tienen la misma dirección, si uno de ellos se rompe, falta, no recibió un comando, etc., entonces su código no lo sabrá.
En cuanto a los pull-ups, la tubería es absolutamente correcta, solo desea que se usen un par de pull-ups por bus. La imagen que ha publicado muestra cuatro buses completamente separados (micro a multiplexor, multiplexor a expansores de E / S y luces intermitentes LED, repetidor de concentrador a más expansores de E / S y convertidor de multiplexor a datos, eeprom, etc.).
La Sección 7.1 de la norma I2C (www.nxp.com/documents/user_manual/UM10204.pdf) muestra cómo dimensionar los pull-ups. La Tabla 10 en la sección 6.1 especifica los tiempos de subida para las diferentes velocidades.
Un truco que aprendí para dimensionar correctamente los pull-ups es especificar una resistencia de rango medio (~ 5k) como pull-up, y luego explorar las formas de onda en la unidad prototipo. La resistencia real requerida será igual a CurrentResistor * (TargetRiseTime / MeasuredRiseTime). Una resistencia más pequeña que el número especificado le dará el tiempo de subida para cumplir con las especificaciones. Si la resistencia es más pequeña que el mínimo de pull-up calculado (de la sección 7.1), es posible que deba dividir su bus en múltiples segmentos usando repetidores, multiplexores u otra cosa. Hay dos ventajas para medir y luego calcular, la primera es que siento que es más rápido que tratar de calcular la capacitancia de su bus, especialmente porque muchos factores pueden afectarlo, la segunda es que realmente puede ver la forma de onda y puede elevar una bandera roja si la señal se ve mal.