Sei sulla pagina 1di 48

MARINA BENLLOCH VERDEGUER SONIA ESCRIV IVEZ SABINA MANZANO RODRGUEZ JOSE T.

MEDINA LUQUE JUAN SEGU MORENO

I.) INTRODUCCIN........................................................................................................................................................ 4 CARACTERSTICAS.............................................................................................................................................................4 DESCRIPCIN......................................................................................................................................................................5 II.) CARACTERSTICAS ELCTRICAS .................................................................................................................6 III.) DESCRIPCIONES DE PIN ................................................................................................................................... 9 1. SERIAL ATA (SDA).......................................................................................................................................................9 2. SERIAL CLOCK (SCL) ...................................................................................................................................................9 3. W RITE-PROTECT (WP).................................................................................................................................................9 IV.) CARACTERSTICAS DEL BUS .......................................................................................................................10 1. BUS NO OCUPADO (A).................................................................................................................................................10 2. COMIENZO DE TRANSFERENCIA DE DATOS (B) .......................................................................................................10 3. FINAL DE TRANSFERENCIA DE DATOS (C)................................................................................................................10 4. DATOS VLIDOS (D) ...................................................................................................................................................10 5. RECONOCIMENTO........................................................................................................................................................10 V.) DISPOSITIVO DE DIRECCIONAMIENTO ...................................................................................................10 1. DIRECCIONAMIENTO CONTIGUO A TRAVS DE MLTIPLES DISPOSITIVOS ..........................................................12 VI.) OPERACIONES DE ESCRITURA...................................................................................................................14 1. ESCRITURA DE BYTES.................................................................................................................................................14 2. ESCRITURA DE PGINA...............................................................................................................................................14 3. PROTECCIN DE ESCRITURA ......................................................................................................................................14 VII.) INTERROGACIN DE RECONOCIMIENTO. .........................................................................................16 VIII.) OPERACIN DE LECTURA. ........................................................................................................................17 1. LECTURA DE DIRECCIN DE CORRIENTE..................................................................................................................17 2. LECTURA ARBITRARIA ................................................................................................................................................17 3. LECTURA SECUENCIAL ...............................................................................................................................................18 IX.) BUS I2C: PRESENTACION DEL PROTOCOLO .......................................................................................24 1. INTRODUCCIN............................................................................................................................................................24 2. EVOLUCIN DEL BUS I2C..........................................................................................................................................24 2.1 Principales equipos con el bus incorporado.................................................................................................24 2.2 Caractersticas ms salientes del bus I2C .....................................................................................................24 2.3 Criterios para Utilizar I2C...............................................................................................................................24 X.) PROTOCOLO I2C...................................................................................................................................................25 1. TERMINOLOGA BSICA DEL BUS I2C.....................................................................................................................25 2. GENERALIDADES DEL PROTOCOLO ..........................................................................................................................27 2.1 Caractersticas Generales.................................................................................................................................27 2.2 Transferencia Del Bit.........................................................................................................................................27 3. INSTRUCCIONES EN EL BUS I2C...............................................................................................................................28 3.1 Condiciones de Inicio (Start) y Stop...............................................................................................................28 3.2 Transfiriendo datos............................................................................................................................................28 3.3 Reconocimiento...................................................................................................................................................29 4. ARBITRAJE Y GENERACIN DE SEALES DE RELOJ .............................................................................30 4.1 Arbitraje ...............................................................................................................................................................30 4.2 Formato................................................................................................................................................................31

XI.) COMUNICACION I2C ENTRE MICROCONTROLADOR MSP430F149 Y MEMORIA EEPROM 24LC512.........................................................................................................................................................32 1. INTRODUCCION......................................................................................................................................................32 2. COMUNICACION I2 C EN MEMORIA EEPROM .............................................................................................32 2.1 Descripcin De Memoria EEPROM. .............................................................................................................32 2.2 Descripcin de Pines.........................................................................................................................................33 2.3 Caractersticas del Bus y Funcionamiento ....................................................................................................33 2.4 Pulso de Acuso de Recibos (ACK)...................................................................................................................34 2.5 Direccionamiento de Dispositivo.....................................................................................................................34 2.6 Escritura en Memoria........................................................................................................................................35 2.7 Lectura de Memoria...........................................................................................................................................35 3. COMUNICACIN I2C EN MICROCONTROLADOR.....................................................................................35 XII.) IMPLEMENTACIN DE I2C POR SOFTWARE EN LA TARJETA DE DESARROLLO EASYWEB II ....................................................................................................................................................................37 1. CONEXIN FSICA ENTRE MSP430F149 Y EEPROM 24LC512.................................................................37 2. ACCESO A LOS PUERTOS DE I/O......................................................................................................................38 3. FUNCIONES DE CONTROL DE LNEAS SDA Y SCL ...................................................................................39 3.1 SetLowSDA y SetHighSDA ..............................................................................................................................39 3.2 SetLowSCL y SetHighSCL...............................................................................................................................39 4. FUNCIONES DE TRANSFERENCIAS DE DATOS .........................................................................................40 4.1 Funcin i2cInit().................................................................................................................................................40 4.2 Funcin i2cStart() ..............................................................................................................................................41 4.3 Funcin i2cStop() ...............................................................................................................................................41 4.4 Funcin i2cWrite( ).............................................................................................................................................42 4.5 Funcin i2cRead() ..............................................................................................................................................43 XIII.) PROGRAMACION DE I2C............................................................................................................................ 44 1. DIAGRAMA DE FLUJO DE LA PROGRAMACIN DE I2C.........................................................................44 2. EJEMPLOS DE PROGRAMACIN......................................................................................................................46 2.1 Ejemplo de lectura secuencial..........................................................................................................................46 2.1 Ejemplo de escritura ..........................................................................................................................................47 XIV.) BIBLIOGRAFIA.................................................................................................................................................48

I.) INTRODUCCIN
CARACTERSTICAS
Tecnologa de baja potencia del CMOS: - Corriente de escritura mxima 5 mA en 5.5V. - Corriente de lectura mxima 400A en 5.5V. - Corriente de espera 100nA tpica en 5.5V. - Interfaz de bs serie de dos hilos, I2C compatible. - Hasta ocho dispositivos en cascada. - Ciclo de lectura/escritura al mismo tiempo. - Modo disponible de escritura de pgina de 128-bytes. - Tiempo de ciclo de escritura mximo: 5ms. - Hardware de proteccin de escritura para todo el vector. - Entradas del trigger de Schmitt para la supresin del ruido - 1.000.000 ciclos de lectura/escritura - Proteccin electrosttica de la descarga > 4000V - Retencin de los datos > 200 aos - 8-pin PDIP, SOIC (208 mil), y empaquetados DFN. - Paquete TSSOP de 14 plomos. - Disponibles estndares finales y libres de plomo -Rango de temperaturas: Industrial: -40C a 85C Automotor: -40C a 125C

DESCRIPCIN
El Microchip Technology Inc. 2AA512/24LC512/24FC512 (24XX512*) es de 64K x (512 Kbit). Es una memoria tipo EEPROM, capaz de borrar desde 1.8V a 5.5V. Se ha desarrollado para aplicaciones avanzazas, de baja potencia tales como comunicaciones personales y la adquisicin de datos. La capacidad de escritura de pgina de este dispositivo es de hasta 128 bytes de datos. Este dispositivo es capaz de leer de forma aleatoria y secuencial has ta 512K. Las lneas d e direccin permiten hasta ocho dispositivos en el mismo bus, para espacio de direccio namiento de hasta 4 Mbit.

