BUS I2C: IMPLEMENTACIÓN PRÁCTICA CON … · 2013. 5. 17. · • El Maestro del bus generará un...

28
1 Comunicación Serie: Ejemplos-Interface I2C Microcontroladores PIC ©ATE-Universidad de Oviedo BUS I2C: IMPLEMENTACIÓN PRÁCTICA CON MICROCONTROLADORES PIC MEMORIAS EEPROM SERIE Fernando Nuño García

Transcript of BUS I2C: IMPLEMENTACIÓN PRÁCTICA CON … · 2013. 5. 17. · • El Maestro del bus generará un...

  • 1

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    BUS I2C:IMPLEMENTACIÓN PRÁCTICA CON MICROCONTROLADORES PIC

    MEMORIAS EEPROM SERIE

    Fernando Nuño García

  • 2

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Ventajas del BUS I2C

    • Definido inicialmente a mediados de los 80 para trabajar a 100kbit/s y en 1995se definió un modo rápido de funcionamiento que permitía transferencias de hasta400kbit/s (algunos dispositivos gráficos llegan a 3,4MHz).

    • Presenta una transferencia “lenta” en comparación con el modo SPI y mucho más con la lectura/escritura directa de los puertos de un microcontrolador

    • Es útil y se emplea en muchas aplicaciones en las que la velocidad de transferenciaes mucho mayor de lo que el caso requiere (p.e. Medida de temperaturas con constantes de tiempo de segundos)

    • Su principal ventaja, es que una vez disponible el microcontrolador con sus funcionesde interface con bus I2C, la inclusión de un dispositivo I2C adicional sólo necesitaríasu conexión a las dos líneas del bus (SDA y SCL que son las mismas para todos) yasignarle una dirección. Los intercambios se realizarían utilizando los mismos subprogramas para todos

    • La tensión de funcionamiento va de 2,5V a 5,5V y no es necesaria la presencia de “drivers” de adaptación de tensión externos (integración en los propios dispositivos)

  • 3

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Comparativa de Comunicaciones Serie

  • 4

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    • Convertidor D/A: MAX518 (DIP8 ó SO-8) de Maxim

    • Convertidor A/D y D/A: PCF8591 (DIP16 ó SO-16) de Philips

    • Sensor de Temperatura: LM75 (SO-8) de National Semiconductor

    • EEPROM serie: 24Cxx ó 24LCxx (DIP8 ó SO-8) de Microchip

    • Reloj/Calendario de tiempo real (RTC): X1288 (SOIC-14) de Xicor

    • LCD con Driver: TTR6030 (PCB con 4 pines)

    • Otros Microcontroladores: PCA8516 de Philips para LCDs

    C.I. con bus I2C:

    Al margen de su compatibilidad con el bus I2C, cada dispositivotiene su propia configuración, con sus registros internos, sus comandos,

    sus estados, etc. que será preciso conocer en sus hojas de característicasfuncionales particulares

  • 5

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Conversor D/A (MAX 518)

    • Convertidor D/A doble de 8 bits

    • Será un esclavo en el bus I2C quesiempre recibirá datos (no enviará) • SDA y SCL siempre serán entradas

    • Con las entradas AD1 y AD0 se puedenseleccionar 2 bits de la dirección, los 5primeros son fijos:

    0-1-0-1-1-A1-A0

    podrían conectarse hasta 4 MAX518al mismo bus I2C

    Selección de Dirección

    Bus

  • 6

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Conversor A/D y D/A (PCF8591)

    BusSel. Dirección

    Entradas A/DAnalógicas

    Salida D/AAnalógica

    • Será dispositivo Esclavo en el bus que puede enviar (A/D) o recibir (D/A): SDApuede ser entrada o salida

    • Dirección asignada al integrado: 1-0-0-1-A2-A1-A0 (hasta 8 en el bus)

  • 7

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Sensor de Temperatura (LM75)

    • Combinación de sensor de Tª, conversor A/D e interface I2C en un solo C.I.

    • Siempre será dispositivo esclavo y estará emitiendo datos cuando se lo soliciteel Maestro del bus

    • Dirección asignada: 1-0-1-0-A2-A1-A0

    Sel. DirecciónBus I2C

  • 8

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Reloj/calendario de tiempo real con alarmas (X1288)

    • Registra segundos, minutos, horas, día de la semana, día del mes, mes y año

    • Será un esclavo en el bus con una dirección fija: 1-1-0-1-1-1-1

    • Puede enviar (da la hora, fecha, etc) o recibir datos (puesta en hora)

  • 9

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    LCD con DRIVER y bus I2C (TTR6030)

    • Display de cuarzo líquido de 2 líneas y 8 caracteres por línea, caracteres de 5x7

    • Es un LCD con su driver e interface I2C en una placa de circuito impreso pensado para ser Esclavo de un bus I2C con la dirección: 0-1-1-0-0-1-A0 (A0 es configurable internamente)

    • Dispone de un microcontrolador PCF2103

  • 10

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Memorias serie EEPROM con interface I2C (24XXX de Microchip)

    • Memorias no volátiles borrables y grabables eléctricamente (lectura/escritura)

    • Organización matricial interna

    • Dispositivos esclavos en bus I2C con dirección configurable: 1-0-1-0-A2-A1-A0con transferencia de datos bidireccional

    Bus

    Config.

  • 11

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Ejemplo: Memoria 24C65 (ó 24LC65) en detalle

    • La diferencia entre ambas son los márgenes de tensión de funcionamiento: para la24C65 va de 4,5V a 5,5V y para 24LC65 de 2,5V a 6,0V

    • Son memorias serie EEPROM de 8k posiciones x 8 bits/posición: 64kbits que se empleanpara guardar datos no volátiles

    • Dispone de un bloque de 4kbits de “alta durabilidad y resistencia” a ciclos de borradoy escritura frecuente de datos (10.000.000 de ciclos de borrado/escritura), el resto (60kbits) garantizan un promedio de 1.000.000 de secuencias de borrado y escritura

    • Dispone de una caché interna de 64bytes para escritura rápida y el tiempo de escritura se establece en torno a 2ms por byte y de 5ms por página de 8 bytes de caché

    • La transferencia mediante bus I2C puede realizarse a 100kHz(2,5V) ó a 400kHz

  • 12

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Descripción funcional de 24LC65

    • La memoria, a nivel interno está organizada en bytes, que es el tamaño de los datosque puede recibir o enviar en cada transferencia individual el bus I2C

    • Para el acceso a cada byte interno, sea para lectura o para escritura, la memoria dispone de un puntero de direcciones que en el caso de la 24LC65 será de 13 bits (para 8kbytes = 213 bytes)

    • Para acceder a un byte de la memoria, será preciso situar previamente el punteroapuntando a la dirección asignada a dicho byte

    • En cada lectura/escritura de un byte el puntero de direcciones se incrementa demanera automática, permitiendo un acceso secuencial a las posiciones de la EEPROM.Si se desea un acceso aleatorio, será preciso cambiar antes el puntero.

    Puntero (A12-A0) b7 b6 b5 b4 b3 ...b0

    Matrizde 8kbytes

  • 13

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Escritura

    1.- Escribir un byte:

    • El Maestro del bus generará un START, luego colocará la dirección asignadaen el bus al dispositivo EEPROM (7bits) y el bit R/W=0 para indicar que el Maestro va a grabar un dato en la EEPROM Esclava. Tras el ACK que colocala EEPROM al detectar coincidencia con su dirección, el Maestro debe enviarla dirección de la posición que se desea grabar. Esto se hace en dos bytes, seenvía primero un byte con tres ceros y los 5 bits de la parte alta del puntero interno y luego los otros 8 bits.

    • Tras los correspondientes ACK de la memoria (tras cada byte), el Maestro enviará el byte a escribir en la referida posición, la EEPROM responderá conun nuevo ACK y el Maestro finalizará enviando una condición de STOP.

    • Tras esta secuencia, la memoria inicia el ciclo interno de escritura que duraentorno a 2ms. Durante ese tiempo, la EEPROM no generará bits ACK de reconocimiento si se intenta una transferencia

  • 14

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    1.- Escribir un byte (sigue):

    S 1 0 1 0 A2 A1 A0 0

    Start Dirección de la EEPROMcomo Esclavo en I2C R/W

    ACK 0 0 0 D12 D11 D10 D9 D8 ACK

    D7 D6 D5 D4 D3 D2 D1 D0 ACK

    5 bits altos de la dirección donde se va a escribir

    Los 8 bits bajos de la dirección donde se va a escribir

    b7 b6 b5 b4 b3 b2 b1 b0 ACK P

    StopLos 8 bits del dato quese quiere escribir

    SDA:

    D12 D11 D10.....D0 b7 b6 b5 b4 b3 ...b0EEPROM de dir.

    1010A2A1A0

    Puntero interno SDA

    EFECTOde la

    ESCRITURA

  • 15

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Escritura

    2.- Escribir páginas o escribir caché:

    • La escritura de varios bytes según el procedimiento descrito puede resultarexcesivamente lento. Para solventar el inconveniente, se puede utilizar una zona de memoria caché de 64 bytes organizada en 8 páginas de 8 bytes cada una

    • La transferencia se inicia del mismo modo que la escritura de un byte pero ahora, tras el envío de la dirección de grabación, se van enviando los datosde manera consecutiva (con ACK tras cada uno de ellos) que irán almacenándosetemporalmente en la caché interna. Hasta que no se reciba la condición de STOP,no se iniciará la grabación de la EEPROM desde la caché. El tiempo total de grabación de la EEPROM dependerá de cuántas páginas estén cargadas en la caché en el momento de recepción del STOP, el tiempo máximo por página es de 5ms

    • Tras la recepción de cada byte, los 6 bits más bajos del puntero de direcciones(que forman el puntero de la caché) se irán incrementando de modo automático y los 7 más altos no cambiarán. Si el Maestro llegase a enviar más de 64 bytes antesde un STOP, el puntero de la caché se desbordaría y se sobreescribirían losprimeros bytes ya almacenados en la caché.

  • 16

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    ...

    2.- Escribir páginas o caché (sigue):

    Operaciones de Escritura

    S 1 0 1 0 A2 A1 A0 0

    Start Dirección de la EEPROMcomo Esclavo en I2C R/W

    ACK 0 0 0 D12 D11 D10 D9 D8 ACK

    5 bits altos de la dirección a partir de la cual se va a escribir

    SDA:

    D7 D6 D5 D4 D3 D2 D1 D0 ACK

    Los 8 bits bajos de la dirección donde se va a escribir

    a7 a6 a5 a4 a3 a2 a1 a0 ACK

    P

    Stop

    1er byte de datos

    b7 b6 b5 b4 b3 b2 b1 b0 ACK

    2º byte de datos

    z7 z6 z5 z4 z3 z2 z1 z0 ACK

    Último byte de datos(bytes

  • 17

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Escritura: Memoria Caché

    • La memoria caché es un buffer FIFO organizado en 8 páginas de 8 bytes cada una.En cuanto se inicia un comando de escritura, la caché empieza a cargarse con los bytes que se van recibiendo. Al aparecer un STOP se inicia la escritura real en EEPROM,pero sólo se escriben los bytes que se han recibido, NO TODA LA CACHÉ

    byte 0 página 0byte 1 página 0

    byte 7 página 0....

    byte 0 página 1byte 1 página 1

    byte 7 página 1....

    byte 0 página 7byte 1 página 7

    byte 7 página 7....

    .....

    CACHÉ (64 bytes) EEPROM (8kbytes)

    Escritura de hasta 64 Bytes

    STOP

    La escritura final serealiza entre páginas

    de 8 bytes:

    de una página de cachéa una página de EEPROM

    Si no se ha completado elenvío de los

    8 bytes de una página de caché

    sólo se transfieren a laEEPROM

    los bytes cargados

    NO todas las EEPROM 24xxx tienen caché 64 bytes: en 24LC64 de 32 bytes

  • 18

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    • Los bytes que se reciben se van cargando a partir de la página 0 de la caché, y el primer byte que se carga de esa página 0 viene seleccionado por los 3 últimos bits(D2,D1,D0) de la dirección que va a ocupar finalmente en la EEPROM el primer byteenviado.

    CACHÉ (64 bytes)

    EEPROM (8kbytes)

    Escritura de hasta 64 Bytes

    Operaciones de Escritura: Memoria Caché (II)

    0010001101 010

    Dirección parael primer byte:

    byte 0 página 0byte 1 página 0

    byte 7 página 0

    byte 2 página 0

    byte 0 página 1byte 1 página 1

    byte 7 página 1....

    byte 0 página 7byte 1 página 7

    byte 7 página 7....

    .....

    byte 3 página 0...

    (2) O

    rden

    par

    a lle

    nar

    la c

    aché

    (1)

    byte 3 página 0

    (3) A

    l lle

    gar

    al “f

    inal

    ” seg

    uirí

    a ar

    riba

    (4) Si se completan los 64bytes de la caché,los 2 últimos bytes enviados ocuparían los

    posiciones 0 y 1 de la página 0 y al realizar laescritura de EEPROM pasarían a 2 posiciones

    no deseadas al ser la escriturade página de caché a página de EEPROM

    byte 1, pag.0 cachébyte 0, pag.0 caché (4)

  • 19

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Disponibilidad de la EEPROM

    • Durante los ciclos internos de escritura de la EEPROM el dispositivo no se encuentraoperativo dentro del bus. En caso de que se inicie un ciclo de lectura o de escritura, la EEPROM respondería con un bit de “no reconocimiento”

    • Para determinar si la EEPROM todavía está ocupada con el ciclo interno, se puedenenviar los bytes iniciales para lanzar escrituras hasta que haya una respuesta con un bit de reconocimiento desde la EEPROM

    • Los ciclos de lectura no precisan de esperas ya que los datos están disponibles a medida que se van solicitando por parte del Maestro

  • 20

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Lectura

    Existen 3 tipos de operaciones de lectura:

    1.- Lectura en la dirección actual del puntero interno de la EEPROM

    Se trata de leer el byte apuntado en ese momento por el puntero, éste seva incrementando automáticamente con cada operación de lectura

    2.- Lectura aleatoria de un byte con una dirección dada Consiste en situar primero el puntero de direcciones de la EEPROM y realizarposteriormente una lectura

    3.- Lectura secuencial

    Similar a la lectura aleatoria pero se van leyendo de manera sucesiva losbytes que siguen mientras el dispositivo Maestro vaya introduciendo bitsde reconocimiento (ACK). Si el Maestro del bus decide finalizar las lecturasdebe introducir una secuencia de STOP

  • 21

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Lectura

    1.- Lectura de la dirección actual

    Se envía la dirección del dispositivo EEPROM como esclavo en el bus y se indica directamente que se desea realizar una lectura

    S 1 0 1 0 A2 A1 A0 1

    Start Dirección de la EEPROMcomo Esclavo en I2C R/W

    ACK b7 b6 b5 b4 b3 b2 b1 b0 ACK

    Byte contenido en ladirección actual

    SDA:P

    Stop

    Sin reconocimiento

    El puntero se incrementa de manera automática

    D12 D11 D10.....D0 b7 b6 b5 b4 b3 ...b0EEPROM de dir.

    1010A2A1A0

    Puntero interno (antes) SDA

    (D12 D11 D10.....D0)+1

    Puntero interno (después)

  • 22

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Lectura

    2.- Lectura de una dirección aleatoria

    Se envía la dirección del dispositivo EEPROM en el bus y se indica con R/W que seva a escribir la dirección interna de la EEPROM a la que se quiere acceder, de estemodo se sitúa el puntero. A continuación se vuelve a direccionar el dispositivo peroindicando ahora que se desea realizar una lectura

    S 1 0 1 0 A2 A1 A0 0

    Start Dirección de EEPROMcomo Esclavo en I2C R/W=0

    va aescribir dirección

    ACK 0 0 0 D12 D11 D10 D9 D8 ACK

    5 bits altos de dirección de la que se quiere leer

    SDA:

    D7 D6 D5 D4 D3 D2 D1 D0

    Los 8 bits bajos de dirección donde se va a escribir

    ACK S 1 0 1 0 A2 A1 A0 1

    Nuevo Start(Restart)

    Dirección de EEPROMcomo Esclavo en I2C

    R/W=1va a leerel byte

    ACK b7 b6 ... ACK P

    byte leído

    Sin ACKdel Maestro

    Stop

    b0

  • 23

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Operaciones de Lectura

    3.- Lectura secuencial

    Es idéntica a la lectura de una dirección aleatoria salvo que después de que la EEPROM envíe el primer dato, el Maestro genera un bit de reconocimiento (ACK) para que la EEPROM continúe enviando el byte siguiente y así sucesivamente hasta que el Maestrodetenga las lecturas mediante un “no ACK” y un bit de STOP

    S 1 0 1 0 A2 A1 A0 0

    Start Dirección de EEPROMcomo Esclavo en I2C R/W=0

    ACK 0 0 0 D12 D11 D10 D9 D8 ACK

    5 bits altos de dirección de la que se quiere leer

    SDA:

    D7 D6 D5 D4 D3 D2 D1 D0

    Los 8 bits bajos de dirección donde se va a escribir

    ACK S 1 0 1 0 A2 A1 A0 1

    Dirección de EEPROMcomo Esclavo en I2C

    ACK a7 a6 ... ACK

    1er byte leído

    a0

    b7 b6 ... ACK

    2º byte leído

    b0 b6 ... ACK

    último byte

    b0.... ACK b7

    R/W=1P

    Stop

  • 24

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Configuración de la EEPROM 24(L)C65

    A nivel interno de la EEPROM se pueden configurar dos aspectos:

    • Zona de Seguridad: memoria protegida ante escritura (desde 0 hasta 15 bloques contiguos de tamaño 4kbits)

    Se debe enviar a la EEPROM el número del bloque (0 a 15) a partir del cual se establece la protección y el número de bloques a proteger. Por defectode fábrica, el bloque a partir del cual se establece la protección es el 15 yel número de bloques protegidos 0.

    Si se pretende escribir en una zona protegida, no se escribirán los datos perono se produce ningún error ni se aborta la secuencia

    • Dónde se sitúa la zona de 4kbits (512 bytes) de alta duración y resistencia (10 millones de ciclos de borrado/escritura)

    Por defecto está definido como tal el bloque más alto de la memoria

    Tanto la zona de alta Durabilidad como la de Seguridadson configurables UNA SOLA VEZ en la EEPROM

  • 25

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Configuración de la EEPROM: Bloques Protegidos

    • Para indicar los bloques protegidos, el Maestro debe generar un comando de escritura pero colocando un “1” en el bit más significativo de la parte alta de la dirección interna de la EEPROM y en los bits 4 a 1 se indica el número del bloque de 4kbits de partida

    • Esto será reconocido por la EEPROM que generará un ACK, el 2º byte de direcciónno importa lo que contiene, finalmente en el 3er byte, el bit 7 debe estar a 1 (S/H) y el bit 6 a 0 (R: escribir Seguridad), los bits 3 a 0 indican el número de bloques a proteger. Tras este byte, el Maestro enviará un bit de STOP

    Dir.Esclavo

    Indicativo de acceso a seguridado alta durabilidad

    Bloque departida

    No importaNúmero debloques aproteger

    Escribir seguridad

    Acceso a Seguridad

  • 26

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Configuración de la EEPROM: Lectura de Bloques Protegidos

    • También resulta posible conocer mediante un comando especial de lectura, québloques de la EEPROM se encuentran protegidos

    • El formato es el indicado abajo, similar al de escritura salvo en el bit R, a partirde ese byte, la EEPROM envía el número del bloque inicial y número de bloques que tiene configurados como protegidos

    Lectura de la Seguridad Configurada:

    Leer seguridad

    Por Maestro

  • 27

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Configuración de la EEPROM: Bloque de alta durabilidad

    • Para indicar qué bloque será de alta durabilidad, se debe enviar un comando de escritura de configuración: bit más significativo de la dirección a 1, los bits 4 a 1indican el número de ese bloque, el siguiente byte es indiferente y en el tercerbyte se indica configuración de alta durabilidad (S/H=0) y escritura (R=0). El Maestro acaba con un bit de STOP

    Dir.Esclavo

    Indicativo de acceso a seguridado alta durabilidad

    Bloque dealta

    durabilidad

    No importa

    Acceso a altadurabilidad

    Escribir

  • 28

    Comunicación Serie: Ejemplos-Interface I2C

    Microcontroladores PIC ©ATE-Universidad de Oviedo

    Configuración de la EEPROM: Lectura de Posición del Bloque de alta durabilidad

    • También resulta posible leer de la EEPROM la ubicación del bloque de 4kbitsconfigurado como de alta durabilidad

    • La transferencia en la línea SDA del bus I2C será la siguiente:

    Por Maestro