Por que a necessidade de várias portas I²C?


19

O protocolo I²C permite, em teoria e com endereçamento de 7 bits, até 127 dispositivos a serem conectados ao mestre. Esse é um número grande, então por que um microcontrolador de baixo custo (por exemplo, este PIC24 ) teria mais de uma porta I²C? Por que é necessário?

Respostas:


23

Arranjo do cubo do sensor

Nesse cenário, existem dois barramentos de I²C. Vamos chamá-los de ônibus local e principal . O objetivo do barramento local é conectar um monte de sensores a um microcontrolador (μC). O objetivo do μC é pesquisar os sensores, agregar informações deles e detectar certos eventos. Um μC nessa função é chamado de hub do sensor . O hub do sensor não é responsável por funções de ordem superior; existe um poderoso processador principal para isso. O barramento principal conecta o hub do sensor ao processador principal. Portanto, o hub do sensor μC é um mestre no barramento I²C local e um escravo no barramento principal I²C.

SPI e I²C

O PIC vinculado no post original não compartilha os pinos entre SPI e I²C. No entanto, existem outros PICs que usam os mesmos pinos para hardware SPI e I²C, porque ambos são implementados com o mesmo periférico MSSP. Se um PIC possui dois periféricos MSSP separados, um pode ser usado para o hardware SPI, enquanto o outro é usado para o hardware I²C.


21

Um motivo muito comum para precisar de mais de um barramento é ter dispositivos que operam em velocidades diferentes. Originalmente, o I²C funcionava no máximo a 100 kHz. Mais tarde, a velocidade foi aumentada para um máximo de 400 kHz, e ainda mais tarde, para 1 MHz e acima.

O problema é que, como o endereço de cada dispositivo está incorporado no protocolo I²C, se você tiver dispositivos com classificações de velocidade diferentes no mesmo barramento, digamos 100 kHz e 400 kHz, sempre precisará rodar o barramento na velocidade mais baixa comum para todos os dispositivos no mesmo barramento (100 kHz neste caso).

Se você executasse o barramento na velocidade mais alta (400 kHz), obviamente o dispositivo de velocidade mais baixa não funcionaria corretamente e pode até interpretar o endereço do dispositivo de alta velocidade como seu, causando uma falha no dispositivo de 400 kHz. bem. Mas mesmo se você inicialmente executasse o barramento a 100 kHz e tentasse acelerar o barramento para 400 kHz depois de endereçar um chip de velocidade mais alta, seria possível (embora provavelmente improvável) que o chip de velocidade mais baixa interpretasse um dos os pacotes de dados de alta velocidade incorretamente como endereço e, assim, atrapalham a comunicação no barramento. Nos dois casos, no final do intercâmbio com o dispositivo de 400 kHz, o dispositivo de 100 kHz provavelmente estaria em um estado desconhecido.

Portanto, é mais eficiente: se você possui dispositivos executando em velocidades diferentes e possui várias portas I²C e possui pinos extras para permitir esse luxo, um I²C diz para dispositivos de 100 kHz, outro para dispositivos de 400 kHz e outro para dispositivos de 1 MHz, conforme suas necessidades.

Isso não é um problema do SPI porque cada dispositivo é ativado (endereçado) no hardware por uma linha de seleção de chip separada. Portanto, a velocidade do relógio pode corresponder à velocidade do chip selecionado (10 MHz, 20 MHz, qualquer que seja) sem afetar os outros chips no mesmo barramento, pois eles não estão ativados.


19

Também pode permitir que você suporte dois dispositivos com o mesmo endereço. Sim, a maioria dos dispositivos permite selecionar talvez os dois bits inferiores do endereço com correias. Recentemente, tive que suportar 4 dispositivos, cada um deles permitindo que você definisse o LSB do endereço com um resistor. Ter duas portas significa nenhum custo extra para mim.

Talvez eu queira que um seja o mestre de vários dispositivos e apresente o outro como porta escrava, para que meu mestre não precise esperar para pegar o ônibus para me dar um comando enquanto pesquiso um sensor de temperatura pela 10.000 Tempo.

Parece haver várias outras boas respostas neste tópico, apenas adicionando meus 2 centavos.


9

Rapidez.

Se você precisar acessar dois dispositivos I2C ao mesmo tempo, poderá ter um conflito significativo. Ou, um teria que esperar pelo outro.


9

Segundo, o I²C pode ser usado para obter mais largura de banda (você pode receber ou enviar dois bytes ao mesmo tempo).

Se você possui um ADC que funciona continuamente, um I²C fica ocupado o tempo todo.

A troca de endereço também leva algum tempo, portanto, em alguns casos - você pode usar duas portas para dois dispositivos e evitar alterações de endereço para economizar tempo.


0

Outros mencionaram muitas razões para fazer isso, vou acrescentar uma:

Você tem vários dispositivos I2C de 5V e vários dispositivos I2C de 3V3.

Por exemplo, eu tenho um micro de 3,3V com duas portas I2C, uma tolerante a 5V e a outra apenas 3V3.


Por curiosidade, qual é o micro?
Nick Alexeev

1
LPC4330, aqui está um trecho do manual: "Painel de E / S digital tolerante a 5 V de dreno aberto, compatível com a especificação Fast Mode Plus do barramento I2C. Este painel requer uma extração externa para fornecer a funcionalidade de saída. Quando a energia é desligada, este o pino conectado ao barramento I2C está flutuando e não perturba as linhas I2C. "
peufeu 18/03/19
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.