II.) Caractersticas Elctricas


Valores absolutos mximos:

III.) Descripciones de PIN

Las entradas A0.A1 y A2 son utilizadas por el 24XX512 para operaciones de varios dispositivos. Los niveles lgicos en estas entradas son comparadas con los correspondientes bits en la direccin del esclavo. El chip es seleccionado si coinciden. Hasta 8 dispositivos pueden ser conectados al mismo bus utilizando diferentes combinaciones de Bit escogidas. En muchas aplicaciones, las entradas A0,A1y A2 del chip de direccionamiento son difciles de poner a 0 o a 1. Para aplicaciones en las que estos pines son controlados por un microcontrolador u otro dispositivo lgico programable, los pines del chip de direccionamiento deben ser puestos a 0 1 lgicos antes de que la operacin del dispositivo normal proceda.

1. SERIAL ATA (SDA)


Este es un pin bidireccional usado para trans ferencia de direcciones y entrada de datos y salida de datos del dispositivo. El bus SDA requiere una resistencia de subida a Vcc (tpicamente 10k para 100kHz, 2k para 400kHz y 1Mhz). Para una transferencia de datos normal, el SDA permite cambiar solo durante bajo SCL. Los cambios durante SCL alto estan reservados para indicar las condiciones de inicio y fin.

2. SERIAL CLOCK (SCL)


Este pin se utiliza para sincronizar la transferencia de datos hacia y desde el dispositivo.

3. WRITE-PROTECT (WP)
Este pin tampoco puede conectar Vss o Vcc. El circuito interno de bajada en este pin mantendr el dispositivo en estado desprotegido si la flotacin izquierda, sin embargo, la flotacin de este pin no esta recomendada para muchas aplicaciones. Si atamos a Vcc, las operaciones normales de la memoria son permitidas (read/write en la memoria entera 0000FFFF) Si atamos a Vcc, las operaciones de escritura son limitados.Las operaciones de lectura no se ven afectadas.

IV.) Caractersticas del bus


El protocolo del bus tiene las siguientes caractersticas: -La transferencia de datos puede ser iniciada solo cuando el bus no est ocupado. -Durante la transferencia de datos, la lnea de datos debe permanecer estable siempre que la lnea del reloj est a nivel alto. Los cambios en la lnea de datos, mientras la lnea de reloj, deber ser interpretada como condicin de Comienzo o de Parada. Las siguientes condiciones del bus estn definidas en: FIGURA 4.1

1. BUS NO OCUPADO (A)


Ambas lneas (reloj y datos) permanecen altos

2. COMIENZO DE TRANSFERENCIA DE DATOS (B)


Una transicin alta o baja de la linea SDA mientras el reloj (SCL) est a nivel alto determina una condicin de comienzo. Todos los comandos deben ser precedidos por una condicin de comienzo.

3. FINAL DE TRANSFERENCIA DE DATOS (C)


Una transicin baja o alta de la linea SDA mientras el reloj (SCL) est a nivel alto determina una condicin de parada. Todas las operaciones deben acabar con una condicin de parada.

4. DATOS VLIDOS (D)


El estado de la lnea de datos representa datos vlidos cuando, despus de la condicin de comienzo, la linea de datos es estable para la duracin alta del periodo de la seal de reloj. Los datos deben ser cambiados durante el periodo bajo de la seal de reloj. Hay un bit de datos por pulso de reloj.

Cada transferencia de datos es iniciada con una condicin de comienzo y fin con una condicin de Parada. El nmero de bytes de datos transferidos entre las condiciones de comienzo y parada son determinadas por el dispositivo maestro.

5. RECONOCIMENTO
Cada dispositivo receptor debe generar una seal de reconocimiento despus de la recepcin de cada byte. El dispositivo maestro debe generar un pulso de reloj extra el cual es asociado con este bit reconocido. Ver figura 4-2 para el tiempo de reconocimiento. NOTA: La memoria 24LC512 no genera ningn bit de reconocimiento si un ciclo de programa interno est en proceso. Un dispositivo de reconocimiento pone a nivel bajo la lnea de SDA durante el reconocimiento del pulso de reloj. La lnea de SDA est estable durante el periodo alto de reconocimiento relacionado con el pulso de reloj.

Por supuesto, el sistema y el tiempo de mantenimiento deben ser tenidos en cuenta. Durante las lecturas, al finalizar la transmisin de datos, se genera un bit de reconocimiento en el ltimo byte que ha sido contabilizado. En este caso, la memoria (24LC512) dejar a nivel alto la lnea de datos para que se pueda generar la condicin de Parada.

V.) DISPOSITIVO DE DIRECCIONAMIENTO


El primer byte recibido es el byte de control, seguido de la condicin de Comienzo desde el dispositivo maestro (Figura 5-1). El byte de control consiste en un codigo de 4 bits de control; para el 24LC512 este es puesto como 1010 binario para las operaciones de lectura y escritura. Los siguientes 3 bits del byte de control son bits de seleccin del Chip (A2,A1 y A0). Los bits de seleccin del chip permite el uso de hasta 8 dispositivos 24XX512 en el mismo bus y son usados para seleccionar qu dispositivo est accediendo. Los bits de seleccin del chip en el byte de control deben corresponder con los niveles lgicos en los correspondientes pines A0, A1 y A2 para la respuesta del dispositivo. Estos bits son en efecto los 3 bits ms significativos de la direccin. El ltimo bit del byte de control define la operacin para ser realizada. Cuando se pone a 1 se selecciona la operacin de lectura y cuando se pone 0 se selecciona la operacin de escritura. Los siguientes 2 bytes recibidos definen la direccin del primer byte de datos (Figura 5-2). Puesto que todos A15A0 son utilizados, no hay bits de direccin superior que son no preocupantes. Los bits de direccin superior son los primeros en transferirse, seguido por los bits menos significantes. Dependiendo del estado del bit R/W, la 24XX512 seleccionar una operacin de lectura o escritura.

1. DIRECCIONAMIENTO DISPOSITIVOS

CONTIGUO

TRAVS

DE

MLTIPLES

Los bits de seleccin del Chip A2, A1 y A0 pueden ser usados para expandir el espacio de direc cionamiento contiguo para 4 Mbits mediante 8 24XX512s en el mismo bus. En ese caso, el software puede usar el bit A0 del byte de control como el bit de direccin A16; A1 como el bit de direccin A17; y A2 como el bit de direccin A18. No es posible una lectura secuencial a travs de los lmites del dispositivo.

VI.) OPERACIONES DE ESCRITURA


