O entrevistador queria saber por que os resistores pull-up são usados no SDA e no SCL quando a lógica oposta também pode ser implementada. Existe uma explicação para o motivo pelo qual o uso do resistor pull-up é o design escolhido?
O entrevistador queria saber por que os resistores pull-up são usados no SDA e no SCL quando a lógica oposta também pode ser implementada. Existe uma explicação para o motivo pelo qual o uso do resistor pull-up é o design escolhido?
Respostas:
Para expandir um pouco a resposta de Jon:
Sim, tudo tem a ver com quais MOSFETs você deseja usar.
MOSFETs de canal N são muito melhores para alternar lógica do que canal P porque:
Portanto, para uma configuração de dreno aberto (que é o I2C), é muito mais barato e mais fácil criá-la usando um arranjo "ocioso alto" com MOSFETs de canal N em vez de "ocioso baixo" com MOSFETs de canal P.
Uma terceira opção seria "ocioso baixo" usando MOSFETs de canal N, mas para isso você precisa de um driver de gate de alta tensão para aumentar a tensão do portão suficientemente longe acima da tensão de fonte para o MOSFET ligar. Não é prático para barramentos de comunicação pequenos, mas esse arranjo é realmente usado com bastante frequência nas pontes H para condução de motor, onde você deseja obter a mesma resposta (ou similar) entre o lado alto e o lado baixo da ponte H. O uso de pares de canais P e N em uma ponte H normalmente significa que você deve incorporar uma zona morta entre desligar o canal P e ligar o canal N, pois leva muito mais tempo e isso reduz sua eficiência de energia .
Mas para barramentos de comunicação pequenos como o I2C, nos quais você precisa de alta velocidade, baixo custo e simplicidade de uso, o "ponto alto" com MOSFETs de canal N e resistores de pull-up é de longe o mais econômico.
Outra vantagem do pull up ativo / ativo passivo é que ele pode funcionar com uma variedade de tensões de potência. Observe que os níveis alto e baixo digitais são especificados explicitamente com a IIC. Esses níveis são baixos o suficiente para trabalhar com pullups de 3,3 V. Portanto, podem ser construídos dispositivos que funcionam com potência de 5 V e 3,3 V. De fato, as linhas de barramento da CII podem ser puxadas até 3,3 V, e isso funcionará com uma mistura de dispositivos no barramento que são alimentados separadamente em tensões diferentes.
Embora o NMOS tenha uma vantagem sobre o PMOS em termos de velocidade / área, essa diferença é muito pequena quando se fala de um driver com um ou dois pinos. E, afinal, a maioria dos drivers de saída é do tipo totem que requer NMOS e PMOS; portanto, se eles tivessem escolhido uma configuração pull-down ou pull-up, eles teriam um driver de saída menor que um totem. motorista de mastro.
Mas há um benefício das saídas de dreno aberto NMOS sobre o dreno aberto PMOS que não se aplicam diretamente ao I2C: quando o VCC é positivo, o dreno aberto NMOS permite que chips com diferentes níveis de VCC sejam conectados um ao outro. É por isso (parte de) que vários CIs lógicos discretos de dreno aberto NMOS estão disponíveis.
Por outro lado, não conheço QUALQUER chip PMOS disponível no mercado. Na verdade, eu não acredito que já tenha encontrado uma saída de dreno aberto do PMOS em qualquer chip. (Eu usei ECL muitas vezes, que possui uma saída de emissor aberto NPN com comportamento semelhante ao dreno aberto do PMOS)
A disponibilidade de chips lógicos discretos de dreno aberto NMOS torna o dreno aberto NMOS muito mais familiar aos projetistas eletrônicos do que o dreno aberto PMOS.
A familiaridade e a disponibilidade dos chips discretos (para prototipagem, por exemplo) provavelmente influenciaram os projetistas do I2C a escolher a configuração de dreno aberto NMOS.
Eu acho que a resposta remonta a por que usamos uma convenção de base negativa em primeiro lugar (e isso certamente não era onipresente antes da era dos semicondutores). A razão para isso é que os dispositivos N-Channel têm melhor desempenho que os dispositivos P-Channel devido à física dos tipos de operadoras majoritárias usadas neles.
Nos primeiros dias dos circuitos integrados, essa era uma limitação bastante séria e, portanto, havia uma preferência pelo uso de transistores N-Channel (ou NPN) para obter o melhor desempenho possível. A partir disso, obtivemos um sistema de aterramento negativo e saídas de coletor aberto que exigiram o uso de resistores de pull-up em vez de pull-downs.
É claro que o barramento I2C dificilmente é de alta velocidade, portanto não há razão para que ele não possa ser implementado usando resistores pull-down, mas também não há vantagem. Por isso, mantemos a convenção e ela usa flexões.
Aqui estão algumas especulações (fundamentadas historicamente) ...
Quando você tem pullup (em vez de push-pull), obviamente você pode ter vários dispositivos em disputa para o barramento sem correntes excessivas (uma coisa boa - mas você pode conseguir o mesmo com um pulldown).
Nos "velhos tempos" dos transistores bipolares, a lógica TTL mais simples usava coletores abertos com transistores NPN - tudo é referenciado ao terra, o que facilita a definição dos níveis de gatilho, independentemente da tensão do barramento. Além disso, o NPN foi mais rápido que o PNP.
Se eu tiver vários dispositivos trabalhando com sua própria tensão de alimentação, e essa tensão de alimentação não for constante, é imprescindível um pull-up em vez de um pull-down . Se vários dispositivos tentassem puxar o barramento para seus respectivos trilhos de suprimento, o fluxo de corrente seria irrestrito e algo poderia fritar. Pelo menos todos eles concordam com o valor do terreno, portanto esse problema não surge.
Com o CMOS, a história muda - agora o nível do gatilho é intermediário. Mas os EEs podem ser um bando tradicional. Certamente, desde os primeiros dias do transistor, nunca questionei a escolha de flexões, pelas razões acima.
Como eu disse, isso é apenas especulação.
Isso pode ser uma coisa histórica.
Transistores antigos e circuitos integrados realmente consumiram menos energia quando estavam em 5 V do que em 0 V. Como havia uma diferença significativa entre os dois níveis, os projetistas optaram por tornar o estado de inatividade em 5 V. Então, com o passar do tempo, os transistores e os CIs melhoraram, fazendo com que ambos os estados consumissem aproximadamente a mesma quantidade de energia, mas não havia motivo real para mudar os padrões.
Agora, você vê muitas coisas assim - onde a ociosidade é de 5 V - apenas porque os padrões nunca mudam.
Faz muitos anos desde que li as especificações do I2C, mas lembro-me de quando era usado pela primeira vez as pessoas o chamavam de barramento coletor aberto de 2 fios. Tornou as conexões e a detecção de colisões super fáceis, mesmo para trocas de bits. Até 20 anos atrás, não era considerado um ônibus de alto desempenho, apenas barato e fácil.
Eu diria que é porque o I2C é definido como um barramento em que todas as unidades conectadas devem ser de dreno aberto ou coletor aberto. Isso significa que ele só pode conduzir o barramento baixo, não alto. (Quando o transistor da unidade de saída é desligado, o pino está em um estado de alta impedância.)
Esse esquema oferece alguns benefícios interessantes, por exemplo, que você pode conectar dispositivos com tensões de sinalização diferentes e que o barramento é auto-reparável por erros de comunicação.
Obviamente, o padrão poderia ter sido definido ao contrário, como uma configuração ociosa-baixa / ativa-alta, e as outras respostas aqui abordam esse elemento muito bem.
Fonte: LabWorX 1, Dominando o barramento I2C, de Vincent Himpe. Um livro realmente bom sobre o I2C, é seu histórico, como implementá-lo em hardware e como usá-lo em implementações de software e depuração.
A resposta real em que ninguém tocou adequadamente ainda é que permite conectar dispositivos que são alimentados por tensões diferentes (desde que os pinos de E / S sejam tolerantes). Por exemplo, um dispositivo de 3,3V pode se comunicar com um dispositivo que é desligado em 1,8V, desde que a IO do dispositivo de 1,8V seja tolerante a tensões de até 3,3. É claro que todos os dispositivos podem operar com 0V, mas nem todos os dispositivos podem aumentar a tensão nos seus resistores de pull-up.
Além disso, a maioria dos CIs pode afundar mais atual do que a fonte. Isto é devido à dissipação de calor. Portanto, afundar corrente (terra de acionamento) de pull-ups é mais fácil para a peça do que fornecer corrente (acionando uma alta tensão) para as pull-downs.