Existe alguma orientação definitiva para a pinagem I2C? Não está à procura de um "PADRÃO"


16

EDIT: Isso foi repetido várias vezes, colocando-o no topo: Sim, é sabido que não há um "padrão" para conectores entre dispositivos I2C, mas certamente essa comunidade pode formular uma lista de pontos de "orientação" para fazer essas interconexões, com base no comportamento do sinal, minimização de ruído e mitigação de risco devido a conexões incorretas.


NXP definiu o padrão I2C sem especificar uma pinagem para conectores I2C, é o meu entendimento. A única orientação do NXP parece ser uma menção à colocação de um terra e / ou Vss entre SDA e SCL se Vss / Gnd forem transportados pela interconexão.

A compra de vários módulos I2C me deixou com uma variedade de pin-outs I2C, e um pouco de uma tarefa para acompanhar os vários calços de comutação de cabos de fita que tive que fazer para eles.

por exemplo

  • Módulo OLED mono: SCL, SDA, GND, 5V (obviamente não é o ideal, pois o relógio e os dados estão próximos um do outro.
  • Blindagem do sensor para Arduino: SDA, SCL, GND, 5V (novamente não ideal, mais SCL / SDA comutado)
  • Módulo LCD colorido: SCL, GND, 5V, SDA (Yay!)
  • Repetidor I2C sem nome: SCL, 5V, GND, SDA (ouch, eles trocaram de pinos de alimentação! Quase deixaram a mágica sair.)

Portanto, minha pergunta é a seguinte :
Existe uma diretriz definitiva / autorizada para a seqüência de pinos do conector I2C de 4 pinos usar, em que o Vss e o GND devem ser transportados do host para o dispositivo?

Caso contrário, existe algum diretório, ainda que incompleto, de módulos / dispositivos I2C que listem a pinagem adotada por cada um?

Esclarecimento: Procurando diretrizes como "aproxime o Vss do SCL porque ..." em vez de um padrão definido que claramente não exista.


3
Daí a questão.
Anindo Ghosh

11
Por sua própria pergunta, é claro que não há um padrão ... e, se houver, obviamente as pessoas não o estão seguindo. Você está preso fazendo calços. : P
Toby Lawrence

11
@AnindoGhosh heh. Se fosse eu, provavelmente abandonaria os módulos pré-comprados e enrolaria minhas próprias placas de interrupção com uma pinagem padronizada usando um cabeçalho polarizado. Provavelmente algo como 6 pinos, com GND ao lado de SDA, SCL e 5V ... e depois usando um cabo com três pares trançados para manter o terra perto de cada sinal para ajudar a diminuir o ruído e rejeitar a interferência.
perfil completo de Toby Lawrence

3
Parece que algumas pessoas estão ofendidas porque o I2C é uma opção de conexão padrão popular para muitos módulos vendidos para usuários do Arduino. Mesmo que nunca tenha sido projetado para o conector da placa externa, ele está aqui e é vendido e solicitando orientações sobre a melhor forma de fabricar o conector para novos dispositivos, para nós, não especialistas, e útil para os especialistas.
ExcitingProjects

11
@ExcitingProjects Não, eles estão certos sobre o que dizem, o I2C não foi feito para isso e enfrenta claramente vários desafios na conexão entre dispositivos. É por acaso que os projetistas de módulos optaram por usar o I2C. Eu ficaria "ofendido" também se tivesse uma escolha.
Anindo Ghosh

Respostas:


16

Recentemente, criei o meu próprio tanto quanto os conectores I2C. O conector em si não é muito importante, agora estou apenas usando o cabeçalho de inclinação de 100mil (geralmente fêmea a bordo, para que não seja tão esquisito quando não conectado), mas qualquer conector de 4 pinos serve. Além disso, estou usando o P82B715da TI como extensor de barramento I2C. Isso supera os problemas de capacitância associados à interrupção prolongada do I2C, o que, como as pessoas dizem, o I2C não foi planejado inicialmente. Tentei muitas combinações diferentes, como nos exemplos que você deu e não notei absolutamente nenhuma diferença no desempenho. Eu acredito que isso ocorre porque o I2C é relativamente lento, a interferência entre SDA e SCL não é um problema. Basicamente, o tempo de subida das tensões (quando ocorrerá interferência) no barramento é muito menor do que o comprimento de um bit. Portanto, pode não ser o que você deseja ouvir, mas oferece mais opções. Pessoalmente, fui com [VCC, SDA, GND, SCL] para ser facilmente roteado para / a partir desse chip e também ficar imune a uma mistura de VCC / GND quando conectado a trás.


2
+1 + Aceitar. Obrigado, provavelmente a resposta mais realmente praticável até agora, "o interdispositivo I2C existe, eis como eu o uso e por quê". A prevenção de confusão VCC / GND é útil. Bom ponto de evitar cabeçalhos de pokey pin a bordo, arranquei alguns pinos de alguns módulos de sensor por acidente.
Anindo Ghosh

Esta é apenas uma resposta que é realmente útil e, se eu tiver reputação suficiente, daria um bônus ao @Samuel por isso, e eu prefiro esta pergunta porque tenho muitos módulos I2C e vou construir módulos I2C algum dia após este guia.
usar o seguinte

11

Quando foi estabelecido, o barramento I2C (Circuito Integrado) era destinado apenas a conectar chips em um único conjunto de placas de circuito impresso. Ele nunca foi projetado para ser usado em cabos para conectar várias placas e, portanto, nenhum conector para esse fim foi definido.

As únicas interfaces externas "padrão" baseadas em I2C que eu conheço são o ACCESS.bus de curta duração para conectar dispositivos de interface de usuário a computadores e o VESA Display Data Channel usado para recuperar informações do monitor através de conectores VGA, DVI e HDMI.


Entendo que o objetivo original era diferente, mas como o I2C está sendo usado para muitos módulos conectados a cabo, espero que alguém inicie um banco de dados colaborativo para documentar as pinagens usadas por vários produtos, especialmente os muitos produtos que atendem a o Arduino e outros mercados de placas de microcontroladores.
Anindo Ghosh

4

Sem pinagem padrão, sem conector padrão. O padrão I2C não é propenso a esse tipo de coisa. É especificado no nível do barramento, não no nível do dispositivo. Por exemplo, quando você deseja conectar um dispositivo I2C, você sabe por padrão se os pullups estão no host ou no dispositivo? Não. Muitas outras coisas que você também não sabe, como onde estão as capacitâncias do cabo, o que Vcc precisa ser ....

De fato, existem até dispositivos I2C que precisam de linhas extras para interrupções e outras E / S digitais antigas. Como você os adiciona ao padrão, se você não consegue obter um acordo sobre quantos pinos precisa.

Resumindo, se você está procurando portabilidade e estabilidade em suas interconexões, I2C e SPI não estão onde você precisa procurar.


3
E se alguém estiver procurando uma orientação para criar seu próprio dispositivo, que funcione com (e goste) de todos os outros módulos disponíveis para o 'duino? Há um mercado lá, não vejo sentido em ignorá-lo. Aliás, são necessárias flexões no host e opcionais no dispositivo, conforme as especificações.
Anindo Ghosh

5
A coisa "legal" sobre os padrões é que existem tantos por onde escolher! Você escolhe um padrão com um conector bem definido, como MIDI, USB, RS232 (além das coisas idiotas do modem nulo) e constrói um tradutor em seu próprio dispositivo. A outra opção é formar um grupo de trabalho de padrões por meio de uma organização de padrões, como o IEEE. Pullups "opcionais" no dispositivo afetam o comportamento de todo o barramento, fazendo meu argumento exatamente. MIDI opticamente isola todos os dispositivos por padrão, então os dispositivos compatíveis não causam esses problemas
Scott Seidman

11
+1 para o ponto engraçado, mas tão verdadeiro, sobre os padrões! :-)
Anindo Ghosh

