} I2C (Inter-Integrated Circuit Bus), es un bus de comunicación serial síncrona,
desarrollado por Phillips Semiconductores a principios de los años 80, con la principal intención de interconectar una cierta cantidad de dispositivos en sus equipos de radio y TV.
EL PROBLEMA A RESOLVER:
} Los dispositivos periféricos en sistemas embebidos, se conectan al
microcontrolador como dispositivos de E/S mapeados en memoria, usando las líneas paralelas del bus de dirección y de datos. Esto produce una gran
cantidad de pistas en el PCB para enrutar las líneas de direcciones y de datos, sin mencionar un número de decodificadores de direcciones y lógica adicional para interconectar los componentes.
} Muchas líneas de control implican que el sistema sea más susceptible a
perturbaciones por Interferencia Electromagnética (EMI) y Descarga Electrostática (ESD).
El bus I2C
}
Memorias EEPROM y RAM.
}
Sensores de temperatura.
}
Multiplexores direccionales y switches.
}
Relojes de tiempo real/calendarios.
}
Conversores A/D y D/A.
}
Pantallas LCD y manejadores de LED’s.
}
Expansores de entradas y salidas
}
Muchos otros
} Se utilizan dos líneas de comunicación, una para los datos llamada SDA y otra para el reloj SCL.
} Las líneas SDA (Serial Data) y SCL (Serial Clock) están conectadas a la fuente de alimentación
a través de resistencias de pull-up. Cuando el bus está libre, ambas líneas están en nivel alto.
} Los dispositivos pueden ser considerados como Maestro (Master) o Esclavo (Slave).
} El Maestro es el dispositivo que inicia la transferencia en el bus y genera la señal de Clock.
} El Esclavo (Slave) es el dispositivo direccionado.
} Cada dispositivo es reconocido por una única dirección (si es un microcontrolador, LCD, memoria
o teclado) y cualquiera puede operar como transmisor o receptor de datos, dependiendo de la función del dispositivo.
} Un display es solo un receptor de datos mientras que una memoria recibe y transmite datos. El bus I2C
Características del bus I2C
Maestro
Esclavo1 Esclavo2 Esclavo3
Las líneas SDA y SCL son bidireccionales y se encuentran conectadas a una fuente de alimentación positiva por medio de resistencias pull-up.
Si ambas líneas SDA y SCL se encuentran en estado alto, se
considera que el bus esta libre. El cambio de estado de la línea de datos, solo es permitido durante el periodo bajo de la señal de reloj y esta deberá estar estable cuando SCL se encuentre en alto, pues en este momento será leído el dato colocado en el bus.
• Los bits de datos van por
SDA.
• Por cada bit de
información es necesario un pulso de SCL.
• Los datos sólo pueden
cambiar cuando SCL está a nivel bajo
Validez del bit:
El bit de datos transferido por la línea SDA debe mantenerse estable durante el periodo en que la señal de reloj esta a nivel 1. La
línea de datos SDA sólo puede cambiar de estado durante el periodo en que la señal de reloj este a 0.
Condiciones de inicio y paro:
Las condiciones de inicio y paro determinan el inicio y final de toda transferencia de datos entre el maestro y el esclavo.
} Una transición de 1 a 0 en la línea SDA al tiempo que
SCL esta a nivel lógico 1 determina la condición de inicio.
} Una transición de 0 a 1 sobre la línea SDA al tiempo que
SCL permanece a nivel 1 determina la condición de parada.
} Todos los bytes colocados sobre la línea SDA deben constar de 8 bits. Cada byte va seguido de un bit de reconocimiento, ACK
(acknowledge), y comienza siempre por el bit de mas peso (MSB).
Bit de reconocimiento ACK:
El bit de reconocimiento ACK es obligatorio en la transferencia
de cada byte. El pulso de reloj asociado a este bit es el 9no y lo genera el
maestro.
} El transmisor pone la línea SDA a 1
} El receptor por su parte pone la línea SDA a 0
Byte de control
El maestro (microcontrolador) es quien ordena con cual esclavo se va a comunicar o si los siguientes datos se van a transmitir o recibir. Dicha orden viaja en el primer byte de cada transferencia y es conocido como byte de control.
} Los 7 bits del byte de control contienen la dirección del esclavo con
el cual se desea entablar comunicación y el bit menos significativo conocido como R/W establece si los siguientes bytes serán de
lectura o de escritura
•
Modo Estándar (S-mode) aproximadamente a 100 kBits/S
•
Modo Rápido (F-mode) aproximadamente a 400kbits/S
•
Modo Rápido Plus (F-mode plus) aproximadamente 1 Mbit/
S
•
Modo Alta velocidad (Hs-mode) mas de 3,4 Mbits/S
Como cada bit de dato transferido sobre la línea SDA debe ser validado por la señal de reloj SCL, podemos deducir que la
velocidad de transferencia esta determinada por la frecuencia de la señal de SCL. Por ejemplo una velocidad de 100 Kbits/S implica que
cada bit se transmite en
1 𝑠⁄100𝑘 =10 µμ𝑠
. .Lo que nos dice que cada semiperiodo de la señal de reloj vale en
promedio 5 µs.
El bus I2C
} Los datos y direcciones que se transmiten por SDA son de 8 bits.
}
Tras cada bloque debe recibirse una señal de reconocimiento.
}
La cantidad de dispositivos que se pueden conectar al bus está
limitada, solamente, por la máxima capacidad permitida de 400 pF.
}
El bus permite la conexión de varios Maestros, ya que incluye un
detector de colisiones.
}
El protocolo de transferencia de datos y direcciones posibilita
diseñar sistemas completamente definidos por software.
} La especificación original, o modo de estandar, fue para
transferencia de datos hasta 100 Kbps.
} El bus serial I2C ha sido extendido para soportar velocidades de
hasta 3.4 Mbits/s. Combinado con una función de desplazamiento del nivel de voltaje, en modo High-speed (Hs-mode) ofrece una solución ideal para los sistemas de tecnología mezclada, donde las altas velocidades y la variedad de voltajes (5 V, 3 V o menor) son comúnmente usados.
} El reloj determina la velocidad de transmisión de los datos.
} Es una tarjeta que contiene en un solo modulo 5 sensores
◦ Presión barométrica y temperatura
◦ Giroscopio
◦ Brújula o compas
◦ Acelerómetro
} Todos estos sensores son de tipo I2C, de forma individual, se
pueden consultar sus características técnicas en sus hojas de datos:
◦ Sensor de presión barométrica y temperatura: BMP085
◦ Sensor giroscopio: L3G4200D
◦ Sensor compas: HMC5883L
◦ Sensor acelerómetro: ADXL345
El bus I2C