Publicado el

Fundamentos del Protocolo I2C – Aprende.

Si haz desarrollado proyectos es probable que hayas utilizado este protocolo de comunicación, el I2C. ¿En dónde es común encontrar el protocolo I2C? Algunos ejemplos del protocolo I2C son las pantallas OLED, Sensores de presión Barometríca y módulos Giroscopio o Acelerómetros.
Quizás al integrar estos componentes a tus proyectos hayas utilizado algunas librerías que facilitan en gran medida integrarlas a tus prototipos aunque realmente no tengas tanta certeza de cómo funciona el protocolo I2C que te permite utilizar dichos dispositivos.

¿Cómo funciona el protocolo I2C? Aquí la explicación para que lo comprendas fácilmente.

[nextpage title=”Tema 1. Qué es I2C.”]

Historia del protocolo I2C.
I2C significa Circuito Interintegrado (Por sus siglas en Inglés Inter-Integrated Circuit) es un protocolo de comunicación serial desarrollado por Phillips Semiconductors allá por la década de los 80s. Básicamente se creó para poder comunicar varios chips al mismo tiempo dentro de los televisores. [1]
El protocolo I2C toma e integra lo mejor de los protocolos SPI y UART. Con el protocolo I2C podemos tener a varios maestros controlando uno o múltiples esclavos. Esto puede ser de gran ayuda cuando se van a utilizar varios microcontroladores para almacenar un registro de datos hacia una sola memoria o cuando se va a mostrar información en una sola pantalla.
El protocolo I2C utiliza sólo dos vías o cables de comunicación, así como también lo hace el protocolo UART.

SDA – Serial Data. Es la vía de comunicación entre el maestro y el esclavo para enviarse información.
SCL – Serial Clock. Es la vía por donde viaja la señal de reloj.
I2C es un protocolo de comunicación serial.
Como podemos observar, el protocolo I2C envía información a través de una sola vía de comunicación. La información es enviada bit por bit de forma coordinada.
I2C es un protocolo síncrono.
Al igual el protocolo SPI, el protocolo I2C trabaja de forma síncrona. Esto quiere decir que el envío de bits por la vía de comunicación SDA está sincronizado por una señal de reloj que comparten tanto el maestro como el esclavo a través de la vía SCL.
Tabla de datos interesantes que debes saber sobre el protocolo I2C.
Ficha técnica del protocolo I2C.

 Número de vías o cables  2
 Velocidad máxima  Modo estándar (Sm) = 100kbps
 Modo rápido (Fm) = 400kbps
 Modo High Speed (Fm+) = 3.4Mbps
 Modo Ultra Fast (Hs-mode) = 5Mbps
 Síncrono o Asíncrono  Síncrono
 Paralelo o Serial  Serial
 Número máximo de Maestros  Ilimitado
 Número máximo de Esclavos  1008

[nextpage title=”Tema 2. Cómo funciona I2C.”]
¿Cómo funciona el protocolo I2C?
Con el protocolo I2C la información viaja en mensajes. Los mensajes van divididos en tramas de datos. Cada mensaje lleva un trama con una dirección la cuál transporta la dirección binaria del esclavo al que va dirigido el mensaje, y una o más tramas que llevan la información del mensaje. También el mensaje contiene condiciones de inicio y paro, lectura y escritura de bits, y los bits ACK y NACK. Todo esto va entre cada sección de datos.
Para que pueda quedar más claro aquí se ilustra un mensaje enviado a través del protocolo I2C.
¿Cómo se compone un mensaje enviado en protocolo I2C?

