Comprimento máximo do barramento I2C?

38

Qual é o comprimento máximo do cabo que pode ser usado para conectar dois dispositivos I2C (mestre I2C-> escravo I2C)?

Sim, eu sei que o I2C é realmente projetado para comunicação intra-board. Fui encarregado de um "objetivo de design" de usar um barramento I2C comum para vários escravos I2C para dar suporte a uma demonstração.

Para fins de clareza, vamos assumir a taxa de barramento I2C padrão de 100 kHz.

Nate
fonte
11
O comprimento máximo vem para brincar com a capacitância introduzida pelo comprimento. Demasiada capacitância e isso pode afetar sua velocidade. Então, como sempre, isso depende.
Gustavo Litovsky
@GustavoLitovsky Você está correto sobre a capacitância. Também depende do tipo de cabo que está sendo usado (blindado versus não blindado). Estou mais interessado em uma orientação geral.
Nate
2
@Nate Guideline: capacitância líquida máxima do barramento de 400pF. (Um pouco relacionado à pergunta: Memórias de um barramento I2C cheio de vegetação .)
Nick Alexeev
11
I2C = Barramento de circuito integrado. Não foi projetado para longas distâncias entre caixas, e certamente não a 400kHz.
Spehro Pefhany
11
Só queria jogar alguma experiência pessoal além dos cálculos. Eu fiz uma demonstração passando de uma placa de desenvolvimento para um conversor I2C para USB com um fio não blindado de cerca de 3 pés. Não parecia bonito, mas funcionava 90% do tempo.
Mcmiln

Respostas:

16

Para o modo rápido e a ativação do resistor, a capacitância deve ser menor que 200pF, de acordo com a especificação do barramento I2C do documento NXP e o manual do usuário .

Com os pullups de fontes atuais, você pode atingir 400pF, mas não com resistores.

Se o seu fio for 20pF / 30cm e você tiver outros 50pF de capacitância dispersa e de entrada, você estará limitado a 2,25m de comprimento. Suposições diferentes levarão a números diferentes.

Spehro Pefhany
fonte
11
@KrunalDesai É mencionado especificamente no documento NXP vinculado acima. Especificação barramento I2C e manual
Spehro Pefhany
11
Para um exemplo do mundo real, o "Wiimote" da Nintendo Wii usa I2C de 400kHz ( wiibrew.org/wiki/Wiimote/Extension_Controllers ) para se comunicar com periféricos como o Nunchuk ( wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck ) que, como você pode ver, tem um cabo que tem cerca de 1m. Os extensores passivos são vendidos para dar 1 milhão adicional ( amazon.com/Extension-Cable-Wii-Nunchuck-Nintendo/dp/B0039OEV9K ), então eles estão pressionando, mas permanecendo dentro desse limite de 2,25m.
Rob Starling
16

Os comprimentos insanos de som como 10,25 e 100m são perfeitamente possíveis, e eu uso o método frequentemente (com UART não I2C, mas o método permanece) quando preciso juntar as coisas rapidamente. Não é exatamente o melhor caminho, no entanto.

A chave é conhecer seu limite de tensão de entrada. Verifique se a queda de tensão no fio terra está bem abaixo disso, caso contrário, um transmissor com alto potencial de terra não poderá puxar a tensão suficientemente baixa. Falta de tolerância para desvios de terra O IMHO é o maior motivo para usar transceptores RS485 ou pode (o I2C sobre CAN é mencionado em algumas notas de aplicação).

Idealmente, todos os dispositivos terão sua própria verruga e bateria e nenhuma energia será enviada pelo fio terra entre os dispositivos.

Mas, vamos usar o CAT5, por exemplo. O CAT5 não pode ser superior a 52pf / m, ou não é CAT5.

100m de cabo 52pf tem uma capacitância de 5200pf ou 5.2nf.

5,2n vezes 20kohms (pullup) fornece uma constante de tempo de cerca de 104 microssegundos. Isso limita a velocidade a cerca de 10kHz.

