¿Por qué se requiere que las resistencias pull-up estén conectadas a las 2 líneas de I2C? [duplicar]

2

Sin las resistencias de pull-up conectadas a las 2 líneas de I2C, la comunicación I2C falla. ¿Por qué es necesario tener resistencias pull-up para I2C? Por el contrario, UART y SPI no necesitan resistencias pull-up.

Otra pregunta secundaria es ¿cómo se elige el valor de la resistencia?

    
pregunta user768421

3 respuestas

9

UART y SPI tienen controladores dedicados push-pull: esto significa que puede haber problemas cuando dos controladores están conectados a la misma línea porque las salidas "chocan". La arquitectura de IIC es que los controladores son de colector abierto (o de drenaje abierto) y solo pueden tirar de la línea hacia abajo. Debido a esto, las resistencias se utilizan para hacer retroceder la línea cuando el chip del controlador no está activo.

Es tal como está en IIC.

    
respondido por el Andy aka
6

I2C tiene algunas características que mejoran en otros buses de comunicación, y para implementar eso, tuvo que cambiar a un estilo diferente de conexión. Si dos dispositivos fuerzan una línea a dos estados diferentes, puede acortar la línea y posiblemente dañar algo.

UARTs / Serial y SPI son comunicaciones unidireccionales. Con esto quiero decir que cada línea está dedicada en una sola dirección. Tienes un pin transmisor y otro receptor. Como cada pin está dedicado a esa dirección, puede ser controlado por un lado sin preocupaciones. Lo que lleva al segundo rasgo faltante en ellos, es que son esencialmente un solo maestro. Debe tener un bus dedicado para cada UART, y para los propósitos más prácticos, cada maestro SPI. Finalmente, no hay manera de resolver conflictos en el bus, incluso si no hay daños si dos dispositivos intentan hablar sobre él.

I2C no tiene estos fallos. Su configuración de colector abierto permite que una sola línea de comunicación funcione en ambas direcciones, con varios esclavos. Puede tener varios maestros, ya que hay una forma integrada de verificar la línea. Un esclavo puede mantener presionado el reloj (alargamiento del reloj) si necesita más tiempo. Un superconjunto de I2C llamado SMBus permite aún más funciones, como permitir arbitrariamente que un esclavo emita una señal o alarma.

En pocas palabras, I2C necesita pull-ups como opción de diseño para permitir que falten varias funciones de otros buses de comunicación, principalmente para permitir más comunicación en un solo par de cables

    
respondido por el Passerby
1
  

Cada bus I2C debe terminarse

     
    

El bus I2C se basa en la tecnología de drenaje abierto. Excepto en un caso especial junto con el modo de alta velocidad, ningún dispositivo I2C puede conducir el bus, es decir, enviar un 1 al poner el voltaje en el bus. En cambio, el bus termina en un nivel alto, por ejemplo. 5 V y ambas líneas, SCL y SDA, permanecen allí durante el modo inactivo. Un dispositivo envía un 0 tirando del autobús al nivel del suelo. Se envía un 1 al no hacer nada, es decir, dejar el autobús en un nivel alto. La terminación de las líneas I2C se logra conectando el bus a la tensión de referencia del bus a través de una resistencia apropiada. La terminación faltante o incorrecta es la fuente de muchos problemas de campo. Como regla general, cuanto mayor sea la terminación, mejores serán las señales. Por otro lado, una terminación alta presenta un riesgo potencial de dañar los componentes. Por cierto, en términos de ingeniería I2C, una terminación alta significa una fuerte recuperación de VCC que se traduce en un valor bajo para la resistencia.

  

Quote From: enlace

    
respondido por el GisMofx

Lea otras preguntas en las etiquetas