You are on page 1of 8

BUS I2C

I2C fue originalmente desarrollado por Philips (ahora NXP) y se utiliza en todo tipo de
equipos, incluidos prcticamente todos tv, monitor y el ordenador placa base. I2C es un
protocolo flexible, pero tiene un ancho de banda bastante limitado.
SPI fue desarrollado originalmente por Motorola (ahora Freescale). Es muy sencillo y
rpido, pero tiene algunas limitaciones en comparacin con I2C.
I2C (Inter-Integrated Circuit) es un bus de comunicacin muy utilizado para comunicar
circuitos integrados, uno de sus usos ms comunes es la comunicacin entre un
microcontrolador y sensores perifricos. El I2C es un bus Multi-maestro es decir
permite que haya mltiples maestros y mltiples esclavos en el mismo bus.
En SPI (interfaz Serial-perifrica) a cada flanco de SCL se captura un bit de SDA,
aunque la forma de transmitir la informacin es diferente.

Fig. 1 Buses comunicacin I2C

I2C se puede utilizar para conectar hasta 127 nodos a travs de un bus que slo
requiere dos cables de datos, conocidos como SDA y SCL.
Dado que los dispositivos necesitan un voltaje de referencia comn (tierra) y una lnea
de potencia (referido como Vcc o Vdd) el completo autobs tiene cuatro cables, dos

para datos y dos para el poder. A veces se aaden l neas adicionales, por ejemplo para
apoyar las interrupciones cuando el estado de los dispositivos I2C cambia.
En este caso la misma lnea de datos enva la informacin en las dos direcciones, por lo
que es necesario un control de acceso al bus y un direccionamiento de cada elemento.
En I2C hay un valor fuerte y otro valor dbil, normalmente el 0 es el valor fuerte y el 1
el dbil Esto es as porque el 0 se consigue forzando la lnea a esa tensin pero por
contra el 1 se consigue con pull-up, por lo tanto en caso de que alguien transmita un 0
y otro un 1, en la lnea solo se ver reflejado el 0. Por lo tanto se define como el valor
de reposo del bus como el 1, ya que si alguien quiere empezar a comunicar siempre
podr modificar el estado del bus y los dems se darn cuenta.
Otro aspecto a tener en cuenta en I2C es que los maestros o maestro son
los nicos que pueden controlar la lnea de SCL, eso implica que solo un
maestro puede iniciar una transmisin por lo que un Slave tendr que
esperar a que un maestro le pregunte por un dato para poder enviarlo.
As en I2C cada dispositivo tiene una direccin de 7 bits, es decir se pueden tener
hasta 128 dispositivos conectados al mismo bus, hay que tener en cuenta que existen
versiones extendidas de I2C con direccionamiento a 8,10 y 12 bits.
En el caso del I2C el protocolo del bus si reserva unos campos para poder realizar la
transmisin, cosa totalmente diferente con el SPI donde podamos enviar en cada byte
el dato que queramos.

Las caractersticas del bus I2C son:

Se necesitan solamente dos lneas, la de datos (SDA) y la de reloj (SCL).


Cada dispositivo conectado al bus tiene un cdigo de direccin seleccionable
mediante software. Habiendo permanentemente una relacin Master/ Slave

entre el micro y los dispositivos conectados


El bus permite la conexin de varios Masters, ya que incluye un detector de
colisiones.

El protocolo de transferencia de datos y direcciones posibilita disear sistemas

completamente definidos por software.


Los datos y direcciones se transmiten con palabras de 8 bits.

I2C se puede usar para controlar una amplia gama de dispositivos. Los ejemplos ms
comunes incluyen

Convertidores

de

digital

analgico (DAC)

Controladores LED

Los chips de memoria y tarjetas

Analgico-digitales

(EEPROM,
Flash)

convertidores (ADCs)

Las pantallas LCD

Pantallas OLED

Teclados

Los conductores de motor

RAM,

FERAM,

expansores bus / extensores


(chips con 8 o 16 pins E / S
controlables a travs de I2C)

otros microcontroladores

Funcionamiento del bus I2C

Las lneas SDA y SCL transportan informacin entre los dispositivos conectados al
bus. Cada dispositivo es reconocido por su cdigo (direccin) y puede operar como
transmisor o receptor de datos. Adems, cada dispositivo puede ser considerado como
Master o Slave. El Master es el dispositivo que inicia la transferencia en el bus y genera la
seal de Clock. El esclavo es el dispositivo direccionado.

Las lneas SDA (serial Data) y SCL (serial Clock) son bidireccionales, conectadas al
positivo de la alimentacin a travs de las resistencias de pull-up. Cuando el bus est
libre, ambas lneas estn en nivel alto. La transmisin bidireccional serie (8-bits) de datos
puede realizarse a 100Kbits/s en el modo standard o 400 Kbits/s en el modo rpido.
La cantidad de dispositivos que se pueden conectar al bus est limitada, solamente, por la
mxima capacidad permitida: 400 pF.

Trama I2C.