Usando pullups de 2.2kohm, você provavelmente chegaria a 100kHz.

Ouvi dizer que os dispositivos devem ter um resistor no SDL e no SCK, devido à grande carga capacitiva que estão conduzindo, algo como 180 ou 200 ohms.

Mas, honestamente, o I2C não é o caminho a percorrer longas distâncias. Os transceptores CAN ou RS485 usados ​​com UART normal são uma solução robusta com muito boa proteção contra falhas, resistência ESD, velocidade, distância, etc., a um custo de um dólar por chip ou mais, as compensações de terra não importam tanto quanto você livre para transportar energia junto com os dados.

A única desvantagem é que um transceptor pode atingir 70ma de transmissão e 1 ou 2ma apenas de audição; portanto, o I2C ou o TTL UART direto podem ser úteis em situações extremas de baixa energia, mas considere quanto tempo você realmente passa enviando.

EternityForest
fonte
7

Eu trabalho para uma empresa que fabrica sensores USB. A maioria deles é baseada em chips de sensor I2C, esses dispositivos podem ser divididos em dois, para que você possa instalar a parte da CPU em um local e a parte do sensor em outro. Realizamos muitos testes na conexão I2C entre a CPU do dispositivo e os sensores I2C. A 100 kHz, com um bom protocolo de recuperação de erros, é possível chegar facilmente a 25 m usando fios básicos. Conseguimos atingir 100 m uma vez com o cabo CAT5.

martinm
fonte
Parece que você está falando sobre o comprimento do cabo USB . O OP está perguntando sobre cabeamento I2C bruto . Este é um assunto totalmente diferente. Se estiver incorreto, edite sua resposta e removerei meu voto negativo.
DoxyLover
11
25m é bastante mesmo para um usb ...
Vladimir Cravero
3
Não, estou realmente falando sobre a conexão I2C entre a CPU do dispositivo e os chips sensores I2C, não a conexão USB entre o host e a CPU. Aqui está um exemplo: yoctopuce.com/EN/products/yocto-meteo/doc/...
martinm
11
Se você quisesse usar par trançado para I2C e potência, qual par você torceria? (SDA, SCL), (VCC, GND) ou (SDA, GND), (SCL, VCC)?
Cano64
4
Idealmente, você não usa par trançado. Par trançado é útil para sinais balanceados. Se você não tiver nenhum outro cabo, torça o sinal com o terra. Se você realmente tiver apenas quatro fios, pense em quanta energia a extremidade remota consome - você pode terminar com um deslocamento de terra mais do que tolerável - antes de começar a usar apenas um fio para o GND. Eu geralmente uso cabo Cat5 antigo (não superior! A blindagem dupla adiciona capacidade que você não precisa) com um par de aterramento, um par + 5V e pares SDA + GND e SCL + GND.
Matthias Urlichs
4

A IIC é um protocolo síncrono e, como tal, pode ser executado arbitrariamente lentamente para atender aos requisitos do sistema em relação à distância e ao ruído.

Existem muitos exemplos de uso da IIC através de um cabo, desde o ACCESS.bus nos anos 90 até a forma como é usado hoje para recuperar informações EDID de telas de vídeo.

Dave Tweed
fonte
Outro exemplo é o Wii Nunchuck, que se conectou ao Wii Remote via I²C usando um cabo blindado de 4 pés.
tcrosley
4

Algo como o P82B96 da NXP poderia ser usado para alterar os níveis de tensão no barramento, permitindo distâncias muito maiores.

A folha de dados contém exemplos de comprimentos de cabo I2C de 3m, 25m, 100m e 250m.

Existem outros chips que têm funcionalidade semelhante.

Jeffrey Nichols
fonte
O problema com o chip NXP é que você acaba exigindo o dobro de fios. Alguma outra ideia? os CIs bidirecionais que encontrei não ultrapassam + 5V.
Matthias Urlichs