Sei sulla pagina 1di 10

BUS I2C

Actualmente hay en el mercado multitud de dispositivos que son


gobernados por un bus serie desarrollado por la empresa Philips que es
conocido como bus i2c. Entre estos dispositivos podemos encontrar desde
un simple circuito integrado hasta sistemas completos, como puede ser un
sintonizador.
El I2C es un bus serie, formado por dos hilos, que puede conectar varios
dispositivos mediante un hardware muy simple, tal como lo ilustra las figura.
Por esos dos hilos se produce una comunicacin serie, bit a bit. Se
transmiten dos seales, una por cada lnea:
-

SCL (Serial Clock). Es la seal de reloj que se utiliza para la


sincronizacin de los datos.
SDA (Serial Data) Es la lnea para la transferencia serie de los datos.

Los dispositivos conectados al bus I2C mantienen un protocolo de


comunicaciones del tipo maestro/ esclavo ( o Master/slave). Las funciones
del maestro y del esclavo se diferencian en:
-

El circuito maestro inicia y termina la transferencia de informacin,


adems de controlar la seal de reloj. Normalmente es un
microcontrolador.
El esclavo es el circuito direccionado por el maestro.

La lnea SDA es bidireccional, es decir, tanto el maestro como los esclavos


pueden actuar como transmisores o receptores de datos, dependiendo de la
funcin del dispositivo. As por ejemplo, un display es solo un receptor de
datos mientras que una memoria recibe y transmite datos.
La generacin de seales de reloj (SCL) es siempre responsabilidad del
maestro.
Cada dispositivo conectado al bus I2C es reconocido por una nica direccin
que lo diferencia del resto de los circuitos conectados. Los dispositivos
compatibles con bus I2C suelen llevar dos o tres pines para poder modificar
esta direccin de modo que el diseador pueda evitar que en un mismo
diseo haya dos o mas esclavos con la misma direccin.
El bus I2C puede ser milti master, esto significa que puede soportar ms de
un dispositivo capaz de controlar el bus. Los sistemas ms comunes estn
constituidos por un solo microcontrolador maestro.
Hardware del Bus I2C
El hardware del bus I2C se basa en la And cableada. Las etapas de salida de
los dispositivos conectados al bus deben ser drenador abierto, colector
abierto, para poder realizar la funcin And cableada.

Las lneas SDA y SDL estn conectadas a tensin positiva de alimentacin a


travs de unas resistencias pull-up, Rp. Dependiendo del estado del
transistor de salida de cada dispositivo puede ocurrir alguno de estos casos:
-

Que el transmisor este saturado, con lo cual lleva a nivel bajo o 0, a


la lnea correspondiente, independientemente del estado de los otros
transistores. Es decir, el bus esta ocupado a nivel bajo.
Que el transistor este en corte (estado de alta impedancia) con lo
cual el estado de la lnea depende de los otros transistores. Es decir,
el bus esta libre y, si no hay ningn otro transistor saturado, la lnea
se encuentra en estado alto a travs de la resistencia pull-up
conectada a la alimentacin

El calculo de las resistencia de Pull up depende de la tensin de


alimentacin, de la capacidad del bus y del nmero de dispositivos
conectados. Esto se tabula en unas tablas que facilita el fabricante Philips
Semiconductors. De todas formas, un valor de 4K7 es satisfactorio para la
mayora de las aplicaciones.
Se pueden transferir datos por el bus a una velocidad mxima de 100 Kbits
por segundo ( modo estndar). El nmero de dispositivos conectados al bus
viene limitado por la capacidad mxima admitida, que es de 400 pf.
Transferencia de un Bit por una sola lnea SDA
Para transferir un bit por la lnea de datos SDA debe ser generado un pulso
de reloj por la lnea SCL. Los bits de datos transferidos por la lnea SDA
deben mantenerse estables mientras la lnea SCL este en nivel alto. El
estado de la lnea SDA solo puede cambiar cuando la lnea SCL est a nivel
bajo.
Si la lnea SDA cambia mientras SCL est a nivel alto, no se interpreta como
dato, sino como una condicin especial (star o satop), explicada a
continuacin.
Condiciones Star y Stop
Para que la transferencia de informacin pueda ser iniciada el bus no debe
estar ocupado. Esto quiere decir que los transistores de salida de todos los
dispositivos conectados al bis I2C deben estar en alta impedancia. Para
indicar que el bius est libre (no ocupado) las lneas de reloj (SCL) y datos
(SDA) deben estar a nivel alto. Una vez que se ha verificado esto, el
transmisor proceder a enviar un bit cada pulso de reloj.
En la transmisin de datos se da la siguiente secuencia de sucesos
1) Condicin de Star. SDA debe estar en flanco de bajada mientras que
SCL permanece a nivel alto. Esta condicin seala el comienzo de la
transferencia de datos.
2) Transmisin de los Bits de indormacin a cada pulso de reloj.

