BUS I2C

Embed Size (px)

DESCRIPTION

jtynjyu

Citation preview

BUS I2CActualmente 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 I2CEl 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 alimentacinEl 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 SDAPara 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 StopPara 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 sucesos1) 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 datosLos 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 esclavo-transmisor delpendiendo del bit R/W.Tipos de Formatos de TransferenciaLos 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 16f84ALa 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 I2CComo 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.INCZONA DE DATOSCBKLOCKI2C_ContadorBits; Cuenta los bits a transmitir o a recibirI2C_Dato; Dato a transmitir o recibidoI2C_Flags;; Guarda la informacin del estado del bus I2CENDC#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 SCLPORTA,3;Lnea SCL del bus I2C#Define SDAPORTA,4; Lnea SDA del bus I2C;Subrutina SDA_BajoSDA_BajoBsfStatus,RP0BcfSDABcfStatus, RP0BcfSDAReturn;subrutina SDA_AltaimpedanciaSDA_AltaimpedanciaBsfStatus,RP0BsfSDABcfStatus,RP0Return;subrutina SCL_BajoSCL_BajoBsfStatus,RP0BcfSCLBcfStatus,RP0BcfSCLReturn;Subrutina SCL_AltaimpedanciaSCL_AltaimpedanciaBsfStatus,RP0BsfSCLBcfStatus,RP0SCL_EsperanivelaltoBtfssSCLGotoSCL_EsperanivelaltoReturn;Subrutina I2C_EnviastartI2C_EnviastartCallSDA_AltaimpedanciaCallSCL_AltaimpedanciaCallRetardo_4microsCallSDA_BajoCallRetardo_4microsCallSCL_BajoCallretardo_4microsReturn;Subrutina I2C_EnviastopI2C_EnviastopCallSDA_BajoCallSCL_AltaimpedanciaCallRetardo_4microsCallSDA_AltaimpedanciaCallRetardo_4microsReturn;Subrutina I2C_EnviaByteI2C_EnviabyteMovwfI2C_datoMovlw 0X08Movwf I2C_contadorbitsI2C_EnviabitRlf I2C_dato,fBtfsc STATUS,CGoto I2C_EnviaunoI2C_EnviaceroCall SDA_bajoGoto I2C_FlancoSCLI2C_EnviaunoCall SDA_altaimpedanciaI2C_FlancoSCLCall SCL_AltaimpedanciaCallretardo_4microsCallSCL_bajoCallRetardo_4microsDecsz I2C_contadorbits,fGoto I2C_EnviabitCall SDA_AltaimpedanciaCallSCL_AltaimpedanciaCall retardo_4microsCallSCL_bajoCallRetardo_4microsSubrutina I2C_leebyteI2C_LeebyteMovlw0X08MovwfI2C_contadorbitsCallSDA_AltaimpedanciaI2C_leebitCallSCL_altaimpedanciaBcf STATUS, CBtfsc SDABsfSTATUS, CRlfI2C_dato,fCallSCL_bajoCallretardo_4microsDecfszI2C_cintadorbits,fGotoI2C_leebitBtfssI2C_ultimobyteleerCallSDA_BajoCallSCL_altaimpedanciaCallretardo_4microsCallSCL_bajoCallRetardo_4microsMovf I2C_dato,wReturnDispositivos I2CSe 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