i2C: resistencias pull-up “patrón de diseño”, cable blindado y conector?

1

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 madre juntas (al menos 4 sería genial). El I2C se ejecutará a 400 kHz a 3.3V. El cable plano entre las tablas puede tener hasta 2 metros de largo.

Editar: Cuando digo que planeo usar 4 placas principales al mismo tiempo, solo 1 de ellas será la maestra / host.

  • Tire hacia arriba las resistencias

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

De acuerdo con el artículo mencionado anteriormente, debería usar una resistencia entre 4.7kR y 1.5kR. Está bien siempre y cuando solo tenga una placa principal con sus pull-ups y esclavos sin pullups, pero si conecto varias placas principales juntas, la resistencia de pull-up estará en paralelo, y luego demasiado baja.

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

Si utilizo resistencias de 4.7 kR y conecto 4 placas principales, tendré una recuperación equivalente de 1.2 kR, que es bastante baja, y luego consumirá más corriente (mi dispositivo funciona con batería), los dispositivos tengo que hundir toda esa corriente (no puedo predecir la capacidad de sumidero de los esclavos que se conectarán al puerto I2C).

  • Cable blindado

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

  • Conector

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

  • Naming

Pregunta de bonificación: ¿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 electrónica.

    
pregunta Rodot

4 respuestas

3

la capacitancia del cable es lo que estás luchando: solo puedes ir tan rápido como las resistencias de pull-up pueden cargar la capacitancia parásita de los cables. Ámbito de aplicación en la línea de datos: si ves un montón de bonitas ondas cuadradas, estás listo. Por otro lado, si ves un montón de aletas de tiburón, algunas de las cuales no llegan hasta el borde del reloj, vas demasiado rápido o necesitas un pullup más pequeño

    
respondido por el Taniwha
2

El cable blindado no tiene nada que ver con las distancias y los voltajes: si es probable que alguien ponga una pala a través del cable, lo blinde, de lo contrario no lo haga. Tal vez quiso decir cable blindado, que es una cosa 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 funda con conexión a tierra conductora y ligera.

Si desea poder tener múltiples maestros, es probable que ellos no quieran I2C, y en su lugar podrían usar uno de varios otros protocolos que lo permiten. Según tengo entendido, I2C está diseñado para la comunicación entre chips dentro de una PCB, se supone que no se conecta entre las PCB, por lo que no hay un conector estándar; los cables deberían ser bastante cortos (su cable de 2 m es dos). tiempos demasiado largos para cualquier implementación de I2C que he visto). Las conexiones de la placa de prototipos que mencionas no son realmente la forma en que funciona el I2C en la naturaleza: está dentro de una única placa, no en un sistema conectable.

    
respondido por el Pete Kirkham
1

i2c tiene múltiples maestros, 4x 4.7k serían aproximadamente 3 mA o menos a 3,3, lo que podría ser un problema para algunos chips i2c pero no muchos. El RasPi usa 1.8K pullups y no parece preocupado por la corriente de sumidero.

Definitivamente no use nada menos que 4.7k si espera usar hasta 4 dispositivos. Tal vez incluso use resistencias con una precisión del 1%, ya que no son realmente mucho más caras que el 10% común.

El cable de categoría 5 es solo de 52pf por metro. Si usa cat5 de cable blindado, es probable que esté bien con resistencias de 14-25K. Básicamente, la capacitancia del cable crea un filtro de paso bajo RC con la resistencia de pullup, y la resistencia de los tiempos de capacitancia indica el tiempo que tardará en cargarse hasta aproximadamente el 63% de su voltaje final. La mayoría de los chips i2c utilizan niveles TTL que consideran incluso 1 voltio como un alto lógico, y no hay resistencia además de la resistencia en serie del pin del chip que limita la velocidad con 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 principalmente porque el reloj se envía un poco después de los datos. Si usa cat5, ¿puede usar los dos conductores en un par para SDA y SCL? Probablemente no será un problema.

Debido a que no hay resistencia cuando se tira 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 mucho más de la mitad de su tiempo de bit.

i2c de larga distancia no se considera la forma "correcta" pero puede funcionar bien. Primero prototipo, pruebe 18K o más con un cable cat5 o 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 ensamblar un esclavo i2c soldado a la placa base, necesitará una interfaz i2c separada de las que se usan o hablar entre ellas, o puede que haya conflictos de direcciones entre los dispositivos esclavos en las dos placas base.

    
respondido por el EternityForest
1

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

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

I2C no está especificado para largas ejecuciones. 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.

Yo usaría 4.7 o así kOhms pull up por maestro. La corriente utilizada para señalar los ceros es la misma placa principal externa, por lo que puede contar esto en el presupuesto de potencia por placa. Otra opción es arrancar solo cuando no está alimentado desde el bus y solo colocar una batería en una de las tarjetas.

    
respondido por el Jon Watte

Lea otras preguntas en las etiquetas