Quantos escravos i2c um mestre i2c pode suportar?


17

Existe um número máximo de escravos i2c que um mestre i2c pode dirigir? Quais são os fatores físicos limitantes?


1
Você tem um endereço de 7 bits. Isso significa que você pode abordar até 127 escravos.
Botnic

Obrigado. Existem fatores limitantes físicos, como o acionamento atual, a capacitância ou algo assim que impede que o número de escravos atinja 127?
user768421

1
O @Botnic ignora completamente os comutadores i2c, hubs, buffers, repetidores e qualquer dispositivo i2c que permita expandir um barramento.
Passerby

Respostas:


22

O fator limitante de software é o tamanho do endereço usado para os escravos: 7 bits ou 10 bits, que suportam dispositivos 127 e 1023, respectivamente. Fisicamente, existem duas restrições. Primeiro, o tamanho físico do barramento, porque o barramento é destinado apenas a pequenas tiragens (a parte inter IC). Se o barramento for muito grande, haverá efeitos de atraso de carga e propagação capacitivos que precisam ser tratados. Segundo, alguns dispositivos não podem suportar toda a gama de endereços I2C. Como exemplos, o giroscópio MPU6050 suporta apenas dois endereços e alguns dispositivos reservam endereços específicos para fins especiais.


2
Você tem um erro de um por um. O endereçamento de 7 bits suporta 128 endereços (0 a 127). O endereço de 10 bits suporta endereços 1024 (0 a 1023).
CurtisHx

3
Isso não é um erro por um erro. É um erro "desativado por 6" porque existem 7 endereços reservados e não apenas um.
precisa saber é

O esquema de endereçamento é determinado pelos dispositivos no barramento, mestre ou escravo. Alguns dispositivos têm intervalos de endereços predefinidos e endereços reservados. Outros dispositivos, muitos microcontroladores, por exemplo, não têm endereços reservados e podem usar qualquer endereço em um determinado esquema de bits.
vini_i

Esses números estão um pouco corretos, porém é necessário fazer uma ressalva. Existem alguns endereços reservados, como 1111 XXX e 0000 XXX. Isso significa 7 bits = 2 ^ 7 - 16 = 112 endereços utilizáveis, 10 bits é o total de 2 ^ 10 1024. 8 bits não é (não deve ser uma coisa), geralmente inclui o bit R / W em 7 bits. nxp.com/docs/en/user-guide/UM10204.pdf
busfault

@busfault Eu reconheço que os endereços de 8 bits não são efetivamente uma coisa. Eu os removi da minha resposta. A maioria dos microcontroladores pode optar por ignorar alguns ou todos os endereços reservados e usar o intervalo completo de endereços. Percebo na minha resposta que isso é específico do dispositivo.
Vini_i 07/12/19

10

O número máximo de nós é limitado pelo espaço de endereço e também pela capacitância total do barramento de 400 pF, o que restringe as distâncias práticas de comunicação a alguns metros.

Leia mais em I²C


9

O endereçamento limita o número de dispositivos - alguns podem usar o endereçamento de 10 bits (raramente usado), o que limita o número de endereços a 1024. Existem vários endereços 'reservados'.

O I2C (em oposição ao "barramento de dois fios" ou o que os outros desejarem chamar de barramento semelhante) deve seguir o padrão NXP (née Philips), a especificação do barramento I2C UM10204 e o manual do usuário . Esse deve ser o seu documento de referência principal, não as várias interpretações e subconjuntos que existem em outros lugares.

O número máximo de dispositivos será influenciado pela capacidade do inversor da saída mais fraca (que por sua vez determina o resistor de pullup mínimo), a fiação e a capacitância de entrada e o modo / frequência de operação. Consulte a seção 7.2. Operação acima da capacitância máxima permitida do barramento, se a capacitância máxima precisar ser excedida:

insira a descrição da imagem aqui


7

Um barramento i2c é limitado principalmente pela capacitância do barramento (e, portanto, velocidade) e endereços de dispositivos acessíveis. E espaço físico no quadro.

Mas não há limite superior real, quando você considera os buffers de barramento, extensores, repetidores, hubs, multiplexadores, comutadores (ou qualquer outro nome para um dispositivo que pode alternar entre vários barramentos). Isso adiciona alguma sobrecarga i2c, pois pode ser acessível através do mesmo barramento i2c. O PCA9548A, por exemplo, é um comutador de barramento de 8 bits.

Este único chip pode quadruplicar teoricamente o número de escravos i2c (127 * 8) disponíveis. E o PCA9548A pode ser configurado para até 8 endereços em um único barramento, portanto, 8 * 8 * 127 dispositivos. (a matemática pode estar desativada). E isso é apenas com este dispositivo e não mais.

Francamente, não há limite teórico se você ajustar a capacitância.


5

I2C especifica 2 comprimentos de endereço, 7 e 10 bits , o que fornece um máximo teórico de 128 e 1024 endereços distintos, respectivamente.

No entanto, existem alguns endereços reservados, como 0x00 (chamada geral). Isso limita ainda mais o espaço de endereço.

Se você estiver criando um sistema em que tenha controle direto sobre os dispositivos I2C, poderá usar os endereços reservados para seu próprio uso, mas o sistema não estará mais em conformidade com o padrão I2C.

Além do endereçamento, existem as limitações do barramento físico. Cada dispositivo no barramento precisa ser capaz de puxar o barramento para baixo em um determinado período de tempo (dependendo da velocidade do barramento). Se o barramento tiver muita capacitância, os dispositivos podem não ser capazes de reduzir o SDA com rapidez suficiente e os pull-ups podem não trazer o SDA de volta com rapidez suficiente.