1. ESCRITURA DE BYTES
El control del cdigo (cuatro bits), la seleccin del chip (tres bits) y el bit de lectura/escritura (que es un nivel lgico bajo) son cronometrados en el bus por el transmisor. Esto indica al receptor que la direccin de bit ms alta seguir despus de haber generado un bit Acknowledge durante el noveno ciclo de reloj. Por lo tanto, el siguiente bit transmitido es el bit de orden de la direccin de palabra y debe ser escrita en el indicador de direccin de la memoria 24LC512. El siguiente byte es el bit de direccin menos significativo. Despus de recibir otro Acknowledge de la memoria 24LC512, el dispositivo transmitir los datos para ser escritos en la posicin de memoria. La memoria 24LC512 reconoce otra vez y se genera una condicin de parada. Esto inicia el ciclo de escritura interna y durante es te tiempo, la memoria 24LC512 no generar seal de reconocimiento (Figura 6-1). Si una tentativa est hecha para escribir con el pin WP ms alto, el dispositivo reconocer el orden, pero no se escribirn datos y el dispositivo aceptar inmediatamente un nuevo comando. Despus de un comando de escritura de byte, el contador de direccin interno sealar a la posicin de direccin despus de que fuera escrito.

2. ESCRITURA DE PGI NA
El bit de control de escritura, la direccin de palabra y los primeros datos del bit son transmitidos a la memoria 24LC512 de la misma manera que se escriben en un bit. Pero en vez de generar una condicin de parada, el dispositivo transmite hasta 127 bytes adicionales, que temporalmente son almacenados en el buffer y sern escritos en la memoria despus de que se transmitan una condicin de parada. Despus de recibir cada palabra, los siete bits del indicador de direccin inferiores son internamente incrementados por uno. Si se transmiten ms de 128 bytes antes de la generacin de la condicin de parada, el contador de direccin dar una vuelta y los datos recibidos previamente sern sobreescritos. Como con la operacin de escritura de byte, una vez que la condicin de parada es recibida, un ciclo de escritura interno comenzar (Figura 6-2). Si se hace una tentativa para escribir con el pin alto de WP, el dispositivo reconocer la orden, pero si no se escribe el ciclo ocurrir que ningn dato ser escrito y el dispositivo inmediatamente aceptar una nueva orden.

3. PROTECCIN DE ESCRITURA
Los pins WP (write-protect ) permiten al usuario el rango (0000-FFFF) cuando el pin est a VCC. Si est conectado al VSS, la proteccin de escritura est desconectada. El pin del WP se muestrea en el bit de Parada para cada comando de Escribtura (Figura 1-1).

VII.) INTERROGACIN DE RECONOCIMIENTO.


Ya que el dispositivo no reconocer al ACK durante un ciclo de escritura, este puede ser usado para determinar cuando el ciclo se ha completado (este rasgo puede ser usado para maximizar el rendimiento del bus). Primero la condicin de Parada para comandos de escritura es emitida por el master, el dispositivo inicia el ciclo de tiempo de escritua internamente.La Interrogacin ACK puede ser iniciada inmediatamente. Esto implica al master a mandar una condicin de Comienzo, seguida por el byte de control para un comando de escritura (R/W=0). Si el dispositivo est todava ocupado con el ciclo de escritura, entonces no ser devuelto el ACK. Si no se devuelve el ACK, entonces el bit de Comienzo y el byte de control deben ser vueltos a enviar. Si el ciclo se completa, entonces el dispositivo devolver el ACK y el master podr proceder con el siguiente comanda de lectura o escritura. Ver Figura 7-1 para ver diagrama del flujo.

VIII.) OPERACIN DE LECTURA.


Las operaciones de lectura son iniciadas de la misma forma que las operaciones de escritura a excepcin de que el bit R/W del byte de control se pone a 1. Hay 3 tipos bsicos de operaciones de lectura: lectura de direccin de corriente, lecura arbitraria y lectura secuencial.

1. LECTURA DE DIRECCIN DE CORRIENTE


La 24LC512 contiene un contador de direccin que mantiene la direccin de las ltimas palabras accedidas, internamente incrementado por 1.Por lo tanto, si el acceso a la lectura anterior fuese n (n es cualquier direccin legal), la siguiente operacin de lectura de direccin tendra acceso a datos desde la direccin n+1. Sobre recibo del byte de control con el bit R/W puesto a 1, la 24XX512 publica un reconocimiento y transmite la palabra de datos de 8-bits. El master no reconocer la transferencia pero generar una condicin de Parada y la 24LC512 cortar la trasmisin

2. LECTURA ARBITRARIA
Las opresiones de lectura arbitraria permiten al master acceder a cualquier posicin de memoria de manera arbitraria. Para hacer funcionar este tipo de operaciones de lectura, primero la direccin de palabra debe estar puesta. Esto se hace mandando la direccin de palabra a la 24LC512 como parte de la operacin de escritura (el bit R/W pone a 0 ). Despus de mandar las direcciones de palabra, el master generar una condicin de Comienzo seguido del reconocimiento. Esto termina la operacin de escritura, pero no antes de poner el indicador de direccin interno. Entonces, el master publica otra vez el byte de control pero con el bit R/W puesto a 1. La 24LC512 publicar entonces un reconocimiento y trasmitir la palabra de datos de 8 -bits. El master no reconocer la transferencia pero generar una condicin de Parada lo cual causar que la 24LC512 un corte en la transmisin (Figura 8-2). Despus del comando de lectura arbitraria, el contador de direcciones internas indicar la localizacin de direccin siguiendo lo ya ledo.

3. LECTURA SECUENCIAL
Las lecturas secuenciales son iniciadas de la misma forma que la lectura arbitraria excepto que despus la 24LC512 transmite el primer byte de datos, el master emitir un reconocimiento como oposicin a la condicin de Parada usada en la lectura arbitraria. Este reconocimiento dirige la 24LC512a transmitir la siguiente palabra secuencialmente dirigida de 8 bit (Figura 8-3). Siguiendo el ltimo byte transmitido al master, el master NO generar un reconocimiento, pero si una condicin de Parada. Proveer lecturas secuenciales, la 24XX512 contiene un indicador de direcciones interno el cual se incrementa en 1 al completarse cada operacin. El indicador de direcciones permite el contenido de memoria entero para ser leido en serie durante una operacin. El indicador de direcciones interno ir desde la direccin FFFF a la direccin 0000 si el master reconoce el byte recibido de la direccin de serie FFFF.

IX.) BUS I2C: PRESENTACION DEL PROTOCOLO

1. INTRODUCCIN
El ao 1980 Phillips inventa el Bus de 2 hilos I2C para la comunicacin de circuitos integrados. Se han otorgado licencias a ms de 50 compaas, encontrndonos con mas 1000 dispositivos electrnicos compatibles con I2C. Originalmente fue especificado para 100 kbits/s e intencionalmente para el control simple de seales, esto, sumado a su bajo costo, versatilidad tcnica y simplicidad aseguraron su popularidad.

2. EVOLUCIN DEL BUS I2C


Actualmente el Bus ha sido modificado para alcanzar velocidades de hasta 3.4 Megabits/s. Combinado con una funcin de desplazamiento del nivel de voltaje, en modo High-speed (Hs mode) ofrece una solucin ideal para los sistemas de tecnologa mezclada, donde las altas velocidades y la variedad de voltajes (5 V, 3 V o menor) son comnmente usados. El modo Hs es compatible con todos los sistemas existentes del bus I2C, incluyendo el estndar original (S-mode) y el modo Fast (F-mode), actualizacin introducida en 1992, proveyendo 400 kbits/s en transferencia. Sistemas de distinta velocidad pueden ser mezclados fcilmente, con un dispositivo maestro en modo Hs especialmente desarrollado, la conexin en paralelo es usada para conectar las partes ms lentas del sistema, todos los dispositivos en modo Hs se comunicarn bidireccionalmente a ms velocidad mientras se utilicen los modos F/S (Fast/Standard) de velocidades con las partes ms lentas del sistema.