1. Bit de start: Este es un bit especial ya que como hemos dicho antes la lnea SDA no
puede cambiar a menos que SCL este a 0. Este bit rompe dicha norma y provoca un
cambio de 1 a 0 cuando SCL est a nivel alto.
2. Address: El primer byte enviado empieza con 7 bits de direccin, el cual indica a
quien enviamos o solicitamos el dato.
3. R/W (Read/Write): El siguiente bit indica si vamos a realizar una operacin de lectura
o escritura.
4. ACK: Este bit est presente al final de cada byte que enviamos y nos permite
asegurarnos que el byte ha llegado a su destino. De este modo el que enva deja el bit
a 1 y si alguien ha recibido el mensaje fuerza ese bit a 0. De esta manera confirma
que le ha llegado el byte y la transmisin puede continuar.
5. 1 Byte de datos: Este es el primer byte de datos y viene impuesto por el protocolo.
Aqu podemos poner el dato que queramos en caso de comunicacin con sensores

remotos un uso habitual es poner el nmero de registro al que queremos escribir o


leer. Despus del byte de datos se espera otro ACK del receptor.
6. Bit de Stop. En este caso ocurre lo contrario al bit de Start, se pasa de 0 a 1 cuando la
lnea SCL se encuentra en alto. Esto termina la transmisin y deja el bus libre para
que otro pueda empezar a transmitir.

Fig. 2. Trama I2C

Fig. 3. Estructura de Trama I2C

Condiciones de START y STOP:

Cuando el maestro desea hablar con un esclavo, comienza mediante la emisin

de una secuencia de arranque en el bus I2C. Una secuencia de inicio es una de las dos
secuencias especiales definidos para el bus I2C, siendo el otro la secuencia de
parada. La secuencia de inicio y secuencia de parada son especiales ya que estos son
los nicos lugares donde se permite la SDA (lnea de datos) para cambiar mientras que
el SCL (lnea de reloj) es alto. Cuando se estn transfiriendo datos, SDA debe
permanecer estable y no cambiar mientras SCL es alta. Las secuencias de inicio y de
parada marcan el comienzo y el final de una transaccin con el dispositivo esclavo.

Fig. 4. Lneas de Estado de Preparacin de Envi- Recepcin

Antes de que se establezca un intercambio de datos entre el circuito Master y

los Esclavos, el Master debe informar el comienzo de la comunicacin (condicin de


Start): la lnea SDA cae a cero mientras SCL permanece en nivel alto. A partir de este
momento comienza la transferencia de datos. Una vez finalizada la comunicacin se
debe informar de esta situacin (condicin de Stop). La lnea SDA pasa a nivel alto
mientras SCL permanece en estado alto.

Los datos se transfieren en secuencias de 8 bits. Los bits se colocan en la lnea

SDA comenzando con el MSB (bit ms significativo). La lnea SCL es luego pulsada
de alta, luego baja. Recuerde que el chip no puede realmente impulsar la lnea de alta,
simplemente se "suelta" de la misma y la resistencia en realidad lo tira alto. Por cada 8
bits transferidos, el dispositivo que recibe los datos enva un acuse de recibo de bits,

por lo que son en realidad 9 pulsos de reloj SCL para transferir cada byte de 8 bits de
datos. Si el dispositivo receptor enva de vuelta un poco baja ACK, entonces, ha
recibido los datos y est listo para aceptar otro byte. Si se enva de nuevo un alto
entonces es lo que indica que no puede aceptar ms datos y el maestro debe terminar la
transferencia mediante el envo de una secuencia de parada.

Fig. 5. Datos de Trama I2C

Fallas en el bus:

Ante un falla en el funcionamiento de alguno de los integrados conectados al

bus y antes de probar cambiando CIs, tenemos que hacer algunas verificaciones. Como
primera medida comprobamos el estado de las resistencias de pull up. Luego con una
punta lgica verificamos que cuando el bus est inactivo, las dos lneas se encuentren
en estado alto.

A continuacin, chequeamos que el Mster direccione alguno de los integrados,

esta verificacin tambin podemos hacerla con la punta lgica, pero tengamos en
cuenta dos cosas: con la punta lgica solamente estamos detectando actividad en el
bus, pero no podemos saber si se lleva a cabo satisfactoriamente.

En segundo lugar, si hay ms de un integrado conectado al bus, no podremos

determinar cul de ellos est siendo solicitado. Para analizar ms a fondo las
comunicaciones y avanzar en el diagnstico, tendremos que contar con un osciloscopio
digital o construir un sencillo probador con unos pocos componentes (ver: Analizador
del bus I2C).

Un caso especial son las memorias 24Cxx que trabajan con el protocolo I2C y

son utilizadas en televisores, monitores, reproductores de DVD, etc. Ser muy til
hacer un back up de cada una de las memorias que llegan a nuestro taller, en muchos

casos nos puede interesar copiarlas sin desoldarlas del circuito y sin necesidad de la
PC, para lo cual podemos utilizar el probador mencionado anteriormente (para ms
informacin ver Proyectos en CeCaT).

Si utiliza una PC, puede construir el Programador de EEPROM (24Cxx y

24LCxx) En algunos casos nos encontraremos con microcontroladores que tengan ms


de un bus I2C, aplicaremos la misma lgica de anlisis indicada anteriormente pero
teniendo en cuenta que en este caso puede haber comunicacin en tiempo compartido.

You might also like