Agora, os problemas de hardware podem ser superados com um pouco de hardware do driver. No momento, estou trabalhando em um projeto que usa o I2C para se comunicar com dispositivos em vários 10s de metros. O barramento principal usa 24v, e cada placa possui um driver que reduz para 3.3v.

Em uma casca de noz, a limitação física do I2C pode ser superada. O endereçamento pode ser superado, mas somente se você tiver controle direto sobre o dispositivo.


Faz quase três anos desde que você estava trabalhando em ônibus i2c muito longos. Eles trabalharam bem?
wallyk

1
@wallyk Deixei a empresa logo após postar a resposta. Eu direi que, dado o hardware certo, você pode fazer o I2C se comunicar a distâncias maiores. No entanto, existem outros protocolos de comunicação projetados para longa distância e provavelmente seriam uma escolha melhor do que o I2C.
CurtisHx

5

A principal limitação do número de escravos que um mestre pode dirigir geralmente vem de fatores elétricos, como capacitância de barramento, vazamento, força de acionamento, etc. com traços de placa de capacitância zero, a capacitância de barramento não seria um fator, mas na prática nenhuma das premissas será válida.

O endereçamento de dispositivos que "conhecem" um ao outro, por outro lado, não é realmente um problema. Seria trivial projetar um periférico que permitiria que bilhões de chips fossem conectados usando um endereço de leitura e um de gravação. Simplesmente especifique que cada dispositivo deve ter um ID exclusivo de quatro bytes e é necessário ouvir o endereço de gravação o tempo todo, mas deve abandonar todas as transações cujos primeiros quatro bytes de dados transmitidos não correspondem ao seu ID. Além disso, especifique que os dispositivos só poderão responder ao endereço de leitura se a última transação de gravação ouvida corresponder ao seu endereço.

Se alguém quiser adicionar a capacidade de o mestre determinar os IDs de todos os escravos conectados, poderá reservar alguns intervalos de ID especiais para esses fins. Por exemplo, pode-se dizer que, se o primeiro byte de ID for FF, os próximos quatro bytes serão uma máscara e os quatro seguintes serão um ID; um dispositivo deve permanecer conectado (e aceitar o último byte de ID) se a parte de seu ID especificada pela máscara corresponder à fornecida no comando. Isso permitiria que um mestre identificasse pelo menos um dispositivo usando 64 transações e dispositivos adicionais usando 62 ou menos transações cada. Talvez não seja o meio mais rápido possível de identificação de dispositivo, mas não é ruim, considerando um espaço de pesquisa de bilhões de IDs de dispositivo.


2

Resposta curta: Depende

Se você tiver dispositivos (comuns) com endereços de 7 bits, até 104 dispositivos (128 endereços - endereços reservados (0x00-0x07 e 0xF0-0xFF são reservados)) (aplicam-se certas limitações) Se você tiver dispositivos (menos comuns) compatíveis com 10 bits endereçando até 1024 dispositivos (você pode misturar dispositivos de 7 bits e 10 bits e alcançar até 1136 dispositivos dessa maneira)

Agora, com as limitações: a maioria dos dispositivos simples pode ser configurada apenas para dois a oito endereços diferentes. Você pode superar isso solicitando dispositivos personalizados com diferentes endereços base (mas isso normalmente significa que você solicita uma quantidade mínima de dispositivos). Existem também limitações de hardware (principalmente capacitância de barramento), mas isso pode ser resolvido com drivers i2c especiais.

Se você deseja conectar muitos dispositivos em distâncias maiores, sugiro usar um fieldbus de qualquer maneira! O I2C é destinado à comunicação dentro de um dispositivo (como um aparelho de TV). Eu mesmo estou usando o I2C com um RaspberyPi com cabos externos de até 50cm (mesmo nas seções T que você nunca deveria ter em um sistema de barramento). Funciona surpreendentemente bem.


0

O número de dispositivos conectados ao barramento é limitado apenas pela capacitância total permitida do barramento de 400 pF. Como a maioria dos ICs com interface I²C usa tecnologia CMOS de baixa potência e alta impedância, muitos ICs podem ser conectados ao barramento I²C antes que a capacitância máxima seja atingida.


1
Isso não responde à pergunta do OP de maneira completa. Tente responder a todos os aspectos da pergunta, mesmo se estiver usando valores aproximados. Especifique e / ou deixe um link para sua fonte de informação.
precisa saber é o seguinte

0

Com chips multiplexadores adicionados (como TCA9544A) ou buffers (como PCA9515B), você pode superar todos os limites - capacitância e endereçamento do barramento.

Você pode colocar 3 dispositivos com endereços idênticos atrás de um multiplexador e selecionar apenas um deles, se comunicar com ele e depois selecionar outro. Claro que o software fica mais complexo.

Se você tiver uma fiação longa, poderá colocar um buffer no meio e superar o limite de capacitância.


Não, você ainda será limitado: 4 canais / multiplexador, por canal, você tem 4 subcanais e, em seguida, subsubcanais, subsubcanais e mais. Você tem 3 linhas de endereço por comutador de canais: É 4 ^ (2 ^ 3) = 65536 canais. Por canal, você tem 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Dispositivos / Canais (quando você também usa Buffers) (os -7 são para endereços reservados e -8 para os endereços multiplex). 1265 * 65536 = 82903040 Máximo de dispositivos.
12431234123412341234123

Edit: Desculpe, ocorreu um erro: é 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Dispositivos / Canal => 1137 * 65536 = 74514432 Dispositivos. Mas pode ser mais possível quando você usa o IO-Expander para ativar e desativar alguns buffers (o que é de longe o uso prático, mas uma possibilidade teórica).
12431234123412341234123
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.