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?
Respostas:
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.
fonte
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.
fonte
É 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.
fonte
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.
fonte
Se eu entendi a pergunta corretamente, um aspecto é:
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 ...
fonte
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.
fonte
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.
fonte