Por que o I2C foi projetado para trabalhar com resistores pull-up e não com pull-down?

22

Entendo que nas linhas I2C, SCL e SDA use resistores pull-up e os drivers de pinos são dispositivos NPN de coletor aberto que podem direcionar os pinos ao terra. Isso dá à I2C a vantagem de que o mesmo barramento agora pode ser compartilhado com vários escravos, e mesmo que dois ou mais escravos tentem acidentalmente dirigir o barramento ao mesmo tempo, isso não causará danos ao sistema.

Mas isso também pode ser feito usando drivers de dreno aberto PNP e resistores pull-down nas linhas SDA e SCL. Coisas como alongamento do relógio e arbitragem multimestre também podem ser alcançadas com isso.

A implementação atual do protocolo I2C oferece algum benefício em relação à implementação alternativa sugerida acima?

Ashutosh
fonte
1
transistores de coletor aberto pareciam estar na maioria dos CIs nos anos 80.
PlasmaHH
9
@PlasmaHH Acho que o motivo foi o NPN (tanto quanto me lembro vagamente) ter mais capacidade atual por área devido à maior mobilidade de elétrons no substrato, por isso é mais fácil construir estágios de saída "fortes" com isso.
Marcus Müller
7
@ MarcusMüller De fato, isso era (e ainda é) verdade. NPNs e NMOS Fets são "mais fortes" quando recebem o mesmo tamanho. No CMOS, um fator 2 a 3 é típico. Para PNP vs NPN, isso depende do processo de fabricação, mas quase sempre os PNPs são muito mais difíceis e complexos do que os NPNs. Também começando com um substrato dopado com P (como a maioria dos processos) enfatiza isso (melhores NPNs).
Bimpelrekkie
@Bimpelrekkie Lembro-me de um fator de 2,3 de minha sólida classe física do estado para esta data :-)
winny
1
Se o barramento I2C existente for acidentalmente em curto-circuito, por qualquer motivo, você consumirá apenas a corrente do resistor de pull-up. Com o arranjo complementar de drivers ativos altos e resistores pull-down, você danificaria drivers simples dos anos iniciais do I2C. Ao alternar entre placas, o curto-circuito no chassi é uma consideração. Mas esse é apenas um dos muitos motivos pelos quais os drive-low pull-high são acionados, o que outros responderam abaixo.
TonyM

Respostas:

30

Eletricamente, faz sentido porque o terra é a única conexão comum a todos os dispositivos em um barramento IIC. Isso é muito menos uma restrição do que forçar a energia a ser a conexão comum a todos os dispositivos da CII, pois seria necessário se as linhas fossem conduzidas altas e flutuassem baixo através de pulldowns.

Observe que nem todos os dispositivos da CII precisam ser alimentados da mesma rede ou da mesma tensão. Isso não seria verdade se as duas linhas de barramento tivessem que ser direcionadas para a única tensão de energia comum.

Olin Lathrop
fonte
5
Não é meu voto negativo, e você deve ter tantos anos de experiência em I2C quanto eu, por isso meu argumento aqui provavelmente é um mal-entendido, mas: "Os dispositivos da CII nem todos precisam ser alimentados com a [...] mesma tensão " pode ser visto como implicando que dispositivos I2C de 5V e 3V (por exemplo) poderiam compartilhar o mesmo barramento I2C, sem componentes ou precauções adicionais (já que você não mencionou tradutores de nível). E é claro que eles não podem fazer isso, já que os limites lógicos I2C de cada dispositivo agora são referenciados ao seu próprio Vcc. Talvez a falta de uma menção explícita aos tradutores de nível tenha causado o voto negativo?
SamGibson
13
Dependendo dos pull-ups e pinos de E / S usados, as comunicações no estilo I2C podem operar sem problemas entre dispositivos de 5V e 3,3V. Usar extensões de 10K a 5V, por exemplo, permitiria o uso de dispositivos de 3,3V se eles tivessem entradas não fixadas com tolerância a 5V ou se eles pudessem tolerar 150uA em seus diodos de proteção. E o uso de pullups para 3,3V funcionará, pelo menos em velocidades mais lentas, para interface com dispositivos de 5V que possuem um limite alto de entrada de 2,5V ou menos.
Supercat
7
@ Sam: Na verdade, dispositivos IIC de 5 V e 3,3 V podem estar no mesmo barramento IIC. Dispositivos com níveis de tensão fixos, independentemente da tensão de alimentação, são mencionados e sancionados especificamente nas especificações da CII.
precisa
5
No documento antigo "O barramento I2C e como usá-lo" da Philips, a seção 10.0 menciona os limites de entrada fixos dos dispositivos I2C 5V antigos (normalmente NMOS). Em seguida, diz: " Os dispositivos de barramento I2C com níveis de entrada relacionados ao VDD devem ter uma linha de alimentação comum à qual o resistor de pull-up também está conectado " (em negrito). @supercat - você mencionou: " dispositivos de 5V com um limite alto de entrada de 2,5V ou menos " Você pode me ajudar, dando um exemplo desse dispositivo? Lendo documentos antigos do I2C, só consigo encontrar menções de um mínimo fixo de 3V I2C Vih para esses dispositivos antigos de 5V. Obrigado.
SamGibson
2
@ SamGibson: Os dispositivos com níveis de entrada relacionados ao VDD podem precisar operar com tensões que estão dentro de um determinado intervalo entre si. A proximidade entre elas depende de como as tensões estão relacionadas ao VDD. A folha de dados do Microchip para o PIC16F877 (uma parte de 5V selecionada arbitrariamente) lista V (IH) para seus pinos normais como 0,25VDD + 0,8V, embora para suas entradas do Schmitt Trigger seja muito maior. Em VDD = 5,2V, uma entrada normal teria um V (IH) especificado de 2,1 volts; Não vi uma especificação para o hardware I2C V (IH), embora o gráfico de desempenho típico sugira que está entre as entradas normais e ST.
Supercat
24