2.1 PRINCIPALES EQUIPOS CON EL BUS INCORPORADO


Algunos equipos que ocupan I2C: -Los procesadores de seal en televisores (LA7610, TA1223, DTC810,...) -Memorias 24LCxx -Codificadores de video de reproductores de DVD (SAA 7128, TC 90A32F,...) -Preamplificadores de video en monitores (KB2502 ) -Etc...

2.2 CARACTERSTICAS MS SALIENTES DEL BUS I2C


-Se necesitan solame nte 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.

2.3 CRITERIOS PARA UTILIZAR I2C


-Un sistema consiste en al menos un microcontrolador y varios sistemas perifricos como memorias o circuitos diversos -El costo de conexin entre los varios dispositivos dentro del sistema debe de ser el mnimo. -El sistema que utiliza este Bus no requiere una alta tasa de transferencia de datos. -La total eficacia del sistema depende de la correcta seleccin de la naturaleza de los dispositivos y de la interconexin de la estructura del bus.

X.) PROTOCOLO I2C

1. TERMINOLOGA BSICA DEL BUS I2C


Diseado por Philips, este sistema de intercambio de informacin a travs de tan solo dos hilos permite a circuitos integrados y mdulos OEM interactuar entre s a velocidades relativamente lentas. Emplea comunicacin serie, utilizando un conductor para manejar el timming (pulsos de reloj) y otro para intercambiar datos. Este bus se basa en tres seales: SDA (System Data) por la cual viajan los datos entre los dispositivos. SCL (System Clock) por la cual transitan los pulsos de reloj que sincronizan el sistema. GND (Masa) Interconectada entre todos los dispositivos "enganchados" al bus. Las lneas SDA y SCL son del tipo drenado abierto, similares a las de colector abierto pero asociadas a un transistor de efecto de campo ( FET). Se deben poner en estado alto (conectar a la alimentacin por medio de resistores Pull-Up) para construir una estructura de bus tal que se permita conectar en paralelo mltiples entradas y salidas.

En el diagrama se observa la configuracin elctrica bsica del bus. Las dos lneas de comunicacin disponen de niveles lgicos altos cuando estn inactivas. Inicialmente el nmero de dispositivos que se puede conectar al bus es ilimitado, pero obsrvese que las lneas tienen una especificacin mxima de 400pF en lo que respecta a capacidad de carga. La mxima velocidad de transmisin de datos que se puede obtener es de aproximadamente 100Kbits por segundo.

Las definiciones o trminos utilizados en relacin con las funciones del bus I C son las siguientes: TRMINOS Transmisor Receptor Master (Maestro) DESCRIPCIN El dispositivo que enva datos al Bus. El dispositivo que recibe datos desde el Bus. El dispositivo que inicia una transferencia, genera las seales del reloj y termina un envo de datos. El dispositivo direccionado por un master. Cualquier dispositivo conectado al bus incapaz de generar pulsos de reloj. Reciben seales de comando y de reloj proveniente del dispositivo maestro. Cuando se conectan varios dispositivos maestros a un mismo bus Ms de un maestro puede controlarlo al mismo tiempo sin corrupcin de los mensajes. Estado en el cual ambas lneas (SDA y SCL) estn inactivas, presentando un estado lgico alto. nicamente en este momento es cuando un dispositivo maestro puede comenzar a hacer uso del bus. Sucede cuando un dispositivo maestro hace ocupacin del bus, generando esta condicin. La lnea de datos (SDA) toma un estado bajo mientras que la lnea de reloj (SCL) permanece alta. Un dispositivo maestro puede generar esta condicin dejando libre el bus. La lnea de datos toma un estado lgico alto mientras que la de reloj permanece tambin en ese estado. Sucede cuando un dato presente en la lnea SDA es estable mientras la lnea SCL est a nivel lgico alto. La transmisin de datos a travs de este bus consta de 8 bits de datos ( 1 byte). A cada byte le sigue un noveno pulso de reloj durante el cual el dispositivo receptor del byte debe generar un pulso de reconocimiento, conocido como ACK (del ingls Acknowledge). Esto se logra situando la lnea de datos a un nivel lgico bajo mientras transcurre el noveno pulso de reloj. Cada dispositivo diseado para funcionar en este bus dispone de su propia y nica direccin de acceso, que viene pre -establecida por el fabricante. Hay dispositivos que permiten establecer externamente parte de la direccin de acceso. Esto permite que una serie del mismo tipo de dispositivos se puedan conectar en un mismo bus sin problemas de identificacin. La direccin 00 es la denominada "de acceso general", por la cual responden todos los dispositivos conectados al bus. Cada dispositivo dispone de una direccin de 7 bits. El octavo bit (el menos significativo LSB) enviado durante la operacin de direccionamiento corresponde al bit que indica el tipo de operacin a realizar. Si este bit es alto el dispositivo maestro lee informacin proveniente de un dispositivo esclavo. En cambio, si este bit fuese bajo el dispositivo maestro escribe informacin en un dispositivo esclavo. Procedimiento que asegura que si uno o ms master deciden controlar el Bus slo uno es permitido a controlarlo y el mensaje no es deteriorado. Procedimiento para sincronizar las seales del reloj de dos o ms dispositivos.

Slave (Esclavo) Multi-Master Bus Desocupado (Bus Free): Comienzo (Start):

Parada (Stop): Dato Vlido (Valid Data): Formato de Datos (Data Format):

Direccin (Address):

Lectura/Escritura (Bit R/W):

Arbitraje Sincronizacin

2. GENERALIDADES DEL PROTOCOLO


2.1 CARACTERSTICAS GENERALES
La lnea de datos (SDA) y la seal de reloj (SCL) son bidireccionales y se conectan a una fuente de tensin positiva a travs de un suministro comn o resistencias de carga.

2.2 TRANSFERENCIA D EL BIT


Los bits de datos transferidos en la lnea SDA deben ser estables cuando la lnea SCL esta a nivel "1". El estado de la lnea SDA en "1" o "0" solo puede cambiar cuando en la lnea SCL la seal es "0".

Fig.1. Esquema de conexin de dispositivos a las lneas SDA y SCL.

El Bus I2C soporta diversas tecnologas y por lo tanto los niveles lgicos "0" (Bajo) y "1" (Alto) no estn fijados y dependen de la tensin de alimentacin del circuito. Un pulso de reloj se genera por cada bit de datos transferidos. Cuando la seal de reloj est a 1 los datos transferidos en la SDA deben ser estables. El estado de la lnea SDA solo puede cambiar cuando en la lnea SCL la seal es 0.

3. INSTRUCCIONES EN EL BUS I2C


Para operar un esclavo sobre el Bus I2C solo son necesarios seis cdigos simples, suficientes para enviar o recibir informacin: 1. 2. 3. 4. 5. 6. Un bit de Inicio. 7bit o 10bit de direccionamiento. Un R/W bit que define si el esclavo es transmisor o receptor. Un bit de reconocimiento. Mensaje dividido en bytes. Un bit de Stop.