Condición de Inicio – Start: La vía SDA cambia de un nivel de voltaje Alto a un nivel de voltaje Bajo, antes de que el canal SCL cambie de Alto a nivel Bajo.
Condición de Paro – Stop: La vía SDA ahora cambia de un nivel de voltaje Bajo a Alto, después de que la vía SCL cambia de Bajo a Alto.
Trama de Dirección – Addres Frame: Es una secuencia única que va de los 7 a los 10 bits. Este sección (Frame) se envía a cada Esclavo, y va a identificar al Esclavo con el que el Maestro se quiere comunicar.
Bit para Lectura/Escritura A – Read/Write Bit A: Es un bit de información enviado a los Esclavos. Por medio de este bit el Maestro indica si le va enviar información al Esclavo (Nivel Bajo de voltaje = Escritura), o si el Maestro quiere solicitarle información al Esclavo (Nivel Alto de Voltaje = Lectura).
Bit ACK/NACK – : Después de cada sección (Frame) de información enviada en un mensaje, podemos notar que lleva un bit acknowledge/no-acknowledge (reconocido/no-reconocido). Esto ayuda a identificar si la información fue enviada correctamente. En seguida de que se envía un Frame, si este fue recibido con éxito, se retorna un bit ACK al remitente. Si la información no fue recibida con éxito, se retorna un bit NACK.

[nextpage title=”Tema 3. Conceptos del I2C.”]

Conceptos fundamentales para entender el protocolo I2C.

Aquí vamos a describir las características esenciales de cómo funciona el protocolo I2C.
Dirección de envío – Address.
El protocolo I2C no cuenta con una línea de selección de esclavos (Como lo hace el protocolo SPI), así que se debe establecer una forma de notificación al Esclavo, para que éste se prepare para recibir información del Maestro. Mediante la sección de Dirección (Address) en el mensaje es como se notifica al Esclavo, es por eso que va en seguida del Bit de Inicio (Start).
Así que esta es la secuencia que se sigue para el direccionamiento de esclavos.
1.- El Maestro envía la dirección del Esclavo con el que quiere comunicarse, esta dirección se envía a todos los Esclavos que estén conectados.
2.- Cada Esclavo recibe la dirección, y la compara con su propia dirección.
3.- Si la dirección coincide con el Esclavo, en seguida el Esclavo envía un bit ACK con nivel de voltaje Bajo, de regreso al Maestro.
4.- Si la dirección no coincide con el Esclavo, simplemente no se hace nada, y la vía SDA permanecerá en nivel de voltaje Alto.
Bit de Lectura/Escritura – Read/Write Bit.
Después de la dirección en el mensaje, se envía un bit, notificando al Esclavo si el Maestro quiere escribir información o leer información de él. Si el Maestro quiere enviarle información al Esclavo (Escribir), entonces manda un Bajo. Si el Maestro quiere solicitar información al Esclavo (Leer), el bit Read/Write será de nivel Alto.
Frame de información – Data Frame.
Después de que el Maestro recibe el bit ACK del Esclavo, la primer sección o Frame de información está lista para ser enviada al Esclavo.
El Frame para transportar información siempre es de 8 bits y se envía primero el bit más significativo. Después de enviar un Frame de información, inmediatamente se envía un bit ACK/NACK, para comprobar que el Frame de información efectivamente se ha llegado a su destino y se ha recibido satisfactoriamente. Independientemente de quién envía el Frame de información, si el Esclavo o el Maestro, siempre se debe enviar en seguida el bit ACK/NACK, antes de que se envíe el segundo Frame de información.
Una vez que se envían ambos Frames de información, el Maestro puede activar un condición de paro (Stop), y con esto se va a detener la transmisión. La condición de paro (Stop) es un cambio de voltaje de nivel Bajo a nivel Alto, en la vía SDA, y se activa cuando en la vía SCL se pasa de un nivel Bajo a un nivel Alto (La vía SCL, posteriormente, permanecerá en nivel Alto).

[nextpage title=”Tema 4. Pasos de ejecución del I2C.”]

Pasos del protocolo I2C en la ejecución.
1.- El Maestro envía la condición de Inicio (Start) a cada Esclavo que esté conectado en la vía SDA, cambia el nivel de voltaje a Bajo, y deja la vía SCL en estado Alto.

2.- El Maestro envía la dirección de 7 a 10 bits, a cada uno de los Esclavos para identificar al Esclavo con el que se quiere comunicar.