4

Muitas pessoas usam algum tipo de conector para transportar sinais de I²C e energia entre duas placas de circuito impresso. Por exemplo,

Algumas dicas gerais para transmitir sinais de I²C por distâncias maiores:

ps: Vejo que a interconexão do circuito Wikipedia: I²C está vinculada a essa pergunta.


3

Embora não exista padrão de pinagem ou conector de I²C, existem muitos lugares em que o I²C é usado, padronizados. Alguns que vêm à mente são módulos de memória (DIMM, SO-DIMM), conectores de vídeo ( DDC em DVI , VGA ) e SM-Bus (sim, sua página da Web parece algo feito por crianças em meados dos anos 90). Em particular, o conector do barramento SM é chaveado e contém apenas I²C e energia, mas o SM-Bus impõe restrições adicionais; portanto, tecnicamente, nem todos os dispositivos I²C devem ser conectados a um SM-Bus real. Também existem alguns plugues proprietários, como os sensores Lego NXT.


É certo que não existe um padrão ... O que espero é uma coleção canônica de diretrizes, que os projetistas de dispositivos possam seguir. O SMBus, por exemplo, possui a linha + 5V do lado de fora, enquanto o NXP recomenda que + V e GND estejam entre os traços de sinal. Qual caminho é melhor e por quê?
Anindo Ghosh