Nos bons velhos tempos, os motoristas TTL eram muito melhores em puxar um sinal para baixo do que puxá-lo para cima. Portanto, protocolos como I2C, mas também linhas de interrupção, redefinição e outros, foram todos implementados usando um pull-up com pull-down distribuído.

Velhote
fonte
8
Nos melhores dias modernos, o mesmo ainda é verdade, pois é uma propriedade intrínseca dos semicondutores. Hoje, apenas não custa tanto obter um transistor mais robusto para suportar a mesma corrente.
Arsenal
2
Disseram-me que com o CMOS também é muito mais fácil se aproximar da tensão do trilho de potência. Outra "questão" em que o TTL estava lutando. (Talvez devêssemos contar-nos sorte para isso, pois permitiu 3V3 CMOS para fazer a interface com TTL)
Oldfart
14

É mais fácil usar o terra como uma referência comum entre subsistemas que podem ter tensões de alimentação variadas. Se você usar transistores PNP para aumentar a tensão de alimentação, todos os subsistemas deverão estar conectados à mesma fonte.

Dave Tweed
fonte
8

Boas respostas abundam aqui, mas também há outra razão.

Se o estado de inatividade do barramento estiver no solo, não há como saber se o barramento está conectado ou apenas pendurado no espaço.

É normal que o pull-up esteja localizado no dispositivo mestre. Escravos geralmente não têm um pull-up. Isso ocorre porque a corrente suspensa necessária para afirmar um nível baixo aumentaria com o número de dispositivos conectados ao barramento.

Um escravo, quando conectado ao barramento, pode então detectar que a linha está puxada para o alto (supondo que não esteja sendo usada) e saber que o barramento está realmente lá e silencioso. Esse não seria o caso de um barramento de terra.

Trevor_G
fonte
Para detectar o barramento que está sendo puxado alto, um escravo deve puxá-lo para baixo em primeiro lugar. Não sei por que um procedimento semelhante não seria possível com a polaridade oposta.
Dmitry Grigoryev
@DmitryGrigoryev por que precisaria puxar algo que já está alto?
precisa saber é o seguinte
5

Se eu entendi a pergunta corretamente, um aspecto é:

  • Por que você usa resistores pull-up e transistores NPN em vez de resistores pull-down e transistores PNP?

Antes de tudo, observe que você não usa transistores bipolares (NPN, PNP), mas MOSFETs (que existem em quatro variantes diferentes).

Os dispositivos que utilizam a variante " pull-up and NPN " usam um MOSFET de aprimoramento de canal n . Como a fonte deste MOSFET está conectada ao terra, a tensão da fonte da porta (controlando o fluxo de corrente) é igual à tensão entre a porta e o terra. Portanto, o MOSFET pode ser controlado usando uma tensão entre 0 e Vdd.