3.- Cada Esclavo recibe la dirección y la compara con su propia dirección. Si la dirección coincide, el Esclavo envía un bit ACK, y pone la vía SDA en nivel Bajo de voltaje. Si la dirección no es la misma, entonces los Esclavos no hacen nada y dejan la vía SDA en el mismo nivel de voltaje Alto.

4.- El Maestro envía o recibe los Frames de información.

5.- Después de que cada Frame de información fue enviado, el dispositivo que recibe ( ya sea Esclavo o Maestro) va a enviar un bit ACK al remitente, para notificarle que la información se recibió exitosamente.

6.- Para concluir la transmisión de información, el Maestro envía al Esclavo la condición de paro (Stop) con un nivel Alto en la vía SDA, cuando cambia el estado de SCL a Alto.

[nextpage title=”Tema 5. Un Maestro y varios Esclavos I2C.”]

Un sólo Maestro con múltiples Esclavos.
Como ya lo hemos visto, en I2C el Maestro controla a los esclavos por medio de una dirección, por lo tanto, un sólo Maestro puede controlar muchos Esclavos. Usando 7 bits de dirección se pueden obtener hasta 128 dispositivos  conectados (En realidad son sólo 112, ya que los 16 restantes son utilizados para fines especiales [2]).
Para 10 bits de dirección se pueden obtener hasta 1024 dispositivos conectados (Es muy raro utilizar 10 bits [3]).
¿Cómo conectar un Maestro con muchos Esclavos en protocolo I2C?
Para conectar multiples Esclavos a un sólo Maestro vamos a seguir el siguiente diagrama. Con una resistencia de 4.7K Ohms en modo pull-up conectaremos las vías SDA y SCL a voltaje Vcc (V+).
 Fundamentos del protocolo I2C.

[nextpage title=”Tema 6. Varios Maestros y Varios Esclavos I2C.”]

Múltiples Maestros con múltiples Esclavos.
Muchos Maestros se pueden conectar a múltiples Esclavos pero puede haber problemas cuando dos o más Maestros intentan enviar u obtener información al mismo tiempo en la víi SDA. Esto se puede resolver si cada Maestro tiene la capacidad de leer el estado del SDA, para saber si se encuentra ocupado o no,  antes de enviar información. Si el SDA se encuentra en Bajo, quiere decir que algún otro Maestro se encuentra utilizando la vía SDA, por lo tanto habría que esperar a que se desocupe. Si el estado del SDA es Alto, significaría que se puede enviar información de forma segura sin causar conflictos.
Para conectar múltiples Maestros con múltiples Esclavos utilizaremos el siguiente diagrama con una resistencia en SDA y SCL haciendo pull-up hacia Vcc (V+).
 Fundamentos del protocolo I2C.

[nextpage title=”Tema 7. Ventajas y desventajas del I2C.”]

Ventajas y desventajas del protocolo I2C.
Debido a su funcionalidad y ampliamente utilizado el protocolo I2C parecería que no se podría comparar con otros protocolos. Pero sí es importante mencionarte algunos puntos que deberías saber para tomar una decisión sobre cuándo sí y cuando no es viable utilizar I2C.
Ventajas.

  • Sólo utiliza 2 cables de comunicación.
  • Soporta múltiples Maestros y múltiples Esclavos, haciendo las conexiones adecuadas.
  • Hay confirmación de información recibida con éxito. Usando los bits ACK/NACK.
  • El hardware es menos complicado que el protocolo UART.
  • Es un protocolo ampliamente conocido y utilizado.

Desventajas.

  • Es un más lento que el protocolo SPI.
  • El tamaño de paquetes de información de transferencia está limitado a 8 bits.
  • El hardware es más complicado que el protocolo SPI.

Esperamos que esta clase te haya gustado y lo más importante que hayas aprendido algo nuevo el día de hoy.
Si te gusto esta clase compártela con todos tus amigos.

Regístrate y aprende en nuestros WorkShops. Talleres prácticos presenciales y virtuales. Recibe todas las clases en tu correo electrónico.

Referencias del artículo.
I2C parece primero en circuitbasics.
Wikipedia. I2C.
Robots Argentina.
Imagen portada.

Compártelo:
Deja un comentario