¿Existe alguna guía definitiva de pin I2C? No busco un "ESTÁNDAR"

16

EDITAR: Esto se ha repetido varias veces, por lo que lo coloca en la parte superior: Sí, es bien sabido que no existe un "estándar" para los conectores entre dispositivos I2C, pero seguramente esta comunidad puede formular una lista de puntos de "orientación" para hacer tales interconexiones, en función del comportamiento de la señal, la minimización del ruido y la mitigación del riesgo debido a conexiones incorrectas.


NXP definió el estándar I2C sin especificar un pin-out para los conectores I2C, según tengo entendido. La única guía de NXP parece ser una mención de colocar un Ground y / o Vss entre SDA y SCL si Vss / Gnd se transportan a través de la interconexión.

Las compras de varios módulos I2C me dejaron con una variedad de pines I2C y un poco de tarea para realizar un seguimiento de las varias pequeñas cuñas de conmutación de cable plano que he tenido que hacer para ellos.

p.ej

  • Módulo OLED mono: SCL, SDA, GND, 5V (obviamente no es ideal, ya que el reloj y los datos están uno al lado del otro.
  • Protector de sensor para Arduino: SDA, SCL, GND, 5V (nuevamente no es ideal, más SCL / SDA conmutado)
  • Módulo LCD en color: SCL, GND, 5V, SDA (¡Sí!)
  • Repetidor I2C sin nombre: SCL, 5V, GND, SDA (¡ay, cambiaron los pines de alimentación! Casi dejaron escapar la magia).

Entonces mi pregunta es la siguiente :
¿Existe una directriz definitiva / autorizada para la secuencia de pin-out del conector I2C de 4 pines para usar, donde tanto Vss como GND deben transportarse de host a dispositivo?

De lo contrario, ¿hay algún directorio, por incompleto que sea, de los módulos / dispositivos I2C que enumere el pin-out que cada uno ha adoptado?

Aclaración: Buscando pautas como "acercar Vss a SCL porque ..." en lugar de un estándar definido que claramente no existe.

Anindo Ghosh
fuente
3
De ahí la pregunta.
Anindo Ghosh
1
Por su propia pregunta, está claro que no hay un estándar ... y si lo hubiera, obviamente la gente no lo está siguiendo. Estás atrapado haciendo calzas. : P
Toby Lawrence el
1
@AnindoGhosh je. Si fuera yo, probablemente abandonaría los módulos comprados previamente y rodaría mis propios tableros de conexiones con un pinout estandarizado usando un encabezado polarizado. Probablemente algo así como 6 pines, con GND al lado de SDA, SCL y 5V ... y luego usando un cable con tres pares trenzados para mantener la tierra cerca de cada señal para ayudar a reducir el ruido y rechazar la interferencia.
Toby Lawrence el
3
Parece que algunas personas se ofenden porque I2C es una opción de conexión predeterminada popular para muchos módulos vendidos para usuarios de Arduino. Incluso si nunca se diseñó para un conector de placa externa, está aquí y se vende y pedir orientación sobre cómo mejorar el conector para nuevos dispositivos es útil para nosotros, no expertos, y es posible que a los expertos no les guste esto.
ExcitingProjects
1
@ExcitingProjects No, tienen razón sobre lo que dicen, I2C no fue hecho para esto, y claramente enfrenta varios desafíos en la conexión entre dispositivos. Es solo una casualidad que los diseñadores de módulos hayan optado por I2C. Yo también estaría "ofendido" si tuviera que elegir.
Anindo Ghosh

Respuestas:

16

Recientemente he rodado el mío en lo que respecta a los conectores I2C. El conector en sí no es muy importante, en este momento solo estoy usando un encabezado de paso de 100mil (generalmente hembra a bordo, por lo que no es tan molesto cuando no está conectado), pero cualquier conector de 4 pines servirá. Además, estoy usando el P82B715de TI como un extensor de bus I2C. Esto supera los problemas de capacitancia asociados con la ejecución de largos abandonos de I2C, que como la gente ha estado diciendo, I2C no estaba destinado inicialmente. Intenté muchas combinaciones diferentes, como en los ejemplos que dio y no noté absolutamente ninguna diferencia en el rendimiento. Creo que esto se debe a que I2C es relativamente lento, la interferencia entre SDA y SCL no es un gran problema. Básicamente, el tiempo de aumento de los voltajes (cuando se producirán interferencias) en el bus es mucho más pequeño que una longitud de bits. Entonces, eso puede no ser lo que desea escuchar, pero ofrece más opciones. Personalmente, utilicé [VCC, SDA, GND, SCL] para enrutarme fácilmente a / desde este chip y también ser inmune a una mezcla de VCC / GND cuando se conecta al revés.

Samuel
fuente
2
+1 + Aceptar. Gracias, probablemente la respuesta más práctica posible hasta ahora, "existe el dispositivo entre dispositivos I2C, así es como lo uso y por qué". La evitación de la confusión VCC / GND es útil. Buen punto para evitar los encabezados de pines pokey a bordo, he arrancado un par de pines de algunos módulos de sensores por accidente.
Anindo Ghosh
Esta es la única respuesta que es realmente útil y, si tengo suficiente reputación, le daría un bono a @Samuel por ello y me gusta esta pregunta porque tengo muchos módulos I2C y algún día construiré módulos I2C siguiendo estas guías.
ExcitingProjects
11

Cuando se estableció por primera vez, el bus I2C (circuito integrado) solo tenía la intención de conectar chips en un solo conjunto de PCB. Nunca fue diseñado para usarse en cables para conectar múltiples tarjetas juntas, y por lo tanto, no se definieron conectores para ese propósito.

Las únicas interfaces externas "estándar" basadas en I2C que conozco son el ACCESS.bus de corta duración para conectar dispositivos de interfaz de usuario a computadoras y el canal de datos de visualización VESA utilizado para recuperar información del monitor a través de conectores VGA, DVI y HDMI.

Dave Tweed
fuente
Entiendo que el propósito original era diferente, pero dado que I2C se está utilizando para muchos módulos conectados por cable ahora, espero que alguien haya comenzado una base de datos colaborativa para documentar los pines utilizados por varios productos, especialmente los muchos productos que atienden a Arduino y otros mercados de placas de microcontroladores.
Anindo Ghosh
4

Sin pin-out estándar, sin conector estándar. El estándar I2C no es realmente adecuado para este tipo de cosas. Se especifica a nivel de bus, no a nivel de dispositivo. Por ejemplo, cuando desea conectar un dispositivo I2C, ¿sabe de manera estándar si los pullups están en el host o en el dispositivo? No. Muchas otras cosas que no sabes, como dónde están tus capacidades de cable, qué Vcc necesita ser ...

De hecho, incluso hay dispositivos I2C que necesitan líneas adicionales para interrupciones y otras E / S digitales antiguas. ¿Cómo los agrega al estándar si no puede llegar a un acuerdo sobre cuántos pines necesita?

En pocas palabras, si busca portabilidad y estabilidad en sus interconexiones, I2C y SPI no están donde necesita buscar.

Scott Seidman
fuente
3
¿Qué pasa si uno está buscando una guía para hacer su propio dispositivo, que funcione con (y les guste) todos esos otros módulos disponibles para el 'duino? Hay un mercado allí, no veo un punto ignorarlo. Por cierto, se requieren pull-ups en el host y opcionales en el dispositivo, según las especificaciones.
Anindo Ghosh
55
¡Lo "bueno" de los estándares es que hay tantos para elegir! Eliges un estándar con un conector bien definido, como MIDI, USB, RS232 (aparte de esas estúpidas cosas de módem nulo), y construyes un traductor en tu propio dispositivo. La otra opción es formar un grupo de trabajo de estándares a través de una organización de estándares, como IEEE. Las pullups "opcionales" en el dispositivo afectan el comportamiento de todo el autobús, lo que hace que mi punto sea exacto. MIDI aísla ópticamente cada dispositivo por la norma, por lo que los dispositivos compatibles no causan estos problemas
de Scott Seidman
1
¡+1 por el punto divertido pero cierto sobre los estándares! :-)
Anindo Ghosh
4

