Existe um número máximo de escravos i2c que um mestre i2c pode dirigir? Quais são os fatores físicos limitantes?
Existe um número máximo de escravos i2c que um mestre i2c pode dirigir? Quais são os fatores físicos limitantes?
Respostas:
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.
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:
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.
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.
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.
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.
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.
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.