3) Condicin Stop. SDA en flanco de subida mientras SCL permanece a


nivel alto. Esta condicin indica el fin de la transferencia.
Las condiciones de star y stop son siempre generadas por el
microprocesador maestro. El bus I2C se considera ocupado despus de la
condicin de Star. El bus se considera libre de nuevo despus de un cierto
tiempo tras la condicin de stop. Los dispositivos esclavos compatibles con
un bus I2C deben poseer el hardware de acoplamiento necesario que le
permita detectar las condiciones de star y stop.
Transferencia de Datos.
Cada dato enviado por la lnea SDA debe tener 8 bits ( un byte). El nmero
de bytes que se pueden enviar no tiene restriccin. El byte de datos se
transfiere empezando por el bit 7 que es el de mayoy peso, denominado
MSB.
Una vez que se ha transmitido los 8 bits el receptor deber mandar un bit
de asentimiento o reconocimiento (acknowledgement) en el noveno pulso
de reloj. El receptor ejecuta este reconocimiento poniendo la seal SDA a un
nivel bajo. Cada grupo de 8 bits de ser asentido.
El bit de reconocimiento ACK es obligatorio en la transferencia de datos. El
pulso de reloj SCL correspondiente al bit de reconocimiento es generado por
el maestro. El transmisor deja libre la lnea SDA (la pone en alta impedancia
o nivel alto). El receptor ha de hacer que la lnea SDA pase a nivel bajo
estable durante el periodo alto del noveno impulso de reloj SCL.
Si el esclavo-receptor que esta direccionado no desea recibir ms bytes el
maestro debe detectar la situacin y no enviarle ms datos. Esto indica
porque el esclavo no genera el bit ACK del ltimo byte quedando la lnea
SDA en estado alto, lo cual es detectado por el maestro que puede generar
la condicin de stop y aborta la transferencia de datos.
No es imprescindible enviar una condicin de stop para abortar una
transferencia de datos. Si se repite la condicin de star se aborta la
transferencia de datos anterior y se comienza una nueva.
Si un maestro-receptor esta recibiendo datos de un esclavo-transmisor,
debe generar un bit ack tras cada byte recibido del transmisor. Para finalizar
la transferencia de datos no se debe generar el bit ack tras el ltimo byte
enviado por el esclavo. El escalvo trnsmisor debe dejar libre la lnea de
datos SDA para permitir que el maestro genere la condicin de stor o star.
Si un dispositivo esclavo no puede recibir o transmitir un Byte de datos
completo hasta que haya acabado alguna de sus operaciones internas,
puede mantener la lnea SCL a nivel bajo lo que fuerza al maestro a
permanecer en un estado de espera. La transferencia de datos se
rean8udar cuando el dispositivo esclavo se encuentre listo para otro byte
de datos y desbloquee la lnea de reloj SCL.

Formato de una transferencia de datos


