9 votos

¿Concepto de drenaje abierto en el bus I2C?

(Yo soy principalmente de un fondo de software y acaba de empezar a trabajar en una plataforma embebida. Discúlpeme si esta es una pregunta ingenua...)

Estoy planeando escribir un driver para una EEPROM que está conectada al MCU a través de un bus I2C. Así que estoy leyendo un tutorial sobre el bus I2C.

El tutorial dice:

Ambas líneas SCL y SDA son " drenaje abierto ". Lo que esto significa es que el chip puede hacer que su salida sea baja, pero no puede llevarlo a lo alto. Para que la línea pueda llegar a un nivel alto hay que poner resistencias de pull-up a la alimentación de 5v. Debe haber una resistencia desde la línea SCL a la línea de 5v y otra desde la línea SDA a la línea de 5v. Sólo necesitas un conjunto de resistencias pull-up para todo el bus I2C, no para cada dispositivo, como se ilustra a continuación:

Picture of three devices plus MCU on I2C bus with pull-up resistors on SCL and SDA

La parte roja de la imagen anterior la he añadido yo. Supongo que así es toda la imagen.

Mis preguntas son:

  • ¿Es correcta mi adición de la MCU roja?
  • La parte en negrita el chip es el MCU rojo, ¿verdad?
  • ¿Por qué es cierto que el chip no puede conducirlo a lo alto ? ¿Es así? no puede o prohibido ¿a?
  • ¿Qué hace drenaje abierto ¿quieren decir en inglés sencillo?

He buscado un poco pero parece que no encuentro una explicación clara... quizás una analogía ayude.

18voto

noname Puntos 8

¿Es correcta mi adición de la MCU roja?

No exactamente. La MCU es un miembro más del bus como el resto de los dispositivos. No hay nada particularmente especial sobre cómo la MCU opera en el bus I2C. La MCU puede reconocer cuando cualquiera de las líneas es alta o baja, y la MCU puede tirar de cualquiera (o ambas) de las líneas por sí misma para comunicarse con todos los demás dispositivos del bus.

La parte en negrita el chip es el MCU rojo, ¿verdad?

Implica que la MCU es de alguna manera diferente a los otros dispositivos en el bus I2C. Pero en realidad, NO es especial.

¿Por qué el chip no puede conducirlo alto?

Si entendieras la naturaleza de los buses pullup pasivos y de drenaje abierto, entenderías que no es una pregunta adecuada. Usted no QUIERE que ninguno de los dispositivos lo lleve a un nivel alto porque eso impediría completamente cualquier comunicación en el bus. Los dispositivos sólo pueden comunicarse si pueden poner el bus en LOW para que todos los demás dispositivos en el bus puedan reconocer que hay actividad.

¿Qué significa el desagüe abierto en términos sencillos?

Es como el sistema de señalización utilizado en muchos vehículos de transporte público. Hay una larga "cuerda" a lo largo del vagón, y CUALQUIER persona de la línea puede tirar de la "cuerda" para señalar que quiere bajarse en la siguiente parada. Si se fija la "cuerda" para que esté siempre ALTA, nadie podrá tirar de ella para señalar una parada.

6voto

Krunal Desai Puntos 593

"El chip" se refiere a cualquier dispositivo I2C; generalmente, el maestro manejará el reloj, pero SDA es bidireccional ya que los esclavos tienen datos que transmitir de vuelta. Por lo tanto, tanto el maestro como los esclavos son capaces de tirar de SDA; los dispositivos avanzados también pueden ser capaces de alternar SCL además del maestro.

Una analogía simple para el drenaje abierto es un autobús, y la cuerda / arnés que se utiliza para señalar al conductor para una parada. Todo el mundo en el autobús puede tirar de ella y bajarla, pero la tensión de la cuerda la volverá a subir después de soltarla. La fuerza del tirón hacia arriba + la capacitancia de la línea determinarán la velocidad a la que se puede correr.

Eléctricamente, es generalmente un pin con un MOSFET de canal N que puede ser encendido para hundir la corriente y tirar de la línea baja. Si se libera el FET / se apaga, la resistencia de pull-up restablece el valor del bus a '1'.

6voto

anonymous Puntos 26

Mis preguntas son:

  • ¿Es correcta mi adición de la MCU roja?
  • La parte en negrita el chip es el MCU rojo, ¿verdad?
  • ¿Por qué es cierto que el chip no puede conducirlo a lo alto ? ¿Es así? no puede o prohibido ¿a?
  • ¿Qué hace drenaje abierto ¿quieren decir en inglés sencillo?

He buscado un poco pero parece que no encuentro una explicación clara...

Una bastante clara es aquí (que es donde la Wikipedia te lleva si escribes "drenaje abierto" ).

Enter image description here

El colector abierto (BJT) o drenaje abierto (FET) es esencialmente un interruptor SPST que conecta el pin del CI a tierra. Si el interruptor está cerrado, entonces el voltaje en el pin (y la línea I²C) es de aproximadamente 0 voltios. Si cualquier Los interruptores están cerrados (si algún pin de cualquier IC está conectado a la misma línea SDA o SCL), la tensión en la línea es de aproximadamente 0 voltios. Sólo si todo de los interruptores están abiertos es el voltaje en la línea de alta (como 3,3 V) y es por eso que la línea requiere una sola resistencia de pull-up.

A veces lo llaman "cable-OR" o "wired-NOR" pero me parece que lo más acertado es llamarlo "cable-AND" . El valor de la línea es 1 si y sólo si todas las salidas son lógicas 1 . Si alguna salida pasa a la lógica 0 toda la línea va a 0 .

Eso es lo que drenaje abierto significa. Su MCU roja es sólo otro dispositivo I²C, excepto que podría ser el único controlador en el cable-AND SCL a menos que se produzca un estiramiento del reloj (cualquiera de los otros dispositivos I²C puede mantener la línea SCL baja si lo desea y eso debería retener el ciclo de lectura o escritura en la línea SDA).

Es ambos cierto que cualquier chip I²C puede no y debe no conduce las líneas SDA o SCL a nivel alto. Lo único que puede poner las líneas en alto son las dos resistencias pull-up conectadas a +V DD .

0voto

T1000 Puntos 31

(Gracias por todas las respuestas hasta ahora. Después de días de leer el Tutorial de I2C y diversos materiales relacionados en el Sitio de SparkFun Todas estas respuestas empiezan a tener sentido para mí. Y a continuación está mi propio resumen).

Drenaje abierto o colector abierto

Esta jerga acaba de describir cómo se construye el circuito. Tal y como se describe en robert bristow-johnson 's enlace el circuito colector/de drenaje abierto tiene un BJT/MOSFET entre la señal de salida del CI real y el pin del CI expuesto. Es el colector del BJT o el drenaje del MOSFET obtienen expuesto (Creo que esto es lo que el open está destinado). Y una resistencia de pull-up es normalmente conectado al pin externo del CI. Como se muestra a continuación:

open-drain or open-collector

Es la resistencia la que sube el voltaje y no el CI el que ofrece una señal de alto voltaje, así que supongo que esto es lo que Richard Crowley significa por passive pullup .

Contención del autobús

Si todos los pines de salida de los dispositivos de la línea utilizan este circuito, será imposible que se produzca alguna caída de tensión entre 2 pines de dispositivos. Por lo tanto, no habrá 2 dispositivos en cortocircuito.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X