3.1 CONDICIONES DE INICIO (START) Y STOP


Dentro del proceso de transferencia de datos en el Bus I2C hay dos situaciones bsicas que son el Inicio y el Stop de toda transferencia de datos. Se define: INICIO (START): Una transicin de "1" a "0" (cada) en la lnea de datos (SDA) mientras la lnea del reloj (SCL) esta a "1". PARADA (STOP): Una transicin de "0" a "1" (ascenso) en la lnea de datos (SDA) mientras la lnea de reloj (SCL) est a "1".

3.2 TRANSFIRIENDO DATOS


El nmero de bytes que se enven a la lnea SDA no tiene restriccin. Cada byte debe ir seguido por un bit de reconocimiento (ACK), el byte de datos se transfiere empezando por el bit de ms peso precedido por el ACK.

Si un dispositivo esclavo no puede recibir o transmitir un byte de datos completo hasta que haya acabado alguno de los trabajos que realiza, puede mantener la lnea SCL a "0", lo que fuerza al master a permanecer en un estado de espera. Los datos continan transfirindose cuando el dispositivo esclavo esta listo para otro byte de datos y desbloquea la lnea de reloj SCL.

3.3 RECONOCIMIENTO
El bit de reconocimiento es obligatorio en la transferencia de datos. El pulso de reloj correspondiente al bit de reconocimiento (ACK) es generado por el maestro. El Transmisor desbloquea la lnea SDA ("1") durante el pulso de reconocimiento. El receptor debe poner a "0" la lnea 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 est obligado a generar un ACK despus de que cada byte ha sido recibido. 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 lnea SDA a nivel "1" durante el bit ACK. El maestro entonces puede generar una condicin de STOP abortando la transferencia de datos o repetir la condicin de Inicio enviando una nueva transferencia de datos.

Si un Esclavo -receptor que esta direccionado no desea recibir ms bytes, el master debe detectar la situacin y no enviar ms bytes. Esto se indica porque el esclavo no genera el bit ACK en el primer byte que sigue. El esclavo pone la lnea SDA a "1" lo que es detectado por el master el cual genera la condicin de Stop o repite la condicin de Inicio. Si un master-receptor esta recibiendo datos de un esclavo-transmisor debe generar un bit ACK tras cada byte recibido de transmisor, para finalizar la transferencia de datos no debe generar el ACK tras el ltimo byte enviado por el esclavo. El esclavo -transmisor debe permitir desbloquear la lnea SDA generando el master la condicin de Stop o de Inicio.

4. ARBITRAJE Y GENERACIN DE SEALES DE RELOJ


4.1 ARBITRAJE
Un maestro puede iniciar una transmisin slo si el bus esta libre. Dos o ms maestros pueden generar una condicin de Inicio en el bus lo que da como resultado una condicin de Inicio general. Cada master debe comprobar si el bit de datos que transmite junto a su pulso de reloj, coincide con el nivel lgico en la lnea de datos SDA. El sistema de arbitraje acta sobre la lnea de datos SDA, mientras la lnea SCL esta a nivel "1", de una manera tal que el master que transmite un nivel "1", pierde el arbitraje sobre otro master que enva un nivel "0" a la lnea de datos SDA. Esta situacin continua hasta que se detecte la condicin de Stop generada por el master que se hizo cargo del Bus. En esta figura se ve el arbitraje entre dos master, aunque ms pueden estar involucrados dependiendo de cuantos microcontroladores hay conectados al bus. En el momento en que hay una diferencia entre el nivel interno de la lnea de datos del master DATA1 y el actual nivel de la lnea de datos SDA, su salida de datos es interrumpida, lo cual significa que un nivel "1" esta dominando en el Bus. Esto no afecta los datos transferidos inicialmente por el master ganador.

El arbitraje puede continuar varios bits hasta que se de la circunstancia de control del Bus por uno de los master. Tras el arbitraje los master perdedores se deben poner inmediatamente en modo master-receptor y esclavo pues los datos que enve el master dominante pueden ser para uno de ellos. Un master que pierde el arbitraje puede generar pulsos de reloj hasta el fin de byte en el cual el pierde el arbitraje. En el momento que un master toma el control solo este master toma las decisiones y genera los cdigos de direccin, no existen master centrales, ni existen ordenes prioritarias en el Bus. Especial atencin debe ponerse si durante una transferencia de datos el procedimiento de arbitraje esta todava en proceso justo en el momento en el que se enva al Bus una condicin de Stop. Es posible que esta situacin pueda ocurrir en este caso el master afectado debe mandar cdigos de Inicio o Stop.

4.2 FORMATO
Los datos transferidos tienen la forma de la figura siguiente (esquema de transferencia de bytes en el protocolo I2C):

Despus de la condicin de Start se enva un cdigo con la direccin de un esclavo. sta direccin tiene 7 bits seguidos por un octavo cdigo que corresponde a una direccin R/W (0-indica transmisin/1-indica solicitud de datos). Una transferencia de datos siempre acaba con una condicin de Stop generado por el master, sin embargo si un master todava desea comunicarse con el bus, puede generar repetidamente condiciones de Start y direccionar a otro esclavo sin generar primero la condicin de stop.

XI.) COMUNICACION I2C ENTRE MICROCONTROLADOR MSP430F149 Y MEMORIA EEPROM 24LC512

1. INTRODUCCION
El protocolo I2C est diseado para comunicar un dispositivo maestro con varios esclavos, a travs de dos lneas de transmisin, una lnea para datos (SDA) y otra para sincronizar (SCL). La comunicacin es del ti po serial. En la tarjeta de desarrollo empleada en este ramo, el microcontrolador MSP430F149 est conectado a travs de los pines P4.0 y P4.1, a una memoria EEPROM 24LC512 y a un puerto donde se puede conectar en paralelo otro dispositivo I2C, la figura 1 muestra un esquema de conexiones I2C de la tarjeta.

2. COMUNICACION I2C EN MEMORIA EEPROM


2.1 D ESCRIPCIN DE M EMORIA EEPROM.
La memoria serial EEPROM 24LC512 est diseada para aplicaciones avanzadas de bajo consumo, tales como adquisicin de datos o comunicaciones personales. Es capaz de operar entre un rango de 1,8V a 5,5V y su capacidad es de 64 KBytes. La memoria est preparada para operar a 400KHz.

Fig.1. Esquema de conexiones para comunicacin I2C entre microcontrolador y memoria EEPROM. Posee capacidad de escritura por Byte o por conjunto de Bytes. La lectura de la memoria puede ser tanto secuencial como aleatoria. Se puede montar hasta cuatro dispositivos en paralelo sobre la misma lnea de datos. Esto permite crear un sistema de cuatro EEPROM en paralelo con una capacidad mxima de 256 KByte.

2.2 DESCRIPCIN DE P INES


La EEPROM tiene ocho pines, los cuales se sealan en la Tabla 1. Tabla 1 Pines de la memoria serial EEPROM 24LC512 y su funcin Nombre Pin A0 A1 A2 GND SDA SCL WP Vcc Funcin Direccionamiento Direccionamiento Alimentacin Tierra Datos serial Sincronizacin Bloqueo escritura +2,5V a +5,5V

