Estoy usando un MCP23017 (que no debería importar, sin embargo) para ampliar el número de pines GPIO de un ordenador linux basado en el brazo utilizando i2c-dev bitbanging. Todo funciona bien con cables de unos pocos centímetros.
El problema es que necesitaría 2*~3m de cable entre grupos de 3 de estos módulos basados en MCP23017. Ahora bien, si utilizo un cable de 3 m (0,75 mm de diámetro) para SCL y SDA, obtengo un ack para establecer la dirección, pero al interrogar al CI sobre los estados de los pines se obtienen respuestas confusas.
Nota: El MCP23017 tiene 2 bancos de 8 pines cada uno, con el cable de 3 metros sólo 1 banco parece funcionar y B se convierte en A... No estoy seguro de lo que sucede a la señal allí, supongo que la dirección en la solicitud está siendo corrompido sobre una base regular.
Así que pensé que para aumentar la fuerza de la señal añadiría un pullup externo (los pines gpio utilizados para el bitbanging ya tienen uno interno), que de nuevo funciona bien para algunos cables de 10cm pero mata incluso la dirección ACK para el cable de 3m.
He probado con 2k2, 4k7 y 10k ohmios, todos con el mismo resultado (exacto) desde mi perspectiva de baja resolución.
Desgraciadamente no tengo un osciloscopio para mirar todo el asunto y no soy demasiado conocedor de todos los detalles como para resolver esto simplemente mirándolo, por lo tanto intento esta ruta.
Espero que alguien tenga una idea de lo que está sucediendo aquí, lo que podría tratar o donde podría aprender lo suficiente para entender esto en un nivel que me ayuda a arreglar esto. Hágame saber si necesita más información.
ACTUALIZACIÓN : El cable de 3m ahora funciona con pullups externos de 850 ohmios. bajando a 150 ohmios también funciona con 6m pero no es una gran cosa que hacer ya que uno fácilmente utiliza más energía (para tirar de la línea baja) que la mayoría de los pines gpio están clasificados para.