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.
Respostas:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte