¿Siempre necesita un chip de expansión GPIO cuando usa i2c?

RESUMEN:

Estoy tratando de aprender los conceptos básicos para comprender cómo conectar un circuito simple usando el i2c. Quiero construir solo un proyecto simple que involucre un LED y un botón con mi raspberry pi. Por lo que entiendo, el "pi" ya es compatible con i2c e i2c no es una pieza de hardware, es solo un protocolo por lo que entiendo.

Sin embargo, inicialmente pensé que todo lo que tenía que hacer era conectar el botón pulsador y el LED a los pines SDA y SCL en los pines del "pi" y estaría bien. Pero aparentemente necesito un chip de expansión o algún dispositivo similar que proporcione instrucciones y registro para dispositivos como el LED y el botón pulsador.

PREGUNTA 1:

¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

Ya pedí un 579-MCP3008-I/P y un 579-MCP23017-E/SP por si tengo que hacerlo. No estoy seguro de lo que significa I/P o E/SP, pero me dijeron que el MCP3008 y el MCP23017 eran buenos para obtener.

PREGUNTA 2:

A partir de mi investigación aquí y al examinar el diagrama de circuito a continuación, pensé que los dispositivos (ESCLAVO) eran mi LED y mi botón pulsador y luego mi dispositivo (MAESTRO) era mi "pi". Asumiré que mi pi es mi dispositivo MAESTRO, pero mi dispositivo ESCLAVO se consideraría mi chip de expansión, NO el LED o el botón pulsador.

Por lo tanto, mi LED y botón pulsador no es un dispositivo esclavo o maestro, es solo una extensión del DISPOSITIVO ESCLAVO que es el chip de expansión. ¿Tengo este derecho?

IMAGEN 1

Saqué mi conclusión de lo que estoy entendiendo. Perdonad mi dibujo porque sé que no está a escala. ¿Puede alguien criticarme si entiendo o no esta configuración y terminología cuando se trata de esclavo y maestro?

ingrese la descripción de la imagen aquí

Solo para aclarar esto, ¿principalmente solo quiere entender el bus I2C? Si es así, es justo, pero si realmente solo desea conectar un LED y un botón, será mucho más fácil usar el GPIO (E/S de propósito general).
@PeterJ sí, solo quiero entender el I2C. Sé que este es un proyecto muy simple, pero me gustaría comenzar de manera simple primero y hacer que todo se comunique antes de llegar al extremo.
Ahora esta pregunta calificaría para ser migrada a la pila de Raspberry PI

Respuestas (3)

Al comunicarse, debe haber un conjunto establecido de reglas sobre cómo interactuar. Al igual que cuando nos hablamos, actualmente estamos usando inglés. De manera similar, los chips deben tener un protocolo establecido sobre cómo se comunican para transferir datos entre ellos.

Al hablar, las reglas involucran el uso de sonidos que forman palabras y luego reglas que describen cómo esas palabras se unen para formar oraciones. Cuando escribimos, tenemos símbolos que se unen para formar palabras, y luego las mismas reglas sobre cómo se unen las palabras para formar oraciones.

De la misma manera, su chip tiene dos piezas de comprensión. La primera parte es el protocolo y la segunda parte es la interfaz. I2C tiene un protocolo y una interfaz al mismo tiempo. Describe la interfaz, que son las reglas sobre cómo un chip debe enviar electricidad a otro chip (al igual que los sonidos para hablar o los símbolos para escribir). I2C también describe un protocolo, que son reglas sobre cómo interpretar esa información transmitida a través de la interfaz (como la sintaxis de una oración).

Ahora, los tipos de dispositivos que están destinados a comunicarse mediante I2C son cosas como microcontroladores y computadoras. Cosas que tienen un nivel lo suficientemente alto de "comprensión" o al menos capacidad para pensar en cosas como "direcciones" y bytes. Cuando compra un dispositivo que indica que comprende I2C (como este elegante LED https://www.sparkfun.com/products/8579 ), entonces sabe que comprenderá esas reglas tanto para la interfaz como para el protocolo de I2C, y puedes interactuar con él directamente.

Un LED "normal" (como este: https://www.sparkfun.com/products/9590 ) no entiende nada como I2C. Es como una bombilla, ¡simplemente convierte la electricidad que recibe en luz! Debido a esto, no puede "comunicarse" con él usando I2C. De la misma manera, un botón (como este: https://www.sparkfun.com/products/97 ) tampoco habla I2C. Es como el interruptor que usaste. Si presiona el botón, conecta físicamente dos de los pines en el exterior. Si desea usar un botón o LED como estos, debe buscar algo llamado pines de "Entrada/salida de propósito general", también llamado GPIO. Estos son pines en su Raspberry PI que simplemente pueden enviar voltaje "alto" y "bajo" a un componente (como su LED),

Ahora, con todo eso fuera del camino, ¡déjame responder algunas de tus preguntas reales!

P1) Por lo que entiendo, el "pi" ya es compatible con i2c e i2c no es una pieza de hardware, es solo un protocolo por lo que entiendo.

A1) Con una interfaz, es bastante tedioso y requiere mucha CPU sentarse en un bucle y configurar repetidamente el pin "alto" y "bajo" y luego esperar un período de tiempo preciso para enviar sus datos. Dado que con frecuencia nos gustaría enviar los datos y luego hacer que la CPU haga otra cosa, muchos microcontroladores y CPUS incluyen secciones de hardware que entienden cómo transformar los datos de una serie de bits en las señales eléctricas necesarias para comunicarse usando ciertos protocolos Dentro de su raspberry pi, hay un conjunto especial de registros (o al menos ubicaciones de memoria) que, cuando se escriben, pueden hacer que algunos de sus pines se comporten de manera consistente con las especificaciones I2C. Al hacer esto en Linux a través del kernel, esto puede ser bastante difícil, por lo que muchos diseñadores usarán "memmap". y /dev/mem para alternar esas ubicaciones de memoria directamente. Esto es bastante complicado, y es probable que necesite encontrar referencias más sustanciales de las que puedo proporcionar.

