Por que o I²C possui apenas resistores pull-up (pergunta da entrevista)?


15

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?



Assim como um comentário, o protocolo de barramento I2C de modo ultra rápido funciona como configuração push-pull, consulte nxp.com/documents/user_manual/UM10204.pdf , seção 3.2 Protocolo de barramento I2C de modo ultra rápido
Kvegaoro

Eu me pergunto por que o NXP não especificou um protocolo I2C ultra-rápido que usava SDA bidirecional e SCK unidirecional, tinha o SDA da unidade principal com força quando queria gerar uma alta e o mestre esperou o tempo suficiente para que a linha fosse puxada alta nos casos em que se importaria com o que um escravo tinha a dizer?
Supercat 8/15

O entrevistador deu a sua versão da resposta?
copper.hat

Respostas:


14

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:

  • Eles geralmente têm uma resistência muito menor ( RDSON )
  • Eles ligam e desligam mais rápido

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.


Não concordo que "alta velocidade" seja considerada no I2C (pelo menos em seu design inicial). Flexões resistivas dificilmente são o caminho para alcançar alta velocidade, se esse é o objetivo.
The Photon

1
Não confunda troca de velocidade mais alta com largura de banda maior. A comutação de alta velocidade oferece bordas muito mais nítidas, o que significa uma comunicação mais confiável.
Majenko

1
Flexões resistivas também não são o caminho para atingir maior velocidade de comutação.
The Photon

é por isso que a seleção dos valores corretos do resistor para I2C é importante 'e por que o Arduino é ruim ao usar os pullups internos por padrão.
Majenko

Sim, você pode escolher seus resistores para obter melhores tempos de subida. Mas todo o sistema ainda é mais lento e / ou usa mais energia do que seria com os drivers de totem (o que naturalmente acrescentaria outros custos).
The Photon

12

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.


Estou quase 100%, esta é a resposta que eles estavam procurando. Tenho um amigo que foi perguntado em uma entrevista para uma grande empresa fabricante de CPU (adivinhe qual) e essa foi a resposta que eles estavam procurando.
User34920

6

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.


6

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.


2

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.


1

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.


Ainda é verdade que a maioria dos CIs pode consumir mais energia do que a fonte, por isso ainda é aplicável.
Joel B

1

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.


1

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.


1

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.

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.