Si haz desarrollado proyectos es probable que hayas utilizado este protocolo de comunicación ¿En dónde es común encontrarlo? Algunos ejemplos 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 I2C que te permite utilizar dichos dispositivos.
¿Cómo funciona el I2C? Aquí la explicación para que lo comprendas fácilmente.
Tema 1. Qué es I2C.
Historia del 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.
El I2C toma e integra lo mejor de los protocolos SPI y UART. Con el 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 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 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 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 I2C.
Ficha técnica del 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 |
Tema 2. Cómo funciona I2C.
¿Cómo funciona el I2C?
Con el 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 I2C.
¿Cómo se compone un mensaje enviado en 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.
Tema 3. Conceptos del I2C.
Conceptos fundamentales para entender el I2C.
Aquí vamos a describir las características esenciales de cómo funciona el I2C.
Dirección de envío – Address.
El 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).
Tema 4. Pasos de ejecución del I2C.
Pasos del 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.
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).
Para 10 bits de dirección se pueden obtener hasta 1024 dispositivos conectados (Es muy raro utilizar 10 bits).
¿Cómo conectar un Maestro con muchos Esclavos en 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+).
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+).
Tema 7. Ventajas y desventajas del I2C.
Ventajas y desventajas del I2C.
Debido a su funcionalidad y ampliamente utilizado el
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.
1 comentario