¿Concepto de drenaje abierto en el bus I2C?

6

(Soy principalmente de un fondo de software y recién comencé a trabajar en una plataforma integrada. Disculpe si esta es una pregunta ingenua ...)

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

El tutorial dice:

  

Las líneas SCL y SDA son controladores " de drenaje abierto ". Lo que esto significa es   que el chip puede reducir su salida, pero no puede hacerlo alto.   Para que la línea sea alta debe proporcionar resistencias de pull-up   A la oferta de 5v. Debe haber una resistencia desde la línea SCL hasta la   Línea 5v y otra desde la línea SDA hasta la línea 5v. Solo necesitas   Un conjunto de resistencias pull-up para todo el bus I2C, no para cada uno.   dispositivo, como se ilustra a continuación:

     

La parte roja en la imagen anterior es agregada por mí. Supongo que así es como es la imagen completa.

Mis preguntas son:

  • ¿Mi adición de la MCU roja es correcta?
  • La parte en negrita el chip es la MCU roja, ¿verdad?
  • ¿Por qué es cierto que el chip no puede aumentar su nivel ? ¿Está unable o forbidden para?
  • ¿Qué significa drenaje abierto en inglés simple?

Busqué un poco pero parece que no puedo encontrar una explicación clara ... tal vez una analogía ayude.

    
pregunta smwikipedia

4 respuestas

4
  

Mis preguntas son:

     
  • ¿Mi adición de la MCU roja es correcta?
  •   
  • La parte en negrita el chip es la MCU roja, ¿verdad?
  •   
  • ¿Por qué es cierto que el chip no puede aumentar su nivel ? ¿Está unable o forbidden para?
  •   
  • ¿Qué significa drenaje abierto en inglés simple?
  •   

Busqué un poco pero parece que no puedo encontrar una explicación clara ...

Uno bastante claro es aquí (que es donde Wikipedia lo lleva si escribe "drenaje abierto ").

Elcolectorabierto(BJT)odrenajeabierto(FET)esesencialmenteuninterruptorSPSTqueconectaelpinICalsuelo.Sielinterruptorestácerrado,entonceselvoltajeenelpin(ylalíneaI²C)esdeaproximadamente0voltios.Sisecierrantodoslosinterruptores(sialgúnpindealgúnICestáconectadoalamismalíneaSDAoSCL),elvoltajeenlalíneaesdeaproximadamente0voltios.Solositodosdelosinterruptoresestánabiertos,elvoltajeenlalíneaesalto(como3.3V)yesporesoquelalínearequiereunasolaresistenciapull-up.

Algunasveceslollaman"wired-OR" o "wired-NOR" , pero a mí me parece que con más precisión se llama a un "wired -Y ". El valor de la línea es 1 si y solo si todas las salidas son lógicas 1 . Si alguna salida va a la lógica 0 , toda la línea va a 0 .

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

Es ambos cierto que cualquier chip I²C no puede y no debe impulsar las líneas SDA o SCL. Lo único que puede tirar de las líneas altas son las dos resistencias de pull-up conectadas a + V DD .

    
respondido por el robert bristow-johnson
16
  

¿Mi adición de la MCU roja es correcta?

No exactamente. La MCU es solo otro miembro del bus como el resto de los dispositivos. No hay nada particularmente especial sobre cómo funciona la MCU en el bus I2C. La MCU puede reconocer cuando una de las líneas es alta o baja, y la MCU puede jalar una (o ambas) de las propias líneas para comunicarse con todos los demás dispositivos en el bus.

  

La parte en negrita del chip es la MCU roja, ¿verdad?

Esto 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 elevarlo?

Si comprendiera la naturaleza de los buses de extracción abierta y pasiva, entendería que no es una pregunta adecuada. No QUIERES que ninguno de los dispositivos lo lleve alto, ya que eso impediría por completo cualquier comunicación en el bus. Los dispositivos solo pueden comunicarse si pueden bajar el bus BAJO para que todos los demás dispositivos en el bus puedan reconocer que se está llevando a cabo la actividad.

  

¿Qué significa el drenaje abierto en inglés simple?

Es como el sistema de señalización utilizado en muchos vehículos de transporte público. Hay una "cuerda" larga a lo largo del auto, y CUALQUIERA a lo largo de la línea puede tirar de la "cuerda" para indicar que quieren bajar en la próxima parada. Si arregla la "cuerda" para que siempre esté ALTA, entonces nadie podría tirar de ella para indicar una parada.

    
respondido por el Richard Crowley
5

"El chip" se refiere a cualquier dispositivo I2C; en general, el maestro controlará el reloj, pero SDA es bidireccional, ya que los esclavos tienen datos para transmitir. Por lo tanto, tanto el amo 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 bus, y la cuerda / arnés que usa para indicar al conductor que se detenga. Todo el mundo en el autobús puede tirar de él y tirarlo hacia abajo, pero la tensión en esa línea lo hará retroceder después de que lo sueltes. La fuerza del pull up + la capacitancia en la línea determinará qué tan rápido puedes correr.

Eléctricamente, generalmente es un pin con un MOSFET de canal N que se puede encender para reducir la corriente y bajar la línea. Liberar el FET / apagarlo permite que la resistencia de pull-up restaure el valor del bus a '1'.

    
respondido por el Krunal Desai
0

(Gracias por todas las respuestas hasta ahora. Después de días de leer el Tutorial de I2C y varios materiales relacionados en el < a href="https://learn.sparkfun.com"> sitio SparkFun , todas estas respuestas comienzan a tener sentido para mí ahora. Y a continuación, mi propio resumen.)

Drenaje abierto o colector abierto

Esta jerga acaba de describir cómo se construye el circuito. Tal como se describe en el enlace de robert bristow-johnson , el circuito de drenaje / colector abierto tiene un BJT/MOSFET between la señal de salida de IC real y el pin IC expuesto. Es el colector de BJT o el drenaje del MOSFET exposed (creo que esto es para lo que open está destinado). Y una resistencia de pull-up está usualmente conectada al pin externamente al IC. Como se muestra a continuación:

Es la resistencia que eleva el voltaje en lugar de que el IC ofrezca una señal de alto voltaje, así que supongo que esto es lo que Richard Crowley significa por passive pullup .

contención de autobuses

Si todos los pines de salida de los dispositivos en la línea utilizan este circuito, será imposible que ocurra una caída de voltaje entre los 2 pines del dispositivo. Así que no hay 2 dispositivos que sean cortocircuitos.

    
respondido por el smwikipedia

Lea otras preguntas en las etiquetas