Las entradas A0 y A1 sirven para direccionar el dispositivo esclavo, en este caso la EEPROM. Como son dos bits, existe la posibilidad de cuatro combinaciones posibles y por tanto, comunicacin con cuatro dispositivos diferentes. Los niveles de estos dos pines de entrada son comparados con los bits de la direccin del esclavo (en este caso direccin 00, ver figura 1) si la comparacin es verdadera, entonces el dispositivo se selecciona. El pin A2 no est disponible y como se ve en la figura 1, est conectado directamente a +Vcc, lo cual es un requerimiento para que la EEPROM funcione. Para la transmisin de datos y direcciones se emplea el pin SDA. ste se comporta como un sumidero, para lo cual debe tener conectada una resistencia (usualmente de 2K) a +Vcc, tal como se muestra en la figura 1. La sincronizacin desde y hacia el dispositivo es realizada a travs del pin SCL. Existe adems un pin WP, que bloquea la escritura en la memoria si est conectado a +Vcc. Tal como se aprecia en la figura 1, en la tarjeta utilizada este pin est conectado a GND y por tanto no cuenta con la posibilidad de bloquear la escritura en memoria.

2.3 CARACTERSTICAS DEL BUS Y FUNCIONAMIENTO


La comunicacin entre el microcontrolador (maestro) y la EEPROM (esclavo), se hace a travs de un bus de dos lneas bidireccionales (SDA y SCL). El Bus es controlado por el dispositivo maestro, el que genera una seal de reloj (SCL), controla el acceso al Bus y genera las condiciones de partida y detencin, que sern explicadas ms adelante. Tanto el maestro, como el esclavo pueden ser empleados como transmisor o receptor, lo cual es determinado por el microcontrolador. El Bus de comunicaciones se caracteriza por cuatro estados de inters, definidos en la tabla 2. De la tabla 2, apreciamos que tras estar el bus desocupado (ambos en alto), se produce un canto de bajada en la lnea SDA (condicin de partida), luego el reloj comienza su ciclo de trabajo. Para obtener un dato vlido se debe haber dado la condicin de partida y adems durante el ciclo en alto de SCL se debe mantener SDA estable, es decir slo se puede enviar dato cuando SCL est en su ciclo bajo. Si se cambiara SDA mientras est el reloj en alto se generara la condicin de parada. Esta situacin genera que slo se pueda escribir un BIT por cada ciclo de reloj. Por ltimo, la condicin de parada se genera cuando el ciclo de reloj est en alto y SDA genera un canto de subida. De esta manera vuelve el Bus a estar desocupado.

Tabla 2 Caractersticas del Bus: Estados de inters de acuerdo a la definicin del protocolo Estado Bus Desocupado Partida de Tx Detencin de Tx Dato Vlido SDA alto canto de bajada canto de subida datos SCL alto alto alto bajo

2.4 PULSO DE ACUSO DE RECIBOS (ACK)


Una vez direccionado un dispositivo, este debe responder con un pulso acuso de recibo (ACK) tras la recepcin de cada Byte, lo cual requiere que el maestro genere un ciclo de reloj extra. Tras enviar los ocho primeros bits (un Byte), el transmisor debe desocupar la lnea de datos para permitir que el receptor mantenga estable en bajo la lnea de datos, mientras se produce el ciclo alto del reloj. Nota: La EEPROM no genera el pulso si existe un ciclo interno programado activo.

2.5 DIRECCIONAMIENTO DE DISPOSITIVO


Tras la condicin de partida, el maestro enva un Byte de control (ver figura 2), el cual contiene en los 4 primeros bits un 1010, cdigo que indica operacin de lectura y escritura habilitadas.

Fig.2. Esquema temporal de Bytes enviados en secuencia de direccionamiento.

Luego un bit (B0), que corresponde a la direccin de memoria A15 y que permite controlar el acceso a cada mitad del arreglo. Los siguientes dos bits corresponden a A0 y A1, los cuales deben coincidir con los niveles de los pines para que sea diseccionado el dispositivo. En nuestro caso, de acuerdo a la figura 1, A0 y A1 deben estar en 00 para que se active el dispositivo. El ltimo bit define si se escribir (en 0) o se leer (en 1). Luego de este Byte el esclavo enva un pulso de acuso de recibo. Tras el envo del Byte de control y el pulso de acuso, se envan los dos Bytes que definen la direccin del arreglo donde se realizar la operacin.

2.6 ESCRITURA EN MEMORIA


Existen dos maneras de escribir en memoria, escribiendo por Byte o escribiendo por pgina de Bytes (64 Bytes). Para realizar el primer tipo de escritura, se procede como se describe en la figura 2, y a continuacin del Byte de Direccin Baja (tras recibir pulso de acuso), se enva el Byte que se desea escribir en memoria. La EEPROM enva el pulso de acuso de recibo, y luego se genera la seal de parada. Tras haber sido escrito un Byte, el puntero local de direccionamiento se encontrar en la direccin siguiente a la que fue escrita. Para escribir una pgina de Bytes, se procede de igual manera que para escribir un slo Byte, pero en vez de g enerar la condicin de parada se siguen enviando Bytes. Para finalizar se genera la condicin de parada y luego comienza el proceso de escritura de la EEPROM.

2.7 LECTURA DE M EMORIA


Existen tres maneras de leer la memoria, la lectura de direccin actual, la lectura aleatoria y la secuencial. Para realizar una lectura de direccin actual, se enva el Byte de control con R/W en uno, luego el dispositivo responde un pulso de acuso y enva el Byte que estaba siendo apuntado en ese momento por el puntero local de direccionamiento. (Cabe recordar que si la accin anterior oper con el Byte n, entonces en la siguiente operacin el puntero estar apuntando a n+1) Para una lectura aleatoria, se debe primeramente realizar el proceso de escritura descrito en la figura 2, con la direccin de memoria que se desea acceder. Luego el maestro genera una condicin de partida que permite terminar el ciclo de escritura, pero no mueve el puntero local. As se enva el Byte al cual apuntaba el puntero. Luego de esto se genera la condicin de parada y el puntero queda sobre la siguiente direccin. El modo de lectura secuencial funciona exactamente igual que para la lectura aleatoria, slo que al transmitir la memoria el primer Byte, el maestro genera un pulso de acuso de recibo, esto hace que la EEPROM transmita la prxima direccin secuencial. Cuando se desee interrumpir la lectura, se enva en vez de un pulso de acuso de recibo, una condicin de parada. El puntero slo permite leer en serie la mitad del contenido de la memoria durante una sola operacin. Esto se debe a que hay que cambiar el bit B0 para acceder a la otra mitad de la memoria.

3. COMUNICACIN I2C EN MICROCONTROLADOR


Como se explic anteriormente, el MSP430F149 no posee un mdulo de hardware dedicado a generar I2C, por lo que se necesita que este sea implementado por software. Para dicho efecto hay dos pines dedicados, el P4.0 dedicado a transmitir datos (SDA) y el P4.1 empleado como reloj (SCL). Estos dos puertos deben ser configurados y inicializados dentro del cdigo de programacin del microcontrolador. Para configurar un puerto se necesita de ciertos registros, para nuestro caso estamos ocupando el puerto cuatro, para el cual slo se deben configurar cuatro registros.

