¿Por qué I2C está diseñado para funcionar con resistencias pull-up y no con pull-down?


22

Entiendo que en I2C, las líneas SCL y SDA usan resistencias pull-up y los controladores de pin son dispositivos NPN de colector abierto que pueden conducir los pines a tierra. Esto le da a I2C la ventaja de que el mismo bus ahora se puede compartir con múltiples esclavos, e incluso si dos o más esclavos intentan accidentalmente conducir el bus al mismo tiempo, no causarán ningún daño al sistema.

Pero esto también se puede hacer utilizando controladores de drenaje abiertos PNP y resistencias pull-down en las líneas SDA y SCL. Con esto también se pueden lograr cosas como el estiramiento del reloj y el arbitraje multimaestro.

¿La implementación actual del protocolo I2C ofrece algún beneficio sobre la implementación alternativa sugerida anteriormente?


1
Los transistores de colector abierto parecían ser mayoría en circuitos integrados en los años 80.
PlasmaHH

99
@PlasmaHH Creo que la razón fue que NPN (por lo que recuerdo vagamente) tiene más capacidad actual por área debido a una mayor movilidad de electrones en el sustrato, por lo que es más fácil construir etapas de salida "fuertes" con eso.
Marcus Müller

77
@ MarcusMüller De hecho, eso era (y sigue siendo) cierto. NPNs y NMOS Fets son "más fuertes" cuando se les da el mismo tamaño. En CMOS es típico un factor de 2 a 3. Para PNP vs NPN depende del proceso de fabricación, pero casi siempre los PNP son mucho más difíciles y complejos que los NPN. También comenzar con un sustrato dopado con P (como lo hacen la mayoría de los procesos) enfatiza esto (mejores NPN).
Bimpelrekkie

@Bimpelrekkie Recuerdo un factor de 2.3 de mi clase de física de estado sólido hasta la fecha :-)
winny

1
Si el bus I2C existente se cortocircuita accidentalmente a tierra por algún motivo, entonces solo extraerá corriente de resistencia de pull-up. Con la disposición complementaria de controladores activos altos y resistencias pull-down, dañaría los controladores simples de los años iniciales de I2C. Al pasar de una placa a otra, se debe tener en cuenta el cortocircuito en el chasis. Pero es solo una de las muchas razones por las que se baja la velocidad de manejo, el resto de las cuales otros han respondido a continuación.
TonyM

Respuestas:


30

Eléctricamente tiene sentido porque la conexión a tierra es la única conexión común a todos los dispositivos en un bus IIC. Eso es una restricción mucho menor que forzar la alimentación a ser la conexión común a todos los dispositivos IIC, como se requeriría si las líneas se condujeran hacia arriba y flotaran hacia abajo a través de pulldown.

Tenga en cuenta que no todos los dispositivos IIC necesitan alimentación desde la misma red o el mismo voltaje. Esto no sería cierto si ambas líneas de bus tuvieran que ser conducidas al voltaje de energía común único.


55
No es mi voto negativo, y debe tener tantos años de experiencia en I2C como yo, por lo que mi punto aquí es probablemente un malentendido, pero: " No todos los dispositivos IIC necesitan ser alimentados [...] con el mismo voltaje " visto como que implica que los dispositivos I2C con alimentación de 5V y 3V (por ejemplo) podrían compartir el mismo bus I2C, sin ningún componente adicional o precaución (ya que no mencionó traductores de nivel). Y, por supuesto, no pueden hacer eso, ya que los umbrales lógicos I2C de cada dispositivo ahora se refieren a su propio Vcc. ¿Quizás la falta de una mención explícita de traductores de nivel causó el voto negativo?
SamGibson

13
Dependiendo de los pull-ups y los pines de E / S utilizados, las comunicaciones estilo I2C pueden funcionar sin problemas entre dispositivos de 5V y 3.3V. El uso de pull-ups de 10K a 5V, por ejemplo, permitiría el uso de dispositivos de 3.3V si tienen entradas no bloqueadas tolerantes a 5V o si pueden tolerar 150uA en sus diodos de protección. Y usar pullups a 3.3V funcionará, al menos a velocidades más lentas, para interactuar con dispositivos de 5V que tienen un umbral alto de entrada que es 2.5V o menos.
supercat

77
@Sam: En realidad, los dispositivos IIC de 5 V y 3,3 V pueden estar en el mismo bus IIC. Los dispositivos con niveles de voltaje fijos independientemente de su voltaje de suministro se mencionan específicamente y se sancionan en la especificación IIC.
Olin Lathrop

