You are on page 1of 49

El bus I2C

Microcontroladores

EL BUS INTER-INTEGRATED CIRCUITS I2C

M.C. Carlos E. Canto Quintal

El bus I2C

Microcontroladores

EL BUS I2C
• Para simplificar la interconexión de dispositivos al microprocesador, Philips desarrolló un sencillo bus bidireccional basado en dos hilos por el que se trasmiten los datos vía serie y lo llamó El Bus I2C. EL Bus I2C (Inter- Integrated Circuits) fue desarrollado al principio de los 80‟s. Su propósito original fue el de proporcionar una manera fácil de conectar un CPU a los chips periféricos en un equipo de TV.

EL PROBLEMA A RESOLVER: • Los dispositivos periféricos en sistemas embebidos se conectan al mControlador 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 conectar todo. • 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).
M.C. Carlos E. Canto Quintal

El Bus I2C

Microcontroladores

Las características más importantes del bus I2C son:
Comunicación serial, utilizando un conductor para manejar el timming (SCL) (pulsos de reloj) y otro para intercambiar datos (SDA), que transportan información entre los dispositivos conectados al bus.
Las líneas SDA (Serial Data) y SCL (Serial Clock) etán conectadas a la fuente de alimentación a través de las resistencias de pull-up. Cuando el bus está libre, ambas líneas están en nivel alto. Los dispositivo puede ser considerado como Mastero (Master) o esclavo (Slave). El Maestro es el dispositivo que inicia la transferencia en el bus y genera la señal de Clock. El Slave (esclavo) es el dispositivo direccionado.

Maestro

SDA SCL
Esclavo1 Esclavo2 Esclavo3
M.C. Carlos E. Canto Quintal

El bus I2C

Microcontroladores

Transmisión de bits
– 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

M.C. Carlos E. Canto Quintal

Carlos E.El bus I2C Microcontroladores • • • • Los datos transitan en la bajada del reloj El dato es recibido en el borde de bajada del reloj El bit más significativo se envía primero El nodo que recibe debe manejar un acknowledge (bajo en SDA) después de completado el byte • El nodo maestro siempre genera el reloj M. Canto Quintal .C.

M.C.El bus I2C Microcontroladores Las características más importantes del bus I2C son: Cada dispositivo es reconocido por una única dirección (si es un microcontrolador. dependiendo de la función del dispositivo. memoria o teclado) y cualquiera puede operar como transmisor o receptor de datos. Un display es solo un receptor de datos mientras que una memoria recibe y transmite datos. Canto Quintal . Carlos E. LCD.

M.C. .El bus I2C Microcontroladores Las características más importantes del bus I2C son: Trasferencia de datos: Los datos y direcciones que se transmiten por SDA son de 8 bits. Tras cada bloque debe recibirse una señal de reconocimiento. Canto Quintal . Carlos E.

por la máxima capacidad permitida de 400 pF. El protocolo de transferencia de datos y direcciones posibilita diseñar sistemas completamente definidos por software. Canto Quintal . El bus permite la conexión de varios Masters.C. M.El bus I2C Microcontroladores Las características más importantes del bus I2C son: La cantidad de dispositivos que se pueden conectar al bus está limitada. ya que incluye un detector de colisiones. Carlos E. solamente.

fue para transferencia de datos hasta 100 Kbps.4 Mbits/s. • El bus serial I2C ha sido extendido para soportar velocidades de hasta 3.C. Canto Quintal . Carlos E. M. 3 V o menor) son comúnmente usados. o modo de estandar. 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.El bus I2C Microcontroladores Las características más importantes del bus I2C son: • La especificación original. • El reloj determina la velocidad de transmisión de los datos.

M. – Modo Alta velocidad (Hs-mode) mas de 3.El bus I2C Microcontroladores Las características más importantes del bus I2C son: Los modos de transferencia de datos del bus I2C – Modo Estándar (S-mode) aproximadamente a 100 kBits/Seg. Carlos E.4 Mbits/Seg. – Modo Rápido (F-mode) aproximadamente a 400kbits/Seg. Canto Quintal .C.

