i2C: resistencias pull-up "patrón de diseño", cable y conector blindados?

Estoy diseñando una placa basada en arduino que usará mucho el puerto I2C. Quiero poder conectar varios dispositivos esclavos y/o conectar varias placas base juntas (al menos 4 sería genial). El I2C funcionará a 400 kHz a 3,3 V. El cable plano entre las placas puede tener una longitud de hasta 2 metros.

Editar: cuando digo que planeo usar 4 tableros principales al mismo tiempo, solo 1 de ellos será el maestro/anfitrión.

  • Tire hacia arriba de las resistencias

Mi problema no es realmente elegir el valor correcto de la resistencia pullup (para eso encontré este interesante artículo ). Se trata más de "patrón de diseño".

Según el artículo mencionado anteriormente, debo usar una resistencia entre 4.7kR y 1.5kR. Está bien siempre que solo tenga una placa principal con sus pullups y esclavos sin pullups, pero si conecto varias placas principales juntas, la resistencia de pullup estará en paralelo y luego demasiado baja.

¿Debo agregar algunos puentes para habilitar/deshabilitar las resistencias pull-up? No me gusta esta solución en absoluto, ocupa espacio en la PCB y no es útil. Y quiero que mi tablero sea fácil de usar, solo conecte las cosas y todo funcionará.

Si uso resistencias de 4,7 kR y conecto 4 placas principales juntas, tendré un pullup equivalente de 1,2 kR, que es bastante bajo, y luego consumirá más corriente (mi dispositivo funciona con batería), los dispositivos tendrán que hundirse toda esa corriente (no puedo predecir la capacidad de sumidero de los esclavos que se conectarán al puerto I2C).

  • Cable blindado

¿Debo usar un cable blindado entre los dispositivos, ya que será bastante largo (hasta 2 metros) y el voltaje será bastante bajo (3,3 V)?

  • Conector