55
En el documento anterior "El bus I2C y cómo usarlo" de Philips, la sección 10.0 menciona los umbrales de entrada fijos de los primeros dispositivos I2C de 5V (típicamente NMOS). Luego dice: " Los dispositivos de bus I2C con niveles de entrada relacionados con VDD deben tener una línea de alimentación común a la que también esté conectada la resistencia pull-up " (en negrita). @supercat - usted mencionó: " dispositivos de 5V que tienen un umbral alto de entrada que es 2.5V o menos " ¿Pueden ayudarme dando un ejemplo de tal dispositivo? Al leer documentos antiguos de I2C, solo puedo encontrar menciones de un mínimo fijo de 3V I2C Vih, para esos dispositivos antiguos de 5V. Gracias.
SamGibson

2
@SamGibson: los dispositivos con niveles de entrada relacionados con VDD pueden necesitar funcionar con voltajes que se encuentran dentro de un cierto rango entre sí. Lo cerca que deben estar depende de cómo se relacionan los voltajes con VDD. La hoja de datos de Microchip para el PIC16F877 (una parte de 5V seleccionada arbitrariamente) enumera V (IH) para sus pines normales como 0.25VDD + 0.8V, aunque para sus entradas de disparador Schmitt sería mucho mayor. A VDD = 5.2V, una entrada normal tendría un V (IH) especificado de 2.1 voltios; No vi una especificación para el hardware I2C V (IH), aunque el gráfico de rendimiento típico sugiere que está entre las entradas normales y ST.
supercat

24

En los viejos tiempos, los conductores TTL eran mucho mejores para bajar una señal que para subirla. Por lo tanto, protocolos como I2C, pero también líneas de interrupción, reinicio y otros, se implementaron utilizando un pull-up con pull-down distribuido.


8
En los mejores tiempos modernos, lo mismo sigue siendo cierto, ya que es una propiedad intrínseca de los semiconductores. Hoy simplemente no cuesta tanto obtener un transistor pull-up más robusto para manejar la misma corriente.
Arsenal

2
Me dijeron que con CMOS también es mucho más fácil acercarse al voltaje del riel de alimentación. Otro 'problema' en el que TTL estaba luchando. (Tal vez deberíamos considerarnos afortunados por eso, ya que permitió que 3V3 CMOS interactuara con TTL)
Oldfart

14

Es más fácil usar tierra como referencia común entre subsistemas que pueden tener voltajes de suministro variables. Si usa transistores PNP para subir a una tensión de alimentación, todos los subsistemas tendrían que estar conectados a la misma fuente.


8

Aquí abundan las buenas respuestas, pero también hay otra razón.

Si el estado de reposo del autobús está en tierra, no hay forma de saber si el autobús está conectado o simplemente colgando en el espacio.

Es normal que el pull-up esté ubicado en el dispositivo maestro. Los esclavos generalmente no tienen pull-up. Esto se debe a que la corriente desplegable que se requeriría para afirmar un nivel bajo aumentaría con la cantidad de dispositivos conectados al bus.

Un esclavo, cuando está enchufado al bus, puede detectar que la línea está muy alta (suponiendo que no se esté usando) y saber que el bus está realmente allí y en silencio. Ese no sería el caso con un autobús sesgado a tierra.


Para detectar que el bus está en alto, un esclavo debe tirar de él en primer lugar. No estoy seguro de por qué un procedimiento similar no sería posible con la polaridad opuesta.
Dmitry Grigoryev

@DmitryGrigoryev ¿por qué necesitaría tirar de algo que ya está alto bajo?
Trevor_G

5

Si entiendo la pregunta correctamente, un aspecto es:

  • ¿Por qué utiliza resistencias pull-up y transistores NPN en lugar de resistencias pull-down y transistores PNP?

En primer lugar, debe tener en cuenta que no utiliza transistores bipolares (NPN, PNP) sino MOSFET (que existen en cuatro variantes diferentes).

Los dispositivos que utilizan la variante " pull-up y NPN " utilizan un MOSFET de mejora de n canales . Debido a que la fuente de este MOSFET está conectada a tierra, el voltaje de la fuente de la puerta (que controla el flujo de corriente) es igual al voltaje entre la puerta y la tierra. Por lo tanto, el MOSFET se puede controlar usando un voltaje entre 0 y Vdd.

