elbusi2c

47
El Bus I 2 C

Upload: andreiitajimenez

Post on 18-Sep-2015

225 views

Category:

Documents


3 download

DESCRIPTION

comunicacion i2c

TRANSCRIPT

  • El Bus I2C

  • Introduccin1980: 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.

  • Evolucin Del Bus I2CActualmente 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.

  • Principales Equipos Con El Bus IncorporadoLos 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...

  • Caractersticas ms salientes del bus I2C son: Se necesitan solamente 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 elmicro 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.

  • Criterios para Utilizar I2CUn 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

  • Terminologa bsica del Bus I2C

    TrminosDescripcinTransmisorEl dispositivo que enva datos al BusReceptorEl dispositivo que recibe datos desde el BusMaster (Maestro)El dispositivo que inicia una transferencia, genera las seales del reloj y termina un envo de datosSlave (Esclavo)El dispositivo direccionado por un masterMulti-MasterMs de un master puede controlar el bus al mismo tiempo sin corrupcin de los mensajesArbitrajeProcedimiento 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 deterioradoSincronizacinProcedimiento para sincronizar las seales del reloj de dos o mas dispositivos

  • Instrucciones en el I2C BusPara 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

  • 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. Estas son:

    - 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) esta a "1"

  • 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.

  • Procedimiento de Arbitraje entre dos Master

  • Formato

    Los datos transferidos tienen la siguiente forma estndar:

    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.

  • Comunicacin I2C entre Microcontrolador MSP430F149 y Memoria EEPROM 24LC515

  • Comunicacin I2C entre Microcontrolador MSP430F149 y Memoria EEPROM 24LC515MSP430F149 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.

  • Esquema de conexiones I2C implementado en la tarjeta

    a1

    1

    a2

    2

    3

    a3

    4

    a4

    b1

    b2

    b3

    b4

    5

    6

    7

    8

    Vcc1

    GND

    0

    0

    GND

    0

    0

    Vcc2

    a1

    1

    a2

    2

    3

    a3

    4

    a4

    b1

    b2

    b3

    b4

    5

    6

    7

    8

    Vcc1

    GND

    0

    0

    GND

    0

    0

    Vcc2

    A1

    1

    Page

    Title

    SDA

    P4.0

    SCL

    P4.1

    Vcc1

    Vcc1

    GND

    Vcc2

    WP

    7

    A2

    3

    2

    A1

    1

    A0

    SDA

    SCL

    5

    6

    VCC

    8

    4

    Vcc2

    +Vcc

    MSP430F149

    EEPROM

    EXTERNO

    +3,6V

    P2_0

    /RESET

    RXD0

    SDA

    SCL

    TXD0

    +5V

    +3,3V

    GND

    ESQUEMA DE CONEXIONES

    2K

  • Comunicacin I2C en Memoria EEPROM

    Capacidad 64KB y preparada para operar a 400KHz8 pines en total:

    A0DireccionamientoA1DireccionamientoA2Conectado a +VccGNDTierraSDASeal Datos SerialSCLSeal RelojWPBloque de escrituraVcc+2.5 [V] a +5.5 [V]

  • Comunicacin I2C en Memoria EEPROM

    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.

  • Comunicacin I2C en Memoria EEPROM

    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:

    EstadoSDASCLBus DesocupadoAltoAltoPartida de TxCanto de bajadaAltoDetencin de TxCanto de subidaAltoDato VlidoDatosBajo

  • Direccionamiento del Dispositivo

    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.

  • Direccionamiento del Dispositivo

    Page

    Title

    Box sizes with text.Press to start anew line of text.

    1

    R/W

    A 0

    A 1

    B 0

    0

    1

    0

    X=Bit sin importancia

    X

    A 9

    A 10

    A 11

    A12

    A 13

    A14

    A 0

    A8

    Asignacin de Bits en Secuencia de Direccionamiento

    A 1

    A 2

    A 3

    A4

    A 5

    A 6

    A7

    tiempo

    Byte Direccin Alta

    Byte Direccin Baja

    Byte de Control

    Cdigo de control

    Bit Selector de Bloque

    Dir. Disp.

    ModoEscritura/Lectura

  • 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 MemoriaEscritura 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 MemoriaEscritura 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 MemoriaLectura 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 MemoriaLectura 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 MemoriaLectura 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

  • Comunicacin I2C en MicrocontroladorSe 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

  • Configuracin dePuertos para dejar SDA y SCL en niveles altosInicializacionesStartLectura de DatosACK=0 ?R/W=0 ?Escribir DatosNotar que para procesosde Lectura Aleatoria y Secuencial, se debe realizar una secuencia de escritura para direccionar.ACK=0 ?STOP=1 ?StopSINOSINOSINOSINOTres tipos:Lectura Aleatoria.Lectura Secuencial.Lectura Direccin Actual. Byte de ControlDiagrama de Flujo: Programacin.

  • Funciones de control de las lneas del busSetLowSDA(); Establece el pin SDA como salida (P4DIR=1).SetLowSCL(); Baja la seal de SCL (P4OUT=0). SetHighSDA(); Establece el pin SDA como entrada (P4DIR=0).SetHighSCL();Sube la seal de SCL (P4OUT=1).

  • Funciones de control de las lneas del busstatic void SetLowSDA(){ P4DIR |= SDA; // SDA Salida}static void SetHighSDA(){ P4DIR &= ~SDA; // SDA Entrada}

    static void SetLowSCL(){ P4OUT &= ~SCL;}static void SetHighSCL(){ P4OUT |= SCL;}

  • Funciones de transferencia de Datosic2Init(); Inicializa el bus (SDA y SCL en alto).ic2Start(); Establece una condicin de partida.ic2Stop(); Establece una condicin de termino.ic2Read();El micro empieza a leer bytes de datos que le enva la EEPROM.ic2Write();El micro empieza a escribir bytes en la EEPROM.

  • Funciones de transferencia de Datos/*************************//* Inicializar las lineas*//* y el bus *//*************************/

    void i2cInit(){ int j;

    P4SEL &= ~SDA; P4SEL &= ~SCL; // Funcion 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(); // visto en el analizador logico como un pulso de SetHighSDA();// 5 a 3.56 microsegundos aprox.

    // Ambas lineas quedan en alto}

  • Funciones de transferencia de Datos/*************************//* Start Data Transfer *//*************************/

    void i2cStart(){

    SetHighSCL(); SetHighSDA();

    SetHighSCL(); SetLowSDA();

    SetLowSCL(); SetHighSDA();

    /* Visto en el analizador lgico como:* SCL ------------------_________________ * SDA -----____________________---------* 0 2.7 5.5 microsegundos*/}

  • Funciones de transferencia de Datos/*************************//* Stop Transfer *//*************************/

    void i2cStop(){ int j;

    SetLowSCL(); SetLowSDA();

    SetHighSCL(); SetLowSDA();

    SetHighSCL(); SetHighSDA();}

  • Funciones de transferencia de Datos/*************************//* Write Transfer *//*************************/int i2cWrite(char a){ int i,j; int retorno;

    for (i=0; i

  • Funciones de transferencia de Datos/*************************//* Read Transfer *//*************************/char i2cRead(int ack){ int i,j; char caracter = 0x00;

    SetLowSCL(); SetHighSDA();

    for (i=0; i

  • Ejemplo de escritura.#define EEPROM 0xA0main(){ 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();

  • Ejemplo de Lectura Secuencial.#include "i2c.h"#define EEPROM 0xA0

    main(){ int i, accesEEPROM; char textoRead[64];// Arreglo del largo que se necesite i2cStart(); accesEEPROM = i2cWrite(EEPROM); //retorno de la funcin i2cwrite () while(!accesEEPROM) //Mientras el slave no haya bajado la lnea. accesEEPROM = i2cWrite(EEPROM); //Se espera ack i2cWrite(0x00);//Direccin a la cual queremos acceder. i2cWrite(0x00);

    i2cStart(); accesEEPROM = i2cWrite(EEPROM | 1 ); //EEPROM 0xA1 (lectura) for (i = 0; i < strlen(texto) - 1; i++) //largo del texto que se escribi. textoRead[i]= i2cRead(1); // Lectura Secuencial, con envo de ack textoRead[i]=i2cRead(0); // Fin de la lectura secuencial i2cStop();}