El bus I2C Microcontroladores Definiciones o términos utilizados en relación con las funciones del bus I2C • Maestro (Master): Dispositivo que determina la temporización y la dirección del tráfico de datos en el bus. Es el único que aplica los pulsos de reloj en la línea SCL. M. presentando un estado lógico alto. La línea de datos toma un estado lógico alto mientras que la de reloj permanece también en ese estado. La línea de datos (SDA) toma un estado bajo mientras que la línea de reloj (SCL) permanece alta. Bus Desocupado (Bus Free): Estado en el cual ambas líneas (SDA y SCL) están inactivas. generando esta condición. Cuando se conectan varios dispositivos maestros a un mismo bus la configuración obtenida se denomina "multi-maestro". Unicamente en este momento es cuando un dispositivo maestro puede comenzar a hacer uso del bus.C. Carlos E. Comienzo (Start): Sucede cuando un dispositivo maestro hace ocupación del bus. Esclavo (Slave): Cualquier dispositivo conectado al bus incapaz de generar pulsos de reloj. Reciben señales de comando y de reloj proveniente del dispositivo maestro. Canto Quintal . • • • • Parada (Stop): Un dispositivo maestro puede generar esta condición dejando libre el bus.

Esto permite que una serie del mismo tipo de dispositivos se puedan conectar en un mismo bus sin problemas de identificación. La dirección 00 es la denominada "de acceso general". Canto Quintal • • . Lectura/Escritura (Bit R/W): Cada dispositivo dispone de una dirección de 7 bits. Esto se logra situando la línea de datos a un nivel lógico bajo mientras transcurre el noveno pulso de reloj. Carlos E. M.C. conocido como ACK (del inglés Acknowledge). Hay dispositivos que permiten establecer externamente parte de la dirección de acceso. que viene pre-establecida por el fabricante.El bus I2C Microcontroladores Definiciones o términos utilizados en relación con las funciones del bus I2C • • Dato Válido (Valid Data): Sucede cuando un dato presente en la línea SDA es estable mientras la línea SCL está a nivel lógico alto. Si este bit es alto el dispositivo maestro lee información proveniente de un dispositivo esclavo. En cambio. Dirección (Address): Cada dispositivo diseñado para funcionar en este bus dispone de su propia y única dirección de acceso. por la cual responden todos los dispositivos conectados al bus. Formato de Datos (Data Format): La transmisión de datos a través de este bus consta de 8 bits de datos (ó 1 byte). El octavo bit (el menos significativo ó LSB) enviado durante la operación de direccionamiento corresponde al bit que indica el tipo de operación a realizar. si este bit fuese bajo el dispositivo maestro escribe información en un dispositivo esclavo. A cada byte le sigue un noveno pulso de reloj durante el cual el dispositivo receptor del byte debe generar un pulso de reconocimiento.

El bus I2C Microcontroladores Terminología básica del Bus I2C Términos Transmisor Receptor Master (Maestro) Slave (Esclavo) Multi-Master El dispositivo que envía datos al Bus El dispositivo que recibe datos desde el Bus El dispositivo que inicia una transferencia. Carlos E. genera las señales del reloj y termina un envío de datos Descripción El dispositivo direccionado por un master Mas de un master puede controlar el bus al mismo tiempo sin corrupción de los mensajes Procedimiento que asegura que si uno o mas master simultáneamente deciden controlar el Bus solo uno es permitido a controlarlo y el mensaje saliente no es deteriorado Arbitraje Sincronización Procedimiento para sincronizar las señales del reloj de dos o mas dispositivos M.C. Canto Quintal .