Muchas personas usan algún tipo de conector para transportar señales I²C y energía entre dos PCB. Por ejemplo,

  • el conector UEXT de 10 pines lleva I²C y +3.3 V de potencia (y SPI);
  • el conector iPack de 10 pines lleva I²C y +5 V de potencia;
  • el conector de 4 pines Molex SEMCONN ACCESS.bus lleva I²C y +5 V de potencia;
  • Algunas personas usan los conectores 8p8c y el cable CAT5 que normalmente se usa para la capa física de Ethernet para transportar señales I²C codificadas diferencialmente y +12 V de potencia ( enviando confiabilidad I2C sobre cables Cat5 ) o señales I²C de un solo extremo potenciadas y +12 V de potencia ( el "Pond Electronics Bus" );
  • cada HDMI y la mayoría de los conectores y cables DVI y VGA transportan datos DDC2 a más de I²C;
  • algunos conectores más que llevan I²C se enumeran en "Conectores y cables de bus I2C"

Algunos consejos generales para transportar señales I²C a distancias más largas:

ps: veo que Wikipedia: la interconexión del circuito I²C se ha vinculado a esta pregunta.

davidcary
fuente
3

Si bien no hay un pinout I²C o un conector estándar, hay bastantes lugares donde se utiliza I²C que están estandarizados. Algunos que vienen a la mente son los módulos de memoria (DIMM, SO-DIMM), los conectores de video ( DDC en DVI , VGA ) y SM-Bus (sí, su página web parece algo que un niño hizo a mediados de los 90). En particular, el conector del bus SM está codificado y contiene solo I²C y alimentación, pero SM-Bus impone restricciones adicionales, por lo que técnicamente no todos los dispositivos I²C deben conectarse a un SM-Bus real. También existen algunos enchufes propietarios más, como los sensores Lego NXT.