2

Não existe um padrão.

Não há prática comum.

Quanto aos problemas para decidir o que fazer:

  1. Mantenha os sinais em uma placa como se eles pretendessem estar em primeiro lugar. As linhas da CII têm impedância bastante alta, são de extremidade única e, portanto, são suscetíveis a ruídos e não terminam bem as linhas de transmissão. A CII simplesmente não se destina a embarcar.

  2. Se você vai sair do embarque de qualquer maneira, mantenha o ônibus curto. Algumas polegadas provavelmente estão OK. Um metro ou mais está realmente pedindo problemas.

  3. Mantenha as linhas de bordo afastadas de fontes de ruído. Não enrole-os em um motor, por exemplo, nem tente se aproximar de um.

  4. Use um conector que não possa ser conectado ao contrário. Se alguém puder conectá-lo ao contrário, alguém o fará.

  5. O cabo de fita é provavelmente o mais fácil de usar. Você precisa de três fios no mínimo, SCL, SDA e terra. Adicionar poder é provavelmente uma boa ideia. De qualquer forma, verifique se o fio terra está entre SCL e SDA para evitar diafonia. O fio de alimentação não deve ser barulhento, então coloque-o de um lado, não importa qual.

  6. Depois de mexer nos conectores e perseguir possíveis problemas, perceba que o ponto 1 era realmente o único que você precisava saber.


Então, devemos colocar a cabeça na areia para todas as centenas de coisas I2C que as pessoas fabricaram e vendem para iniciantes de arduino e outros microcontroladores?
ExcitingProjects

1

Como sempre, para qualquer postagem perguntando por que algo é padronizado: a
Felizmente, o carregamento foi resolvido agora que todos padronizamos em mini-USB.  [Ou é micro-USB?  Merda.
partir do XKCD


Talvez se você tivesse lido a pergunta com mais cuidado ou os vários tópicos de comentários, talvez tenha notado que não é um padrão que está sendo procurado, mas uma coleção de sabedoria na forma de diretrizes canônicas.
Anindo Ghosh

11
@AnindoGhosh - Não vejo como isso faz alguma diferença. Se você substituir o padrão pela diretriz dos quadrinhos acima, é igualmente válido. Qualquer situação em que haja várias maneiras de fazer algo geralmente resulta em muitas pessoas fazendo o que disse de várias maneiras. Mesmo que não seja um "padrão" formal.
Connor Lobo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.