microcontroladores. electrónica automotriz. Canto Quintal . incluyendo memorias RAM y EEPROM.C. relojes de tiempo real. sistemas de seguridad. equipos de sonido y muchas otras aplicaciones más. codificadores DTMF. calendarios. Carlos E. se requiere poco espacio y líneas de circuito impreso. al mismo tiempo. televisores. tranceptores IR.El bus I2C Microcontroladores Respaldo Tecnológico: • Tanto Philips como como otros fabricantes de dispositivos compatibles con I2C disponen de una amplia gama de circuitos integrados. conversores A/D y D/A. etc Dado que no siempre se requiere alta velocidad de transferencia de datos este bus es ideal para sistemas donde es necesario manejar información entre muchos dispositivos y. puertos de E/S. • M. Por ello es común ver dispositivos I2C en video grabadoras.

También hay dispositivos de adaptación que permiten conectar buses originalmente paralelos a sistemas I2C.C. Carlos E. Tal es el caso del chip PCD 8584 de Philips el cual incorpora en el chip todo lo necesario para efectuar dicha tarea. y gracias a que el protocolo es lo suficientemente simple. circuitos integrados cuya única misión es adaptar los niveles presentes en el bus I2C y TTL. permitiendo resolver fácil y rápidamente la interconexión de dispositivos de dicha familia con el I2C. • • M. además. Canto Quintal .El bus I2C Microcontroladores Respaldo Tecnológico: • Incluso. siendo el protocolo generado por el firmware. usualmente se ven dispositivos I2C insertados en sistemas microcontrolados que no fueron diseñados con puertos I2C. Hay.

Canto Quintal . Carlos E.El bus I2C Microcontroladores El protocolo del Bus I2C M.C.

Carlos E.C.El bus I2C Microcontroladores Formato del Mensaje • Un protocolo orientado a BIT • Handshaking • Bidireccional M. Canto Quintal .

C. Carlos E.El bus I2C Microcontroladores Maestro envía datos a un esclavo M. Canto Quintal .

las líneas SDA y SCL pasan a estado alto. Y el octavo bit indica si se hace lectura(1) o escritura(0). en los siguientes 7 bits se codifica la dirección del dispositivo. el proceso de transferencia continúa. si vale 0 (impuesto por el esclavo). Cada palabra puesta en el bus SDA debe tener 8 bits. el Maestro genera un bit de stop para liberar el bus I2C. el master debe esperar una señal de reconocimiento como respuesta por parte del esclavo. indica que el circuito direccionado no valida la comunicación. lee el estado de la línea SDA. M. Al final de la transmisión. Este acuse de recibo se denomina ACK (acknowledge) y es una parte importante del protocolo I2C. Canto Quintal . Si vale 1. Carlos E.El bus I2C Microcontroladores Transferencia de datos: El Maestro genera la condición de Start. Después de cada 8 bits. la primera palabra transferida contiene la dirección del Esclavo seleccionado. el Maestro genera la condición de Stop y libera el bus I2C. entonces.C. Tras el envío del start o inicio.

Canto Quintal .C.El bus I2C Microcontroladores Inicio de transmisión – La transmisión la inicia el maestro – Flanco de bajada en SDA con SCL a nivel alto – Cuando nadie accede al bus hay un nivel alto en SCL y SDA M. Carlos E.

M.C. La línea SDA pasa a nivel alto mientras SCL permanece en estado alto.El bus I2C Microcontroladores Condiciones de START y STOP: START: la línea SDA cae a cero mientras SCL permanece en nivel alto. Una vez finalizada la comunicación se debe informar de esta situación (condición de Stop). A partir de este momento comienza la transferencia de datos. Canto Quintal . Carlos E.

Carlos E.El bus I2C Microcontroladores Start y Stop SDA baja antes que SCL SCL alta antes que SDA • Start –SDA baja cuando el reloj (SCL) es alto • Stop – SDA sube cuando SCL es alto • (Normalmente no hay transición cuando el reloj es alto) M.C. Canto Quintal .

Canto Quintal .C. Carlos E.El bus I2C Microcontroladores Enviando a un Esclavo M.