Finalmente, no encontré ningún conector I2C "normal". El más común parece ser un conector SIL de 4 pines con pines en ese orden: GND, VCC, DATA, CLOCK (en seeed's grove o tinkerkit, por ejemplo). Me parece bien, pero cualquier sugerencia es bienvenida.

  • Denominación

Pregunta adicional: ¿debo escribir "I2C" o "TWI" en mi PCB? Según wikipedia, TWI parece ser una implementación incompleta del protocolo I2C. Tinkerkit usa "TWI", pero "I2C" parece ser más común en la electrónica.

I2C no está hecho realmente para conectar múltiples iniciadores. Para eso realmente necesita estar adaptando el protocolo SMBus que tiene un protocolo de arbitraje definido.
Mi pregunta no fue muy clara, de hecho quise decir que puedes usar una placa principal como maestra y placas de extensión como esclavas, o varias placas principales pero solo una de ellas como maestra. Gracias por tu respuesta, lo investigaré. Pero creo que usaré I2C de todos modos porque es más popular en el mundo de arduino.
I2C admite absolutamente el arbitraje de múltiples maestros de bus.

Respuestas (4)

la capacitancia del cable es lo que está luchando: solo puede ir tan rápido como las resistencias pullup pueden cargar la capacitancia parásita de los cables; en el mundo real, hace una buena suposición y luego, una vez que comienza a trabajar con los circuitos, deja caer un 'visor en la línea de datos: si ve un montón de bonitas ondas cuadradas, está listo para comenzar. Por otro lado, si ves un montón de aletas de tiburón, algunas de las cuales no alcanzan la altura máxima antes del borde del reloj, significa que estás yendo demasiado rápido o necesitas un pull-up más pequeño.

El cable blindado no tiene nada que ver con las distancias y los voltajes: si es probable que alguien atraviese el cable con una pala, blindarlo, de lo contrario, no lo haga. Tal vez quiso decir cable blindado, que es algo completamente diferente: el cable blindado está protegido mecánicamente al tener una barrera mecánicamente fuerte a su alrededor, el cable blindado está protegido electromagnéticamente al tener una cubierta conductora liviana y conectada a tierra.

Si desea poder tener múltiples maestros, probablemente no desee I2C y, en su lugar, podría usar uno de varios otros protocolos que lo permiten. Según tengo entendido, I2C está diseñado para comunicarse entre chips dentro de una PCB, se supone que no se conecta entre PCB, por lo que no hay un conector estándar; los cables tendrían que ser bastante cortos (su cable de 2 m es dos veces demasiado para cualquier implementación de I2C que haya visto). Las conexiones de la placa de creación de prototipos que menciona no son realmente cómo funciona I2C en la naturaleza: está dentro de una sola placa, no en un sistema enchufable.

Sí, quise decir blindado, y creo que un cable de 1 m estaría bien. Gracias por su respuesta. Todavía no puedo hacer "+1" en tu respuesta, no tengo suficiente reputación.

No es muy probable que la capacitancia o la inductancia de escritura importen a 2 m y 400 kbit.

I2C especifica el arbitraje de múltiples maestros, por lo que podría tener varios maestros si lo desea. Incluso podría tener la misma placa como maestra y esclava.

I2C no está especificado para tiradas largas. Es por eso que no hay un conector estándar. Puede funcionar todavía. Probaría el cable STP probablemente con dos pares si necesita suministrar energía.

Usaría 4.7 kOhms más o menos por maestro. La corriente utilizada cuando se señalan ceros es la misma placa principal externa, por lo que puede contar esto en el presupuesto de energía por placa. Otra opción es arrancar solo cuando no esté alimentado por el bus y solo poner una batería en una de las placas.

i2c tiene multimaestro, 4x 4.7k serían alrededor de 3mA a 3,3, lo que podría ser un problema para algunos chips i2c pero no para muchos. El RasPi usa pullups de 1.8K y no parecen preocupados por la corriente de disipación.

Definitivamente no uses menos de 4.7k si esperas usar hasta 4 dispositivos. Tal vez incluso use resistencias de precisión del 1%, ya que en realidad no son mucho más caras que el 10% común.

El cable de categoría 5 tiene solo 52 pf por metro. Si usa cat5 trenzado blindado, probablemente podría estar bien con resistencias de 14-25K. Básicamente, la capacitancia del cable crea un filtro de paso bajo RC con la resistencia pull-up, y la capacitancia multiplicada por la resistencia le indica cuánto tardará en cargarse hasta aproximadamente el 63 % de su voltaje final. La mayoría de los chips i2c usan niveles TTL que consideran incluso 1 voltio como un máximo lógico, y no hay resistencia además de la resistencia en serie del pin del chip que limita la rapidez con la que se puede bajar.

Para i2c, desea asegurarse de que el flanco ascendente del reloj llegue al receptor antes de que los datos en la línea de datos puedan cambiar, y desea asegurarse de que la línea de datos se haya asentado antes de que llegue el flanco ascendente del reloj.

Si sus líneas tienen la misma capacitancia, la segunda preocupación desaparece porque el reloj se envía un poco después de los datos. Si usa cat5, ¿tal vez use los dos conductores en un par para SDA y SCL? Probablemente no será un problema.

Debido a que no hay resistencia al tirar hacia abajo, los datos podrían cambiar casi instantáneamente al final. La primera preocupación significa que probablemente desee que su constante de tiempo sea como máximo un poco más de la mitad de su tiempo de bit.

El i2c de larga distancia no se considera la forma "correcta", pero puede funcionar bien. Prototipo primero, pruebe 18K más o menos con cat5 o un buen cable similar y vea hasta dónde puede llegar, asegúrese de que i2c proporcione todas las funciones que necesita.

Además, tenga en cuenta que si alguna vez desea soldar un esclavo i2c a la placa base, necesitará una interfaz i2c separada de las que se usan o hablar entre placas base, o de lo contrario podría tener conflictos de dirección entre los dispositivos esclavos en las dos placas base .