Haveria três possibilidades para implementar a variante " pull-down and PNP ":

  • Usando um MOSFET de aprimoramento de canal p

    Em um MOSFET de canal p de NMOS ou CMOS IC com características comparáveis ​​(resistência etc.), requer mais espaço que os MOSFETS de n canais.

    Na microeletrônica, o espaço é dinheiro, portanto os MOSFETs de canal p são evitados, se possível.

  • Usando um MOSFET de aprimoramento de canal n

    Isso exigiria que a saída do circuito lógico que aciona o transistor tenha uma tensão "BAIXA" da tensão de alimentação (por exemplo, + 5V) e uma tensão "ALTA" acima da tensão de alimentação (por exemplo, + 10V quando o restante do circuito é fornecido com + 5V).

    O motivo: a tensão terra-fonte será Vdd quando o MOSFET estiver conduzindo. A tensão da fonte da porta deve ser positiva, portanto a tensão entre a porta e o terra deve ser ainda maior.

    Você precisaria de duas fontes de tensão - e um circuito deslocando a saída do circuito lógico de 0 ... + 5V para + 5V ... + 10V ...

  • Usando um MOSFET de depleção de canal n

    Infelizmente, não posso falar muito sobre essa solução. No entanto, encontrei uma página usando o Google dizendo que MOSFETs de depleção são mais difíceis de produzir do que MOSFETs de aprimoramento e são evitados por esse motivo.

    Sei da eletrônica de potência (não da microeletrônica) que a variante "duas fontes de alimentação" descrita acima é ainda preferida aos MOSFETs de depleção. (Mas não sei dizer por quê.)

    EDIT Usando MOSFETs de depleção de canal n, você provavelmente precisaria de uma tensão negativa (por exemplo, -5V), assim também precisaria de duas tensões de alimentação ...

Martin Rosenau
fonte
0

Há também mais um benefício adicional por ter linhas de dados comuns e pull-up (além de ter VCC e pull-down comuns):

Mesmo que a intenção original fosse conectar dispositivos no mesmo PCB apenas em alguns centímetros, foi bem-sucedido o suficiente, agora não é incomum ter as linhas por muito tempo e conectar "dispositivos" que podem ser computadores ou algo igual. complexidade, com alguns dispositivos com fontes de energia próprias (de qualidade diferente, digamos que você conecte algo a uma tomada com algo a bateria). É melhor se a conexão funcionar "pelo menos bem", mesmo em condições não ideais e fora da especificação.

E muitos desses dispositivos conectados podem, de alguma forma, ser conectados também por outros meios, e somente na comunicação I2C. Geralmente, ao conectar dispositivos, você o conecta common ground- às vezes como parte de outras funções, às vezes apenas porque é montado em uma caixa de metal e os dispositivos também são conectados à terra com a caixa (ou com um cooler comum ou algo assim) ou pode haver cabo blindado com blindagem aterrada no interior - que também conecta o aterramento.

Se você também conectar diretamente linhas de energia (VCC) desses dispositivos, terá problemas quando essas linhas estiverem com voltagem diferente naturalmente (com certeza, pode dizer 5V aqui e ali, mas dependendo da tolerância de construção e parte das fontes de energia). também pode ser de 4,9V ou 5,2V ou até mesmo mudar, se estiver alimentado por bateria e algumas vezes executando alguns motores, fazendo com que a energia caia e suba com o tempo).

Nesse caso, existe efetivamente um curto-circuito entre as fontes de energia da parte a Volt e, dependendo das fontes (e resistência dos meios), poderia fluir correntes relativamente altas, resultando não apenas em desperdício de energia e aumento de calor, mas talvez até em danos ( ou encurtando a vida) de algumas dessas fontes. O que não é bom.

Ter terra comum e pull-ups evita esses problemas - o terra é terra e os resistores de pull-pull permitem apenas uma corrente cruzada muito pequena, mesmo que o VCC seja muito diferente dos dispositivos.

gilhad
fonte
1
Isso é essencialmente o mesmo que a resposta de Dave Tweed.
Janka
-2

Você não precisa enviar tanta energia através do chip, se for necessário.

Como o chip não conduz nada, ele está apenas criando um curto para levar o ônibus para 0 e fazendo um aberto para trazê-lo para 1.

Se fosse puxado para baixo, você teria que enviar energia através do chip para conduzir o barramento para 1. Se o barramento for acidentalmente curto, pode haver muita energia que você atravessa esse chip para tentar pressioná-lo. até 1.

Disclaimer: Eu sou um EE bastante ruim neste momento.

Richard Wicks
fonte
3
Bem-vindo ao EE.SE. “ Você não precisa enviar tanta energia através do chip, se for puxado para cima. ” Se os resistores de puxar e puxar forem do mesmo tamanho, as correntes serão as mesmas. O pull-up exigirá que a corrente seja obtida do chip acionado e afundada no chip de acionamento. O pull-down exigirá que a corrente seja proveniente do chip de acionamento e afundada pelo chip acionado. Um curto acidental pode ser V + ou terra.
Transistor