el maestro continúe enviando datos o • Esto significa que tan pronto como el maestro baja generar una condición de STOP. inmediatamente después de la El Bus queda disponible de nuevo para que evaluación de su dirección. El esclavo que va a dar un ACK pone a bajo la línea SDA inmediatamente después de la recepción del octavo bit. al esclavo.El bus I2C Microcontroladores Eventos del bus I2C : leyendo un Acknowledge de un Esclavo Cuando se ha transmitido al bus un byte de dirección o de dato éste debe ser “ RECONOCIDO” por el o los esclavos. M. También se responde con un ACK en el caso de un byte transmitido a un esclavo ya direccionado . Carlos E. El esclavo estará bloqueando el bus terminación de este pulso (4) de reloj. • En el caso de una dirección: Si la dirección concuerda con la propia entonces ese esclavo y solamente ese esclavo enviará un acuse de recibido de la dirección con un ACK. Canto Quintal • . en caso de un byte de dirección . (la línea SDA es mantenida en bajo por el • esclavo) hasta que el maestro haya generado un pulso de reloj en la línea SCL. o. En caso de que un dato vaya a ser escrito SCL para completar la transmisión del bit (1). este ciclo debe completarse El maestro ahora emite un pulso de reloj en la línea antes de que se genere una condición • SCL (3) El esclavo liberará la línea SDA hasta la STOP. SDA será puesto a bajo por el esclavo (2).C.

Carlos E.C.El bus I2C Microcontroladores Reconocimiento (Acknowledge) : M. Canto Quintal .

El pulso de reloj correspondiente al bit de reconocimiento (ACK) es generado por el Master. Si un Esclavo-receptor que esta direccionado no desea recibir mas bytes. El receptor debe poner a "0" la línea SDA durante el pulso ACK de modo que siga siendo "0" durante el tiempo que el master genera el pulso "1" de ACK. . Normalmente un receptor cuando ha sido direccionado esta obligado a generar un ACK después de que cada byte a sido recibido. Esto se indica porque el esclavo no genera el bit ACK en el primer byte que sigue. Cuando un dispositivo esclavo no genera el bit ACK (porque esta haciendo otra cosa y no puede atender el Bus) debe mantener el esclavo la línea SDA a nivel "1" durante el bit ACK. Si un Master-receptor esta recibiendo datos de un Esclavo-transmisor debe generar un bit ACK tras cada byte recibido de transmisor.• • • • • • Reconocimiento El bit de reconocimiento es obligatorio en la transferencia de datos. El esclavo-transmisor debe permitir desbloquear la línea SDA generando el master la condición de Stop o de Inicio. El Transmisor desbloquea la línea SDA ("1") durante el pulso de reconocimiento. para finalizar la transferencia de datos no debe generar el ACK tras el ultimo byte enviado por el esclavo. El Master entonces puede generar una condición de STOP abortando la transferencia de datos o repetir la condición de Inicio enviando una nueva transferencia de datos. el master debe detectar la situación y no enviar mas bytes. El esclavo pone la línea SDA a "1" lo que es detectado por el Master el cual genera la condición de Stop o repite la condición de Inicio.

Carlos E.C.El bus I2C Microcontroladores Transferencia completa M. Canto Quintal .

Canto Quintal . el esclavo puede cambiar el estado de la línea SDA. Carlos E. M. En total está secuencia debe ser realizada 8 veces para completar el byte dato.El bus I2C Microcontroladores RELACIÓN ENTRE LOS NIVELES DE SDA Y SCL • Todos los maestros deben generar una subida en la línea SCL (2). • • • Durante (1) y (5). •Los bytes siempre son transmitidos con el Bit Más Significativo primero. El Esclavo no debe cambiar el dato durante el tiempo que SCL es alto ( de lo contrario podría generarse una condición START o STOP imprevista) . leer el nivel en SDA (3) y generar una caida en la línea SCL (4).C.

Maestro lee datos de un esclavo .