Los datos transferidos tiene la forma de la figura mostrada, donde se
aprecia que para operar un esclavo sobre el bus I2C son necesarios seis
pasos para enviar o recibir informacin:
1) Un bit start, que sealiza el inicio de la transferencia de datos.
2) Siete bits de direccionamiento de un esclavo.
3) Un bit de lectura escritura (R/W) que define si el esclavo es
transmisor o receptor.
4) Un bit de reconocimiento ACK.
5) Un mensaje dividido en Bytes (8 bits).
6) Un bit de stop, que indica el fin de la comunicacin.
Puesto que puede haber varios esclavos conectados al bus, el maestro debe
indicar mediante una direccin de esclavo a cul de ellos va destinada la
informacin a transferir (slave address). Cada esclavo tiene una nica
direccin con la que es identificado. Todos los esclavos estn escuchando
continuamente la lnea para reconocer si a ellos a quien se dirige el
maestro. El procedimiento de direccin para el bus I2C establece que el
primer byte despus de la condicin de star determina el esclavo
seleccionado por el maestro.
Los 7 primeros bits del primer byte marcan la direccin del esclavo. El
octavo bit (R/W) determina la direccin de datos:
Si R/W = 0, el esclavo es receptor. Significa que el maestro escribir
informacin en el esclavo seleccionado.
Si R/W = 1, el esclavo es emisor. Significa que el maestro leer informacin
del esclavo seleccionado.
Cuando el microcontrolador maestro enva una direccin despus de la
condicin de satr cada dispositivo comprueba los 7 primeros bits de la
direccin con la suya propia. El que coincida se considera el dispositivo
seleccionado por el maestro, que ser un esclavo-receptor o esclavotransmisor delpendiendo del bit R/W.
Tipos de Formatos de Transferencia
Los posibles formatos de transferencia son:
1) Maestro-emisor Transmite al esclavo-receptor. Si el bit 8 es de
escritura, (R/W = 0), la secuencia ser descrita en la figura mostrada:
2) Mestro-receptor lee de un esclavo-transmisor inmediatemanete
despus del primer byte. Si el bit 8 es de lectura (R/W =1), la
secuencia ser descrita en la figura.
3) Formato combinado. Una transferencia de datos siempre acaba con
una condicin de stop generada por el maestro. Sin embargo, si un
maestro todava desea comunicarse con el bus puede generar
repetidamente condiciones de star y direccionar a otro esclavo sin

generar primero la condicin de stop. Durante un cambio de direccin


dentro de una transferencia, la condicin de star y la direccin del
esclavo se repiten, pero con el bit R/W invertido.
4) Varias combinaciones de lectura y escritura son posibles dentro de
una misma transferencia de datos.
Temporizacin.
Los tipos de transferencia de datos en el bus se clasifican:
-

Standard mode. Modo estndar, aproximadamente 100Kbits por


segundo.
Fast-mode. Modo rpido, aproximadamente a 400 Kbits/s.
High-Speed mode. Modo alta velocidad, mas de 3,4 Mbits/s.

El modo estndar es el ms comn y sus tiempos requeridos vienen


reflejados en la figura. Los valores mnimos que pueden tener estos tiempos
som:
-

tHIGH > 4 s. Duracin del semiperiodo alto del reloj SCL.


tLOW > 4.7 s. Duracin del semiperiodo bajo del reloj SCL.
tHD;STA > 4 s. En condicin de start, tiempo que tiene que transcurrir
entre el flaco de bajada de la lnea SDA y el flanco de bajada de la
lnea SCL.
tSU;STO > 4.7 s. En la condicin de stop, tiempo entre el flanco de
subida de la lnea SCL y el flanco de subida de SDA.
tHD;DAT > 5 s. Tiempo de mantenimiento del dato. Tiempo entre el
flaco de bajada del reloj SCL y el cambio del dato en la lnea SDA.
tSU;DAT > 250 ns. Tiempo de puesta del dato. Tiempo entre el cambio
de datos en la lnea SDA y el prximo flaco de subida del reloj SCL. Se
suele despreciar.
tBUF > 4.7 s. Tiempo en que el bus debe de estar libre antes
decomenzar una nueva transmisin.

Conexin de BUS I2C a un pic 16f84A


La figura describe un ejemplo de conexin de dispositivos conectables a
bius IC y un pic 16f84A configurado como maestro que utiliza las lneas
RA3 (SCL) y RA$ (SDA) como lneas del bus I2C. Los esclavos perifricos se
conectan al bus a travs de sus lneas SCL y SDA.
Para que funcione correctamente el sistema, el programa del
microcontrolador debe permitir la comunicacin mediante el protocolo para
el bus I2C recogido en las subrutinas de una librera, como la explicada a
continuacin.
Librera de subrutinas para el bus I2C
Como resumen de todo el protocolo que rige el bus I2C a continuacin se
expone la librera Bus_I2C.INC, con subrutinas sencillas para su control y
suficientemente documentadas. El hardware aplicable debe tener la
estructura de a figura mostrada. Las subrutinas principales son:

I2C_EnviaStart. Enva una condicin de start o inicio.


I2C_EnviaStop. Enva una condicin de stop o parada.
I2C_EnviaByte. El microprocesador maestro transmite un byte por el
bus I2C que se escribe en el esclavo. El byte a transmitir debe estar
cargado previamente en el registro de trabajo W.
I2C_LeeByte. El microprocesador lee un byte del esclavo conectado al
bus I2C. El dato recibido se enva a la subrutina superior al travs del
registro W.

