Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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.
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.
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.
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.
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).
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.
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.
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.
Parada (Stop): Dato Vlido (Valid Data): Formato de Datos (Data Format):
Direccin (Address):
Arbitraje Sincronizacin
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.
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.
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.
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.
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.
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.
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
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.
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.
Fig.1. Esquema de conexiones para comunicacin I2C entre microcontrolador y memoria EEPROM.
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).
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
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.
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).
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.
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.
/* 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
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.
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.
// Retorno de la funcin i2cwrite () // Mientras el slave no haya bajado la lnea. // Se espera ACK // Direccin a la cual queremos acceder
// 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