el maestro libera la línea SDA. Ahora el esclavo tomará el control de esta línea.C. La línea se irá a alto si se desea transmitir un „1‟ o si el esclavo desea mandar un „0‟. excepto que ahora no se le permite al maestro tocar la línea SDA. Canto Quintal . se mantiene en bajo. M.de los 8 pulsos de reloj necesarios para el envió del byte . Carlos E. el maestro puede recibir un byte del esclavo si el bit R/W en la dirección se puso en modo READ ( puesto a „1‟) La sintaxis del protocolo es la misma que cuando se transmite un byte a un esclavo. Previo al envió por la línea SCL.El bus I2C Microcontroladores Eventos del Bus I2C : Recibiendo un byte de un Esclavo Una vez que el esclavo ha sido direccionado y el esclavo ha reconocido ésto.

El bus I2C Microcontroladores Para operar un esclavo sobre el Bus I2C solo son necesarios seis simples códigos. Carlos E. suficientes para enviar o recibir información. – Un bit de Inicio – 7-bit o 10-bit de direccionamiento – Un bit R/W que define si el esclavo es transmisor o receptor – Un bit de reconocimiento – Mensaje dividido en bytes – Un bit de Stop M.C. Canto Quintal .

. Canto Quintal .C. Carlos E. similares a las de colector abierto pero asociadas a un transistor de efecto de campo (ó FET).El bus I2C Microcontroladores Esquema básico de conexiones •Las líneas SDA y SCL son del tipo drenador abierto. Se deben poner en estado alto (conectar a la alimentación por medio de resistores Pull-Up) para construir una estructura de bus tal que se permita conectar en paralelo múltiples entradas y salidas M.

Canto Quintal .El bus I2C Microcontroladores Esquema básico de conexiones Características de una conexión en colector abierto – Permite conectar varias fuentes de datos a un mismo hilo – Nivel alto en el bus – Si ningún dispositivo accede al bus – Si ningún dispositivo transmite un cero – Nivel bajo en el bus – Si un dispositivo pone un nivel bajo – Si dos dispositivos escriben a la vez siempre prevalecen los ceros • AND cableada – Si un dispositivo escribe un nivel alto pero lee un cero indica que otro dispositivo está también accediendo al b M. Carlos E.C.

El bus I2C Microcontroladores Esquema básico de conexiones Inconvenientes de la conexión en colector abierto – Las capacidades de la línea se cargan a través del pull-up – Se puede solucionar utilizando una carga activa en lugar de un resistor M. Canto Quintal .C. Carlos E.

De entrada el número de dispositivos que se puede conectar al bus es ilimitado. pero las líneas tienen una especificación de capacidad de carga máxima de 400pF. Carlos E. Canto Quintal .El bus I2C Microcontroladores Esquema básico de conexiones Las dos líneas de comunicación disponen de niveles lógicos altos cuando están inactivas. M.C.

Carlos E. Canto Quintal .C.El bus I2C Microcontroladores Terminación de Bus M.

C. Canto Quintal . Carlos E.El Bus I2C Microcontroladores El bus I2C Ejemplo de una configuración del bus I2C usando dos microcontroladores M.

todos los esclavos escucharán ( incluyendo a MCU2 el cual en ese momento es considerado un esclavo también) . This could lead to problems.C. Carlos E. there is no problem. M. Si la dirección no concuerda con la dirección del CPU2. este dispositivo debe mantenerse de regreso a cualquier actividad hasta que el bus se desocupe de nuevo después de una condición stop. Canto Quintal .El bus I2C Microcontroladores Configuración Multi-Maestro Cuando el MCU1 emite una condición start e enviá una dirección. or it just came out of reset and wants to start talking on the bus which could very well happen in a real-life scenario. As long as the two MCU's monitor what is going on on the bus (start and stop) and as long as they are aware that a transaction is going on because the last issued command was not a STOP. Let's assume one of the MCU's missed the START condition and still thinks the bus is idle.

• Desde START hasta STOP – Si dos maestros intentan comenzar a utilizar el bus a la vez: • Conexión del bus en colector abierto 􀃆 prevalecen los ceros • A la vez que ponen datos en el bus. escuchan la línea.Configuración Multi-Maestro Protocolo multimaestro – Con dos maestros en el bus existe posibilidad de conflicto Arbitración: procedimiento para asegurar que sólo un maestro tiene el control del bus en un instante – Si un maestro está utilizando el bus no puede ser interrumpido por otro. • Si un maestro está intentando enviar un nivel alto y lee un nivel bajo – Existe otro maestro utilizando el bus – Deja de transmitir esperando que la línea quede libre (condición de STOP) .