Librera bus_I2C.INC
ZONA DE DATOS
CBKLOCK
I2C_ContadorBits

; Cuenta los bits a transmitir o a recibir

I2C_Dato

; Dato a transmitir o recibido

I2C_Flags;

; Guarda la informacin del estado del bus I2C

ENDC
#Define I2C_UltimobyteLeer I2C_Flags,0
;( I2C_UltimobyteLeer) = 0, NO es el ultimo byte a leer por el maestro.
;( I2C_UltimobyteLeer) = 1, SI es el ultimo byte a leer por el maestro
; la definicin de las lneas SCL y SDA del bus I2C se pueden cambiar segn
las necesidades del hardware.
#Define SCL

PORTA,3

#Define SDA

PORTA,4

;Subrutina SDA_Bajo
SDA_Bajo
Bsf

Status,RP0

Bcf

SDA

Bcf

Status, RP0

Bcf

SDA

Return
;subrutina SDA_Altaimpedancia
SDA_Altaimpedancia
Bsf

Status,RP0

;Lnea SCL del bus I2C


; Lnea SDA del bus I2C

Bsf

SDA

Bcf

Status,RP0

Return
;subrutina SCL_Bajo
SCL_Bajo
Bsf

Status,RP0

Bcf

SCL

Bcf

Status,RP0

Bcf

SCL

Return
;Subrutina SCL_Altaimpedancia
SCL_Altaimpedancia
Bsf

Status,RP0

Bsf

SCL

Bcf

Status,RP0

SCL_Esperanivelalto
Btfss SCL
Goto SCL_Esperanivelalto
Return
;Subrutina I2C_Enviastart
I2C_Enviastart
Call

SDA_Altaimpedancia

Call

SCL_Altaimpedancia

Call

Retardo_4micros

Call

SDA_Bajo

Call

Retardo_4micros

Call

SCL_Bajo

Call

retardo_4micros

Return
;Subrutina I2C_Enviastop
I2C_Enviastop
Call

SDA_Bajo

Call

SCL_Altaimpedancia

Call

Retardo_4micros

Call

SDA_Altaimpedancia

Call

Retardo_4micros

Return
;Subrutina I2C_EnviaByte
I2C_Enviabyte
Movwf

I2C_dato

Movlw

0X08

Movwf

I2C_contadorbits

I2C_Enviabit
Rlf

I2C_dato,f

Btfsc

STATUS,C

Goto

I2C_Enviauno

I2C_Enviacero
Call

SDA_bajo

Goto

I2C_FlancoSCL

I2C_Enviauno
Call

SDA_altaimpedancia

I2C_FlancoSCL
Call

SCL_Altaimpedancia

Call

retardo_4micros

Call

SCL_bajo

Call

Retardo_4micros

Decsz

I2C_contadorbits,f

Goto I2C_Enviabit
Call

SDA_Altaimpedancia

Call

SCL_Altaimpedancia

Call

retardo_4micros

Call

SCL_bajo

Call

Retardo_4micros

Subrutina I2C_leebyte
I2C_Leebyte
Movlw0X08
Movwf
Call

I2C_contadorbits

SDA_Altaimpedancia

I2C_leebit
Call

SCL_altaimpedancia

Bcf

STATUS, C

Btfsc SDA
Bsf

STATUS, C

Rlf

I2C_dato,f

Call

SCL_bajo

Call

retardo_4micros

Decfsz

I2C_cintadorbits,f

Goto I2C_leebit
Btfss I2C_ultimobyteleer
Call

SDA_Bajo

Call

SCL_altaimpedancia

Call

retardo_4micros

Call

SCL_bajo

Call

Retardo_4micros

Movf I2C_dato,w
Return
Dispositivos I2C
Se fabrican multitud de dispositivos que pueden conectarse a un bus I2C.
Entre ellos destacan:
-

24LC256, Memoria EEPROM serie de 32Kbytes


DS1624, Termmetro digital
DS1307, reloj y calendario de tiempo real
SAA1064, driver de display del tipo LED de 4 digitos
PCF8574, interface entre un puerto de ocho lneas y el bus I2C
PCF8591, conversor ADC de cuatro canales de 8 bits mas un canal
DAC

Potrebbero piacerti anche