Tabla 3 Registros para Configurar Puerto P4 Registro P4IN P4OUT P4DIR P4SEL Direccin 01Ch 01Dh 01Eh 01Fh Tipo de Registro Slo Lectura Lectura/Escritura Lectura/Escritura Lectura/Escritura

El registro P4IN almacena el bit recibido por la lnea SDA y el P4OUT el bit enviado. Para controlar si se trabajar como receptor o como transmisor, se cuenta con el registro P4DIR, si est en alto el microcontrolador actuar como transmisor y utilizar el registro P4OUT para enviar bits, si esta en nivel bajo, se actuar como receptor y el registro P4IN se utilizar para almacenar los bits recibidos. El registro P4SEL selecciona el modo en que se ocuparn los pines, cada pin puede tener dos funciones, en nuestro caso necesitamos activar la funcin I/O para SDA/SCL, por lo que P4SEL debe permanecer en 0.

XII.) EJEMPLO DE IMPLEMENTACIN DE I2C POR SOFTWARE (TARJETA DE DESARROLLO EASYWEB II )

1. CONEXIN FSICA ENTRE MSP430F149 Y EEPROM 24LC512


En la tarjeta de desarrollo EasyWeb II el microcontrolador MSP430F149 est conectado a travs de los pines P4.0 (SDA) y P4.1 (SCL) a una memoria EEPROM 24LC512. En la figura 1 se aprecia la conexin fsica. Ntese que las lneas de SDA y SCL tambin estn conectadas a un puerto externo de tal forma que puede ser conectado otro u otros dispositivos esclavos en paralelo si es necesario. Nota: Solo podrn ser conectados 3 dispositivos ms, ya que, la EEPROM posee dos bits de direccionamiento y esto limita a 4 esclavos en el bus. De lo contrario podra ocurrir un conflicto entre dispositivos direccionados. En el bus I2C las lneas SDA y SCL deben estar conectadas a Vcc mediante resistencias de pullup. Como se aprecia en la figura 1 solo SDA tiene la resistencia de pull-up, lo cual implica, como se ver mas adelante, que la forma en que se manejan ambas lneas es distinta una de la otra.

Fig.1. Esquema de conexiones para comunicacin I2C entre microcontrolador y memoria EEPROM.

2. ACCESO A LOS PUERTOS DE I/O

Cada puerto del MSP posee 4 registros de 8 bits que permiten controlar la forma de trabajo de cada uno de los pines del puerto. Cada bit esta asociado a un pin del puerto. Estos registros son:

Tabla 1 Registros de control de los puertos del MSP430F149 Registro PnSEL PnDIR 0 1 PnOUT 0 1 PnIN 0 1 Bit x 0 1 Funcin Indica modo del puerto como I/O la otra funcionalidad Indica la direccin como entrada como salida Indica el valor de salida salida baja salida alta Indica el valor de entrada entrada baja entrada alta

Nota: la n representa el nmero del puerto que se desea controlar. La xrepresenta cualquiera de los 8 bits (en el registro), o pines (en el puerto).

3. FUNCIONES DE CONTROL DE LNEAS SDA Y SCL

Las siguientes son funciones que controlan el estado de las lneas SDA y SCL, es decir si se encuentran en alto 1 o bajo 0. Tabla 2 Funciones de control de las lneas SDA y SCL Nombre Funcin SetLowSDA SetHighSDA SetLowSCL SetHighSCL Accin Lleva a 0 la lnea SDA Lleva a 1 la lnea SDA Lleva a 0 la lnea SCL Lleva a 1 la lnea SCL

Se definirn como operaciones al bit en los registros de control de los puertos. Para esto ser necesario definir antes: #define SDA 0x01 // 0000 0001 #define SCL 0x02 // 0000 0010

3.1 S ETLOW SDA Y S ETHIGHSDA


// SDA o P4.0 como salida #define SetLowSDA P4DIR |= SDA; // SDA o P4.0 como entrada #define SetHighSDA P4DIR &= ~SDA;

Con lo anterior se declara al pin P4.0 con direccin de salida o entrada respectivamente. En este caso solo se modifica el registro P4DIR ya que esta lnea posee una resistencia de pull-up y estas definiciones provocarn el cambio de estado. Para la lnea SCL la definicin se har de otra forma.

3.2 S ETLOW SCL Y S ETHIGHSCL


// SCL o P4.1 arroja un 0 a la salida #define SetLowSCL P4OUT &= ~SCL; // SCL o P4.1 arroja un 1 a la salida #define SetHighSCL P4OUT |= SCL; En este caso, para cambiar el estado de SCL (P4.1) se modifica el registro P4OUT ya que esta lnea no esta conectada a una resistencia de pull-up y por lo tanto debe especificarse lo que se desea que salga por el pin P4.1.

4. FUNCIONES DE TRANSFERENCIAS DE DATOS


Las siguientes funciones permiten la transferencia de datos entre el MSP y la EEPROM: Nombre Funcin i2cInit i2cStart i2cStop i2cRead i2cWrite Antes es necesario definir dos constantes: #define NO_I2C_ACK 0 #define OK_I2C_ACK 1 Accin Inicializa el bus. (SDA y SCL en 1) Establece condicin de partida. Establece condicin de trmino. El MSP lee bytes enviados por la EEPROM El MSP escribe bytes en la EEPROM.

4.1 F UNCIN I 2 CI NIT()

