I2c
La comunicación i2c se utiliza principalmente para la comunicación entre diferentes partes o distintos módulos de un circuito.
Definición
Segun i2c-bus, lo define como circuito inter-integrado (I²C, del inglés Inter-Integrated Circuit) es un bus serie de datos desarrollado en 1982 por Philips Semiconductors. Se utiliza principalmente para la comunicación entre diferentes partes de un circuito, o la comunicación de distintos periféricos a un microcontrolador, un ejemplo sería la siguiente imagen que demuestra si uso.[1]
Podemos observar un controlador que en este caso es una placa arduino, la cual realiza de maestro, esta se encarga de controlar cada uno de los periféricos a los cuales llamanos esclavos, este tipo de conexión es utilizada para quitar funcionalidades y responsabilidad al microcontrolador, como veremos más adelante.
Tipo conexión
El bus I2C requiere únicamente dos cables para su funcionamiento, uno para la señal de reloj (CLK) y otro para el envío de datos (SDA), lo cual es una ventaja frente al bus SPI. Por contra, su funcionamiento es un poco más complejo, así como la electrónica necesaria para implementarla.
- SCL (Serial Clock Line) Es el reloj del sistema y se utiliza para transmitir los datos de forma sincronizada.
- SDA (Serial Data Line) Es la señal donde viajan los datos del sistema.
- GND (Ground) Es la señal a masa que deben compartir todos los dispositivos conectados al bus.
En el bus Cada dispositivo dispone de una dirección, que se emplea para acceder a los dispositivo de forma individual. Esta dirección puede ser fijada por hardware (en cuyo caso, frecuentemente, se pueden modificar los últimos 3 bits mediante jumpers o interruptores) o totalmente por software.
En general, cada dispositivo conectado al bus debe tener una dirección única. Si tenemos varios dispositivos similares tendremos que cambiar la dirección o, en caso de no ser posible, implementar un bus secundario.
Arquitectura conexión
El bus I2C tiene una arquitectura de tipo maestro-esclavo. El dispositivo maestro inicia la comunicación con los esclavos, y puede mandar o recibir datos de los esclavos. Los esclavos no pueden iniciar la comunicación (el maestro tiene que preguntarles), ni hablar entre sí directamente.
Las características
- Solo se requieren dos líneas de bus.
- No hay requisitos de velocidad de transmisión, como con una interfaz RS232.
- Existe una relación simple maestro-esclavo entre todos los participantes.
- Cada componente tiene una dirección única.
- I2C es un verdadero bus multimaestro con manejo de colisiones y arbitraje de acceso.
Ventajas
- Requiere pocos cables
- Dispone de mecanismos para verificar que la señal hay llegado
Desventajas
- Su velocidad es media-baja
- No es full duplex
- No hay verificación de que el contenido del mensaje es correcto
Direccionamiento i2c
Lo más común en los dispositivos para el bus I2C es que utilicen direcciones de 7 bits, aunque existen dispositivos de 10 bits. Este último caso es raro. Una dirección de 7 bits implica que se pueden poner hasta 128 dispositivos sobre un bus I2C, ya que un número de 7 bits puede ir desde 0 a 127. Cuando se envían las direcciones de 7 bit, de cualquier modo la transmisión es de 8 bits. El bit extra se utiliza para informarle al dispositivo esclavo si el dispositivo maestro va a escribir o va a leer datos desde él. Si el bit de lectura/escritura (R/W) es cero, el dispositivo maestro está escribiendo en el esclavo. Si el bit es 1 el maestro está leyendo desde el esclavo. La dirección de 7 bit se coloca en los 7 bits más significativos del byte y el bit de lectura/escritura es el bit menos significativo.
Referencias
[1] aprendiendoarduino https://aprendiendoarduino.wordpress.com/category/i2c/, Consultado marzo 2020