Habría tres posibilidades para implementar la variante " desplegable y PNP ":

  • Uso de un MOSFET de mejora de canal p

    En un NMOS o CMOS IC, los MOSFET de canal p con características comparables (resistencia, etc.) requieren más espacio que los MOSFETS de canal n.

    En microelectrónica, el espacio es dinero, por lo que los MOSFET de canal p se evitan si es posible.

  • Uso de un MOSFET de mejora de n canales

    Esto requeriría que la salida del circuito lógico que impulsa el transistor tenga un voltaje "BAJO" del voltaje de suministro (por ejemplo, + 5 V) y un voltaje "ALTO" por encima del voltaje de suministro (por ejemplo, + 10 V cuando se suministra el resto del circuito con + 5V).

    La razón: el voltaje de la fuente a tierra será Vdd cuando el MOSFET esté conduciendo. El voltaje de la fuente de la puerta debe ser positivo, por lo que el voltaje entre la puerta y la tierra debe ser incluso mayor.

    Necesitaría dos fuentes de voltaje, y un circuito que desplace la salida del circuito lógico de 0 ... + 5V a + 5V ... + 10V ...

  • Uso de un MOSFET de agotamiento de n canales

    Lamentablemente, no puedo contarte mucho sobre esta solución. Sin embargo, encontré alguna página usando Google que decía que los MOSFET de agotamiento son más difíciles de producir que los MOSFET de mejora y se evitan por esta razón.

    Sé por la electrónica de potencia (no microelectrónica) que la variante de "dos fuentes de alimentación" descrita anteriormente es incluso preferible a los MOSFET de agotamiento. (Pero no puedo decirte por qué).

    EDITAR Usando MOSFET de agotamiento de n canales, probablemente necesitará un voltaje negativo (por ejemplo, -5V), por lo que también necesitará dos voltajes de alimentación ...


0

También hay un beneficio adicional más por tener líneas de datos de conexión a tierra y pull-up comunes (sobre tener VCC y pull-down comunes):

Incluso si la intención original era conectar dispositivos en la misma PCB en un lapso de pocas pulgadas solamente, fue lo suficientemente exitoso, por lo que ahora no es raro tener las largas líneas de par de pies y "dispositivos" de conexión que podrían ser computadoras o algo similar complejidad, con algunos dispositivos que tienen sus propias fuentes de alimentación (de diferente calidad, digamos que conectas algo enchufado a la pared con algo alimentado por batería). Es mejor, si la conexión funciona "al menos bien", incluso en condiciones no ideales y fuera de especificaciones.

Y muchos de estos dispositivos conectados pueden estar conectados de alguna manera también por otros medios, luego solo comunicación I2C. Por lo general, cuando conecta dispositivos entre sí, lo conecta, a common groundveces como parte de otras funciones, a veces solo porque está montado en una carcasa de metal y los dispositivos también están conectados a tierra con la carcasa (o con un refrigerador común o algo así) o puede haber ser cable blindado con blindaje a tierra en el interior, que también conecta los terrenos.

Si también conecta directamente las líneas de alimentación (VCC) de dichos dispositivos, obtendrá problemas cuando esas líneas tengan un voltaje diferente de forma natural (claro, puede decir 5V aquí y allá, pero dependiendo de la construcción y las tolerancias de las fuentes de alimentación) también podría ser de 4.9V o 5.2V o incluso cambiar, si funciona con batería y algunas veces hace funcionar algunos motores, lo que hace que la energía caiga y aumente con el tiempo).

En tal caso, existe efectivamente un cortocircuito entre esas fuentes de energía de parte de un voltio y, dependiendo de las fuentes (y la resistencia de las formas), podrían fluir corrientes relativamente altas, lo que daría como resultado no solo desperdicio de energía y aumento de calor, sino incluso daños ( o acortar la vida) de algunas de esas fuentes. Lo cual no es bueno.

Tener una conexión a tierra y pull-ups comunes evita estos problemas: la tierra es tierra y las resistencias pullup solo permiten una corriente cruzada realmente pequeña, incluso si el VCC difiere mucho de los dispositivos.


1
Esto es esencialmente lo mismo que la respuesta de Dave Tweed.
Janka

-2

No tiene que enviar tanta potencia a través del chip, si se levanta.

Debido a que el chip no maneja nada, solo está creando un corto para llevar el bus a 0, y haciendo una apertura para llevarlo a 1.

Si se tira hacia abajo, tendrías que enviar energía a través del chip para conducir el bus a 1. Si el bus es un corto accidental, podría ser una gran cantidad de energía que manejas a través de ese chip para intentar empujarlo. hasta 1.

Descargo de responsabilidad: soy un EE bastante pésimo en este momento.


3
Bienvenido a EESE. " No es necesario enviar tanta potencia a través del chip, si es pull up " . Si las resistencias pull-up y pull-down son del mismo tamaño, entonces las corrientes serán las mismas. El pull-up requerirá que la corriente provenga del chip impulsado y se hunda en el chip impulsor. La extracción requerirá que la corriente provenga del chip impulsor y que el chip impulsado la hunda. Un corto accidental podría ser V + o tierra.
Transistor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.