void i2cInit(){ int j; P4SEL &= ~SDA; P4SEL &= ~SCL; // I/O para SDA Y SCL P4OUT &= ~SCL; // Salida a cero P4OUT &= ~SDA; // SDA Open Colector P4DIR |= SCL; // SCL COMO SALIDA P4DIR &= ~SDA; // SDA COMO ENTRADA SetHighSCL(); SetLowSDA(); SetHighSDA(); // Ambas lneas quedan en alto }

La funcin anterior se encarga de inicializar el bus I2C de tal forma de asegurar que ambas lneas queden en alto para que despus con una condicin de partida empiece la transferencia de datos. En la figura 4 se puede apreciar est condicin (A).

4.2 FUNCIN I 2CSTART()

void i2cStart(){ SetHighSCL(); SetHighSDA(); SetHighSCL(); SetLowSDA(); SetLowSCL(); SetHighSDA(); // Visto en el analizador lgico como: // SCL ------------------_________________ // SDA -----____________________--------// 0 2.7 5.5 [s] }

Con esta funcin se genera la condicin de partida necesaria para que los dispositivos esclavos del bus (en este caso la memoria) se preparen para ser direccionados y por ende establecer una posible conexin con el maestro (MSP). La condicin de partida (B) se representa en la figura 4. Ntese que el cdigo de la funcin asegura primero tener ambas lneas en alto para luego poder bajarlas en el instante correcto.

4.3 FUNCIN I2CSTOP()


void i2cStop(){ int j; SetLowSCL(); SetLowSDA(); SetHighSCL(); SetLowSDA(); SetHighSCL(); SetHighSDA(); }

Esta funcin genera la condicin de trmino que corta la conexin establecida entre el maestro y el esclavo diseccionado. En la figura 4 se aprecia dicha condicin (C). Al igual que la funcin en 3.2, el cdigo de esta se asegura primero que ambas lneas estn en bajo para luego subirlas en los instantes correctos de tiempo.

4.4 FUNCIN I 2CWRITE()


int i2cWrite(char a){ int i,j; int retorno; for (i=0; i<8; i++){ SetLowSCL(); if (a & 0x80) // 1 el MSB SetHighSDA(); else SetLowSDA(); SetHighSCL(); a <<= 1; } SetLowSCL();

/* ack Read */ SetHighSDA(); SetHighSCL(); if (P4IN & SDA) retorno = NO_I2C_ACK; // esclavo no ha // bajado la lnea else retorno = OK_I2C_ACK; SetLowSCL(); return(retorno); }

A esta funcin se le debe pasar como argumento un char el cual corresponde al byte que se transmitir. A su ves, est retornar un entero de valor 1 que significa que el pulso de reconocimiento ACK fue enviado correctamente. El proceso de escritura de todo el byte lo hace con el ciclo for. Ntese que las sentencias dentro del ciclo for aseguran la condicin de Dato vlido, la cual, establece que un dato (SDA) ser vlido mientras este estable en el perodo alto de la seal de reloj (SCL). En la figura 4 (D) representa la condicin de Dato vlido. Estados del Bus I2C

Fig. 2. Diferentes estados del bus I2C

4.5 FUNCIN I 2CREAD()

char i2cRead(int ack){ int i,j; char caracter = 0x00; SetLowSCL(); SetHighSDA(); for (i=0; i<8; i++){ caracter = caracter << 1; SetHighSCL(); if (P4IN & SDA) caracter = caracter + 1; SetLowSCL(); } if (ack){ //enva ACK al transmisor SetLowSDA(); } SetHighSCL(); SetLowSCL(); return(caracter); }

La funcin i2cRead() permite al MSP leer bytes de datos desde la memoria EEPROM. Con est funcin se pueden implementar los tres tipos de lectura: De direccin actual, aleatoria y secuencial. Se le debe pasar como argumento un int cuya funcin principal es la de enviar un pulso ACK de reconocimiento a la memoria (transmisor ahora). Recurdese que cuando se leen datos de la memoria, al finalizar la lectura, el maestro (MSP) no genera pulso de ACK (Ver figura 3) sino que solo la condicin de parada. Por este motivo es que se le pasa este int de argumento, de tal forma que cuando se quiere dejar de leer el valor de este int es 0 y no se enva el ACK. Envos de ACK por parte del MSP en un proceso de lectura

Fig. 3. Envos de ACK en un proceso de lectura Ntese que dentro del ciclo for se asegura la lectura vlida de datos haciendo el reconocimiento del bit durante el perodo alto de SCL.

XIII.) PROGRAMACION DE I2C

1. DIAGRAMA DE FLUJO DE LA PROGRAMACIN DE I2C


El microcontrolador utilizado debe ser programado para la implementacin del protocolo I2C. A continuacin presentamos un diagrama de flujo, el cual nos ayudar a describir la programacin de este protocolo.

Fig.1. Diagrama de flujo de la programacin de I2C. Lo primero que tenemos que definir en nuestro programa es una seccin de Inicializaciones. En esta seccin debemos configurar los puertos de nuestro microcontrolador, de manera de poder generar en la lneas de comunicacin un valor estable (ambas en niveles altos). Una vez que se tiene esta configuracin, se genera una condicin de Start, la cual tal como se observa en el diagrama, equivale a un cambio (canto de bajada) en la lnea de SDA, mientras se mantiene en alto SCL. Luego se deben enviar 8 bits (byte de control), en los cuales se encuentran valores caractersticos de nuestra memoria y el bit de R/W el cual tomar valor cero o uno dependiendo de si se quiere escribir o leer. En el caso en que el bit de R/W es cero, procedemos a hacer un llamado a la funcin de escritura, la cual debe enviar datos de 8 bits y verificar si se recibe un acuse de recibo (ACK), en el caso que ACK es igual a cero significa que contine el proceso de escritura, de lo contrario pueden haber finalizado nuestros datos, y debemos generar una condicin de Stop. Para producir esta parada en la comunicacin es que debemos crear una funcin que genere esta condicin (funcin Stop). Ahora, en el caso que el bit R /W es 1, debemos generar la rutina para lectura. Es importante recordar que existen tres tipos de lectura: Aleatoria, secuencial y lectura de la direccin actual. Es importante recordar que la memoria Eeprom posee una especie de puntero, el cual se queda en el ltimo valor ya sea escrito o ledo.

Si optamos por la lectura de la direccin actual, solo es necesario llamar a la funcin de lectura, y estar verificando constantemente si hay generacin de ACK, ya que tal como ocurre en el proceso de escritura, este bit nos indicar si debemos continuar o terminar el proceso generando la condicin de parada (Stop ). Ahora bien, si queremos realizar una lectura secuencial o una aleatorio, debemos antes de comenzar a leer, mover el puntero interno de nuestra memoria. Para realizar esto debemos generar un proceso de escritura, donde se enviar la direccin a la cual queremos acceder, de manera de mover el apuntador hacia esa direccin. Una vez realizado este envo, al primer ACK igual a cero salimos de la rutina de escritura, sin generar una condicin de Stop sino que entrando inmediatamente a la rutina de lectura. De esta forma realizamos el proceso de lectura desde la direccin en la cual hemos dejado el puntero interno.

2. EJEMPLOS DE PROGR AMACIN.


2.1 EJEMPLO DE LECTURA SECUENCIAL
CDIGO #include "i2c.h" #define EEPROM 0xA0 main() { int i, accesEEPROM; char textoRead[64]; i2cStart(); accesEEPROM = i2cWrite(EEPROM); while(!accesEEPROM) accesEEPROM = i2cWrite(EEPROM); i2cWrite(0x00); . i2cWrite(0x00); i2cStart(); accesEEPROM = i2cWrite(EEPROM | 1 ); for (i = 0; i < strlen(texto) - 1; i++) textoRead[i]= i2cRead(1); textoRead[i]=i2cRead(0); i2cStop(); } // EEPROM 0xA1 (lectura) //Largo del texto que se escribi. COMENTARIOS

// Arreglo del largo que se necesite

// Retorno de la funcin i2cwrite () // Mientras el slave no haya bajado la lnea. // Se espera ACK // Direccin a la cual queremos acceder

2.1 EJEMPLO DE ESCRITURA


CDIGO #define EEPROM 0xA0 main() { int i; char writeText[] = "I2C la lleva"; i2cInit (); i2cStart (); i2cWrite(EEPROM); i2cWrite(0x00); i2cWrite(0x00); for(i = 0; i < strlen(writeText); i++) i2cWrite(writeText[i]); i2cStop(); } COMENTARIOS

// Inicializamos los puertos

// Se enva el byte de control de la EEPROM // Bits ms significativos para direccionamiento // Bits menos significativos del direccionamiento // Se escriben los datos en la EEPROM

XIV.) BIBLIOGRAFIA
- www.semiconductors.philips.com/buses/i2c/ - www.elo.utfsm.cl/~lsb/elo325/datos/msp430x1xx.pdf - www.elo.utfsm.cl/~lsb/elo325/clases/Memoria%20Jaime %20Z.pdf - www.elo.utfsm.cl/~lsb/elo325/aplicaciones/ApplicatioNotes/ slaa115.pdf - www.elo.utfsm.cl/~lsb/elo325/datos/24LC512.pdf

Potrebbero piacerti anche