Академический Документы
Профессиональный Документы
Культура Документы
2C I
Introduccin
1980: Philips desarrolla el Bus de 2 alambres I2C para la comunicacin de circuitos integrados. Se han otorgado licencias a mas de 50 compaas, encontrndonos con ms de 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.
Actualmente el Bus ha sido modificado para alcanzar velocidades de hasta 3.4 Mbits/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. Diferentes sistemas de 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 toda velocidad mientras se utilicen los modos F/S (Fast/Standard) de velocidades con las partes ms lentas del sistema.
Los procesadores de seal o "jungla" en televisores (LA7610, TA1223, DTC810,...) Memorias 24Cxx Codificadores de video de reproductores de DVD (SAA 7128, TC 90A32F,...) Preamplificadores de video en monitores (KB 2502 ) Etc...
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.
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.
Protocolo
Ms de un master puede controlar el bus al mismo tiempo sin corrupcin de los mensajes
Procedimiento que asegura que si uno o mas master simultneamente deciden controlar el Bus solo uno es permitido a controlarlo y el mensaje saliente no es deteriorado Procedimiento para sincronizar las seales del reloj de dos o mas dispositivos
Para operar un esclavo sobre el Bus I2C solo son necesarios seis simples pasos, suficientes para enviar o recibir informacin. Un bit de Inicio 7-bit o 10-bit 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
Las condiciones de Inicio y Stop son siempre generadas por el Master. El Bus I2C se considera ocupado despus de la condicin de Inicio. El Bus se considera libre de nuevo despus de un cierto tiempo tras la condicin de Stop.
Transfiriendo datos
El numero de bytes que se enven a la lnea SDA no tiene restriccin. 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.
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 Master. 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.
Arbitraje
Un master puede iniciar una transmisin solo si el bus esta libre. Dos o mas master 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.
Formato
Despus de la condicin de Start un cdigo de direccin de un esclavo es enviada, esta 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.
MSP430F149 no posee hardware para el protocolo I2C, entonces debe ser implementado por software. En la tarjeta EasyWeb se comunica el microcontrolador (maestro) y la memoria EEPROM (esclavo), a travs de I2C: -Comunicacin I2C en memoria EEPROM. -Comunicacin I2C en microcontrolador.
P2_0
+5V
EXTERNO
SDA SCL
+Vcc
7 3 2 1 8 WP A2 A1 A0 GND 4
2K
VCC SDA SCL 5 6 P4.0 P4.1 SDA SCL
EEPROM MSP430F149
2 bits para direccionamiento 4 dispositivos esclavos en paralelo (ej: 4 EEPROM). Un Bus de dos lneas bi-direccionales SDA y SCL, el dispositivo maestro controla el Bus a travs de la seal SCL. Tanto maestro (microcontrolador) y esclavo (EEPROM) pueden transmitir o recibir.
Por cada Byte enviado correctamente el receptor debe generar un pulso de acuso de recibo (ACK). (Transmisor debe desocupar la lnea). Existen cuatro estados de inters del Bus:
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
Byte de Control: - Cdigo control cdigo que indica modo de operar. (1010 = R/W). - Bit B0 para acceder a cada mitad de memoria. - A0 y A1 coincide con pines selecciona el dispositivo. - R/W un 1 si se lee y un 0 si se ecribe. Se enva en dos bytes la direccin de memoria con que se pretende operar.
Byte de Control
B 0
A 1
A 0
R/ W
Cdigo de control
A A A A A A 14 13 12 11 10 9
A 8
A 7
A 6
A 5
A 4
A 3
A 2
A 1
A 0
tiempo
Escritura en Memoria
2 formas de escribir en memoria (el bit R/W del Byte de control debe estar en 0): - Escritura por byte. - Escritura por Pgina.
Escritura en Memoria
Escritura por Byte: -Se direcciona la parte de la memoria que ser escrita. -Se enva byte que se desea escribir. -Luego se genera condicin de parada y se detiene comunicacin. -Se escribe byte en memoria.
Escritura en Memoria
Escritura por Pgina: -Igual que escritura por byte, pero en ves de generar la parada se sigue enviando bytes. -Se genera condicin de parada. -Se escribe en memoria TODOS los bytes enviados.
Lectura en Memoria
Existe un puntero local de direccionamiento en la memoria. 3 maneras de leer la memoria EEPROM (bit R/W de Byte de control debe estar en 1): - Lectura de Direccin Actual. - Lectura Aleatoria. - Lectura Secuencial.
Lectura en Memoria
Lectura de Direccin Actual: -Se enva byte de control con bit R/W en 1. -Memoria responde con contenido de la direccin a la que apunta el puntero local de direccionamiento . -Condicin de parada
Lectura en Memoria
Lectura Aleatoria: -Se direcciona el Byte que ser ledo (bit R/W en escritura 0) . -Se genera condicin de partida nuevamente (no mueve puntero). -Se enva Byte de control con bit R/W en lectura 1. -EEPROM responde contenido de la direccin deseada. -Condicin de parada (puntero sobre siguiente direccin).
Lectura en Memoria
Lectura Secuencial: -Se direcciona el Byte que ser ledo (bit R/W en escritura 0) -Se genera condicin de partida nuevamente (no mueve puntero) -Se enva Byte de control con bit R/W en lectura 1 -EEPROM responde contenido de la direccin deseada. -Microcontrolador enva ACK -EEPROM transmite siguiente contenido de direccin secuencial -Para interrumpir, en vez de ACK se enva condicin de parada
Se utiliza los pines 0 y 1 del puerto 4: -Pin P4.0 es la lnea SDA (transmisin de datos) -Pin P4.1 es la lnea SCL (reloj) Configuracin de Puerto 4 necesita de 4 registros: -P4IN registro que almacena dato recibido (entrada). -P4OUT registro que almacena dato transmitido (salida). -P4DIR registro que controla si se actuar como receptor o transmisor. (Transmisor-> 1 Receptor->0). -P4SEL registro que indica que funcin cumplir el pin, para operar en modalidad I2C debe estar en 0
Implementacin de I2C por software para manejo de EEPROM en tarjeta Easy Web II
Inicializaciones
Start
Byte de Control
SI R/W=0 ? NO
Escribir Datos
ACK=0 ?
NO
Configuracin de Puertos para dejar SDA y SCL en niveles altos Lectura de Datos
Notar que para procesos de Lectura Aleatoria y Secuencial, se debe realizar una secuencia de escritura para direccionar.
SI
NO ACK=0 ? STOP=1 ? SI NO
Stop
SetLowSDA();
SetLowSCL();
SetHighSDA();
SetHighSCL();
Establece el pin SDA como salida (P4DIR=1). Baja la seal de SCL (P4OUT=0). Establece el pin SDA como entrada (P4DIR=0). Sube la seal de SCL (P4OUT=1).
// SDA Entrada
ic2Init();
ic2Start();
ic2Stop();
ic2Read();
ic2Write();
Inicializa el bus (SDA y SCL en alto). Establece una condicin de partida. Establece una condicin de termino. El micro empieza a leer bytes de datos que le enva la EEPROM. El micro empieza a escribir bytes en la EEPROM.
P4OUT &= ~SCL; P4OUT &= ~SDA; P4DIR |= SCL; P4DIR &= ~SDA; SetHighSCL(); SetLowSDA(); SetHighSDA();
// Salida a cero // SDA Open Colector // SCL COMO SALIDA // SDA COMO ENTRADA
Ejemplo de escritura.
#define EEPROM 0xA0 main(){ int i; char writeText[] = "I2C la lleva"; i2cInit (); //Inicializamos los puertos. i2cStart (); i2cWrite(EEPROM); //Se enva el byte de control de la EEPROM i2cWrite(0x00); //Bits ms significativos para direccionamiento. i2cWrite(0x00); //Bits menos significativos del direccionamiento. for(i = 0; i < strlen(writeText); i++) i2cWrite(writeText[i]); // Se escriben los datos en la EEPROM. i2cStop();
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(); }
//retorno de la funcin i2cwrite () //Mientras el slave no haya bajado la lnea. //Se espera ack //Direccin a la cual queremos acceder.
//EEPROM 0xA1 (lectura) //largo del texto que se escribi. // Lectura Secuencial, con envo de ack // Fin de la lectura secuencial