El bus I2C Microcontroladores Ejemplo de aplicaciones del Bus I2C M. Carlos E. Canto Quintal .C.

con bus I2C. Carlos E. para su uso en un lector de smartcards LECTOR DE SMARTCARDS M. Canto Quintal .C.El bus I2C Microcontroladores Ejemplo de aplicaciones del Bus I2C Conexión de una EEPROM serial y un Reloj de tiempo real.

Con una alimentación unica de 5V.C. solo requiere 15 mA. por lo que se pueden conectar cuantos sensores sean necesarios en el mismo bus. para funcionar y 3mA mientras esta en reposo. El sensor es capaz de detectar objetos a una distancia de 6 m con la facilidad de conectarse al microcontrolador mediante un bus I2C. Carlos E. El módulo SRF10 es un medidor ultrasónico de distancias miniatura para robots que representa la ultima generación en sistemas de medidas de distancias por sonar. M. Canto Quintal .El bus I2C Microcontroladores Ejemplo de aplicaciones del Bus I2C El bus I2C Conexión de medidores ultrasónico de distancias a un mC Basic Stamp 2 usando el bus I2C.

E4. Esto significa que escribir un comando de medición de la distancia para la dirección 0 de I2C (0x00) iniciará las mediciones en todos los sensores al mismo tiempo. Además de las direcciones anteriores.C. E2.El bus I2C Microcontroladores Ejemplo de aplicaciones del Bus I2C El bus I2C Para el programador. FC o FE. F2. F8. EA. Canto Quintal . La dirección por defecto de fábrica del sensor es 0xE0. el sensor SRF10 se comporta de la misma manera que las EEPROM de las series 24xx. F4. F0. E8. por lo que es posible utilizar hasta 16 sensores sobre un mismo bus I2C. todos los sonares conectados al bus I2C responderán a la dirección 0 -al ser la dirección de atención general. FA. EE. F6. Carlos E. El usuario puede cambiar esta dirección con 16 direcciones diferentes: E0. E6. EC. con la excepción de que la dirección I2C es diferente. M.

Carlos E.C.El bus I2C Microcontroladores Ejemplo de aplicaciones del Bus I2C Esquema del circuito para la conexión de dos sensores ultrasónicos SRF08 al controlador Basic Stamp 2 M. Canto Quintal .

Variable(s) contiene el byte(s) de dato que se va a escribir Función: Escribe a la localidad I2C el contenido de la variable(s). Funcción: Lee la localidad I2C contenida en la(s) variable(s)..Slave es la dirección i2c del esclavo . speed..Speed es la palabra i2cfast (400kHz) o i2cslow (100kHz) a 4Mhz -Address es la palabra i2cbyte o i2cword Función: El comando i2cslave es usado para configurar las terminales PICAXE para usar el I2C y para definir el tipo de dispositivo I2C a ser direccionado WRITEI2C Sintáxis: WRITEI2Clocation... address .Location es una variable /constante que especifica la dirección de un byte o palabra .Location es una variable /constante que especifica la dirección de un byte o palabra . READI2C Sintáxis: READI2C location. Canto Quintal . M. Carlos E..El bus I2C Microcontroladores Dispositivos I2C con el PICAXE Instrucciones en Basic del PICAXE par usar el bus I2C I2CSLAVE Sintáxis: I2CSLAVE slave.) ..C.(variable.(variable.Variable(s) recibe el byte(s) leido(s).) .

El bus I2C Microcontroladores M. Canto Quintal . Carlos E.C.

Carlos E. Canto Quintal .C.El bus I2C Microcontroladores M.

C.El bus I2C Microcontroladores M. Canto Quintal . Carlos E.

C. Carlos E. Canto Quintal .El bus I2C Microcontroladores M.