Yann Vernier
fuente
Es un hecho que no existe un estándar ... Lo que espero es una colección canónica de pautas que los diseñadores de dispositivos puedan seguir. SMBus, por ejemplo, tiene la línea + 5V en el exterior, mientras que NXP recomienda que tanto + V como GND estén entre las trazas de señal. ¿Qué camino es mejor y por qué?
Anindo Ghosh
2

No hay un estándar.

No hay práctica común.

En cuanto a los problemas para decidir qué hacer:

  1. Mantenga las señales en un tablero como si fueran en primer lugar. Las líneas IIC tienen una impedancia bastante alta, son de un solo extremo y, por lo tanto, son susceptibles al ruido y no terminarán bien las líneas de transmisión. La CII simplemente no está destinada a salir de la borda.

  2. Si de todos modos vas a salir del tablero, mantén el autobús corto. Algunas pulgadas probablemente estén bien. Un medidor o más realmente está buscando problemas.

  3. Mantenga las líneas fuera del tablero lejos de fuentes de ruido. No los envuelva alrededor de un motor, por ejemplo, ni intente acercarse a uno.

  4. Use un conector que no se pueda conectar al revés. Si alguien puede enchufarlo al revés, alguien lo hará.

  5. El cable de cinta es probablemente el más fácil de usar. Necesita tres cables como mínimo, SCL, SDA y tierra. Agregar potencia es probablemente una buena idea. En cualquier caso, asegúrese de que el cable de tierra esté entre SCL y SDA para evitar la diafonía. El cable de alimentación no debe ser ruidoso, así que péguelo de un lado, no importa cuál.

  6. Después de jugar con los conectores y buscar posibles problemas, tenga en cuenta que el punto 1 era en realidad el único que necesitaba saber.

Olin Lathrop
fuente
Entonces, ¿debemos poner la cabeza en la arena para todos los cientos de cosas I2C que la gente hizo y vendió para principiantes de arduino y otros microcontroladores?
ExcitingProjects
1

Como es habitual en cualquier publicación que pregunte por qué algo está [nt] estandarizado:
Afortunadamente, la carga se ha resuelto ahora que todos hemos estandarizado en mini-USB.  [¿O es micro-USB?  Mierda.
desde XKCD

Connor Lobo
fuente
Quizás si hubiera leído la pregunta con más atención, o los muchos hilos de comentarios, podría haber notado que no se busca un estándar sino una colección de sabiduría en forma de pautas canónicas.
Anindo Ghosh
1
@AnindoGhosh: no veo cómo eso hace alguna diferencia. Si reemplaza el estándar con la guía en el cómic anterior, es igualmente válido. Cualquier situación en la que haya múltiples formas de hacer algo generalmente resulta en que muchas personas hagan lo dicho de muchas maneras. Incluso si no es un "estándar" formal.
Connor Wolf