P2) ¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

A2) Como dije anteriormente, si no está dispuesto a usar los pines GPIO ya disponibles en la raspberry pi, tendrá que encontrar un dispositivo que pueda transformar la información I2C en una forma más simple que su LED y botón "entienden". ."

P3) ¿Quién es el maestro y quién es el esclavo en mi bus I2C?

A3) Entonces, solo hay un dispositivo en I2C que puede iniciar la comunicación a la vez. En este caso, el único dispositivo que debería ser un maestro es la frambuesa pi. Si de hecho tiene un botón pulsador que está habilitado para I2C, le dirá a la raspberry pi que le pregunte al esclavo del botón pulsador "¿está presionado o no?" y el botón responderá, y luego usarás esa información.

¡Espero que eso ayude!

Quiero construir solo un proyecto simple que involucre un LED y un botón con mi raspberry pi.

No necesitas I2C para eso. El uso de I2C es un exceso de ingeniería inadecuado para leer un interruptor y encender y apagar un LED.

Desde su circuito, diría que primero debe probar este circuito y comprender

  • Ley de Ohm
  • ¿Por qué un LED no tiene una resistencia fija?
  • El papel de una resistencia limitadora de corriente.

esquemático

simular este circuito : esquema creado con CircuitLab

V1 serían dos pilas AA en un soporte.

El LED debe ser algo así como un LED "indicador" verde de 5 mm (no un LED diseñado para iluminación). Debe ser uno barato porque lo vas a destruir.

Dicho LED normalmente tiene un voltaje directo de 2 V y está diseñado para iluminar bien a una corriente de 10 mA. Sin embargo, si lo maneja a más de 2 V, su resistencia aparente caerá rápidamente (ya que es un dispositivo de unión de semiconductores, no un dispositivo resistivo normal) y la corriente aumentará rápidamente hasta el punto en que la parte de trabajo del LED se calienta mucho y Se quema.

Después de eso, sugiero conectar un botón a (digamos) GPIO23 y un LED (más una resistencia limitadora de corriente) a GPIO24. Este ejemplo puede ser útil.

¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

No. Algunos dispositivos "hablan" I2C por sí mismos. Por ejemplo, el sensor de temperatura TMP100 . Puede conectarlos directamente a una Raspberry pi. No necesita un chip de expansión GPIO.

¿Quién es el maestro y quién es el esclavo en mi bus I2C?

La Raspberry pi sería la maestra.

El RPI tiene capacidad i2c (no estoy seguro de si está basado en hardware o software, pero esa es otra historia) y tiene GPIO básico.

I2C es un protocolo de bus direccionado, destinado a comunicarse entre un maestro y un esclavo (o múltiples maestros y múltiples esclavos). Usted (el usuario) le dice a Bob (el maestro) que le diga a Mike (el esclavo) que haga la tarea X, para la cual Mike fue contratado.

GPIO, por otro lado, significa "salida de entrada de propósito general". Le dices a Bob que haga la Tarea X, que puede ser encender una luz, y leer un interruptor para saber cuándo encender/apagar dicha luz.

El RPI se puede usar con pines GPIO directos para encender o apagar un LED (es de 3,3 V y solo puede generar menos de 20 mA de salida directamente). IIRC, los pines SDA y SCL en el RPI se pueden usar tanto en el modo I2C como en el GPIO, pero dado que hay muchos pines solo GPIO, utilícelos en lugar de mezclarlos.

Entonces, para responder a su pregunta escrita, SÍ, i2c requiere un expansor de puerto i2c GPIO o un controlador LED para encender/apagar un LED y responder a su problema real NO, no necesita I2C para encender/apagar un LED, use el RPI GPIO en su lugar.