La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Clase 14: Memoria EEPROM.

Presentaciones similares


Presentación del tema: "Clase 14: Memoria EEPROM."— Transcripción de la presentación:

1 Clase 14: Memoria EEPROM

2 Antes de Comenzar ¿Qué vimos anteriormente? Protocolo I2C P1 ESCLAVO
MAESTRO ESCLAVO P2 MAESTRO ESCLAVO P2 MAESTRO ESCLAVO P3 ESCLAVO P3 SOLO ESCLAVO P4 SOLO ESCLAVO P4 ESCLAVO P4 ESCLAVO SCL SDA

3 Antes de Comenzar ¿Qué vimos anteriormente? Protocolo I2C DEVICE 1 …
DEVICE n VDD SCL SDA 10k-47k

4 Antes de Comenzar ¿Qué vimos anteriormente? Protocolo I2C
Trama de 8-Bits con ACK SCL SDA D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB LSB SCL SDA Condición de START SCL SDA Condición de STOP

5 Antes de Comenzar ¿Qué vimos anteriormente? Protocolo I2C SDA SCL A6
R/W ACK START MSB LSB Generado por Maestro Generado por Esclavo SDA SCL D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB LSB Generado por M/S STOP Generado por S/M

6 Agenda para la clase 1 Memorias EEPROM I2C Manipulación de este periférico además de sus características 2 Memorias internas Manipulación de EEPROM internas a través de l lenguaje C 3 Memorias internas Manipulación de EEPROM externas a través de l lenguaje C

7 ¿Puedo ser autodidacta?
Bibliografía para la clase Jonathan Valvano, Developing Embedded Software in C Using ICC11/ICC12/Hiware. C for Embedded Systems. Academia Freescale Semiconductor para Profesores 2004. Documentación sobre los diferentes periféricos: LCDs, Serial, I2C, TIMERs.

8 A continuación… Memorias EEPROM I2C Memorias EEPROM I2C
Memorias Internas Memorias Externas

9 Memoria EEPROM I2C Se tienen varias referencias:
24LC02 ó 24LC02B 24LC16 ó 24LC16B 24LC128 ó 24LC128B 24LC256 y muchas más. Las anteriores son memorias EEPROM de 2k, 16k, 128k y 256k bits. El tamaño en bytes será de 256 bytes, 2kbytes, 16kbytes y 32kbytes respectivamente. 2kbits 256 bytes 16kbits 2 kbytes 128kbits 16 kbytes

10 Memoria EEPROM I2C Direccionando la Memoria (Periférico).
Cada memoria tiene una dirección de 7 bits. Se envía después de la condición de START o RE-START. DA = Device Address. R/W: Indica hacia donde se dirige la siguiente trama después de enviar DA. M  S o S  M. SDA SCL DA6 DA5 DA4 DA3 DA2 DA1 DA0 R/W ACK START MSB LSB Generado por Maestro Generado por Esclavo

11 Memoria EEPROM I2C Direccionando la Memoria (Periférico).
Dirección registro: $BBAA BB: Bloque AA: Registro dentro del bloque. Direccionando la Memoria (Periférico). Normalmente, se compone de 4 bits de ID y 3 bits para: Selección de memoria física ( A2 A1 A0). Selección de memoria física y bloque ( A2 B1 B0). Selección de bloque en de la memoria ( B2 B1 B0). Toda memoria se compone de n bloques de 256 bytes. Para este caso 4 bloques. Esta memoria de 2kbytes tiene 8 bloques: 2kbytes/256 Bloque 0 256 BYTES $000 $0FF Bloque 4 256 BYTES $400 $4FF 24LC02 A0 A1 A2 GND VDD WP SCL SDA 24LC16 NC GND VDD WP SCL SDA 24LC08 NC A2 GND VDD WP SCL SDA Bloque 1 256 BYTES $100 $1FF Bloque 5 256 BYTES $500 $5FF Bloque 2 256 BYTES $200 $2FF Bloque 6 256 BYTES $600 $6FF Bloque 3 256 BYTES $300 $3FF Bloque 7 256 BYTES $700 $7FF

12 El valor AR7..AR0 escoge uno de los 256 registros.
Memoria EEPROM I2C Selección de un registro de la memoria. Para memorias de 256 bytes. Después de enviar dirección de periférico se envía dirección del registro AR donde se va a escribir. Previamente R/W debe haberse enviado como ‘0’. Byte 00 Byte 01 Byte 02 Byte FE Byte FF El valor AR7..AR0 escoge uno de los 256 registros. SDA SCL AR7 AR6 AR5 AR4 AR3 AR2 AR1 AR0 ACK MSB LSB Generado por Maestro Generado por Esclavo

13 Memoria EEPROM I2C Selección de un registro de la memoria.
Para memorias con más de 256 bytes. Conformación por bloques de memoria de 256 bytes. El bloque se puede seleccionar de dos formas. Utilizar parte de la dirección del dispositivo para selección bloq: DA6 DA5 DA4 DA3 Bx By Bz R/W. Solo para memorias entre 2 y 8 bloques. Trama de 8 bits, para seleccionar entre 1 y 256 bloques. Para memorias de más de 8 bloques.

14 Memoria EEPROM I2C Selección de un registro de la memoria.
24LC02, memoria de 256 Bytes. Trama A2 A1 A0 R/W. Luego se envía Dir. Registro. Luego se envía trama con dir. $00 a $FF. Luego se envía trama con dir. $00 a $FF 24LC02 A0 A1 A2 GND VDD WP SCL SDA 0V 5V 24LC02 A0 A1 A2 GND VDD WP SCL SDA 0V 5V Selección de memoria para lectura/escritura Selección de memoria para lectura/escritura

15 Memoria EEPROM I2C Selección de un registro de la memoria.
24LC04, memoria de 512 Bytes. Trama A2 A1 B0 R/W. Luego se envía Dir. Registro. Luego se envía trama con dir. $00 a $FF. Luego se envía trama con dir. $00 a $FF 24LC04 NC A1 A2 GND VDD WP SCL SDA 5V 0V 24LC04 NC A1 A2 GND VDD WP SCL SDA 5V Bloque 0 256 BYTES Bloque 0 256 BYTES Bloque 1 256 BYTES Bloque 1 256 BYTES Selección de memoria para lectura/escritura, bloque 1 Selección de memoria para lectura/escritura, bloque 0

16 Memoria EEPROM I2C Selección de un registro de la memoria. Bloque 0
Memoria 24LC08: 8 kbits = 1024 bytes. 4 Bloques. START A2 0 1 R/W: Bloque 1. Dirección a escribir en el bloque 1: $20. Bloque 1: 256 Bytes $1E $1F $20 $21 Bloque 0 256 BYTES Bloque 1 Bloque 2 Bloque 3 Bloque 1 256 BYTES

17 Memoria EEPROM I2C Selección de un registro de la memoria.
Dirección compuesta: Bloque + Registro Selección de un registro de la memoria. 24LC16, memoria de 2048 Bytes. Trama B2 B1 B0 R/W. Luego se envía Dir. Registro. Dir: $10E Luego se envía trama $0E. Dir: $ Luego se envía trama $20. $10E = $620 = Se escoge el registro $0E Se escoge el registro $20 24LC16 NC GND VDD WP SCL SDA Bloque 0 256 BYTES Bloque 4 256 BYTES Bloque Registro en el Bloque Bloque 1 256 BYTES Bloque 1 256 BYTES Bloque 5 256 BYTES Bloque 2 256 BYTES Bloque 6 256 BYTES Bloque 6 256 BYTES Bloque 3 256 BYTES Bloque 7 256 BYTES

18 Memoria EEPROM I2C Escribir un Byte. Múltiples datos.
Enviar trama de 8 bits de datos, finalizar con condición de STOP. Después de STOP, el dato se almacena en la FLASH. Múltiples datos. Tramas sucesivas de 8 bits, en la última se envía STOP. Los datos se almacenan después de STOP. SDA SCL D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB LSB Generado por Maestro STOP Generado por Esclavo

19 Memoria EEPROM I2C Múltiples datos.
La memoria se divide en páginas de 8, 16, 32 o más bytes. Para la escritura, la memoria incluye un búfer de acuerdo al tamaño de la página. 24LC04. 4kbits = 512 Bytes = 32 Pages/16 Bytes. La escritura en FLASH es muy lenta, se incluye un búfer RAM para guardar varios datos rápidamente. Page 0 Page 1 Page 2 Page 3 Page 4 Page 5 Page 31 Byte 32 Byte 33 Byte 46 Byte 47

20 La memoria no hace salto de página, ¿Qué se debe hacer?
Memoria EEPROM I2C Múltiples datos: Cuidado con las páginas!!! Suponer una memoria de 256 bytes con 32 páginas de 8 bytes. Página 1. Búfer y Flash. Registro 08. $03, $A3, $13, $FE Stop. Registro 14. $AB, $12, $07. Página Uno $03 Buf 0 $07 Byte 8 $07 $03 Buf 1 $A3 Byte 9 $A3 $13 Buf 2 $13 Byte 10 Buf 3 $FE Byte 11 $FE La memoria no hace salto de página, ¿Qué se debe hacer? Buf 4 Byte 12 Buf 5 Byte 13 $AB Buf 6 Byte 14 $AB Buf 7 $12 Byte 15 $12 Búfer RAM Memoria Flash

21 Memoria EEPROM I2C Múltiples datos: Solución al problema anterior
Suponer una memoria de 256 bytes con 32 páginas de 8 bytes. Página 1. Búfer y Flash. Registro 08. $03, $A3, $13, $FE Stop. Registro 14. $AB, $12 Registro 16. $07 Página Uno Página Dos Buf 0 $03 $07 $03 Byte 16 Byte 8 $07 Buf 1 $A3 $A3 Byte 17 Byte 9 Buf 2 $13 $13 Byte 10 Byte 18 Buf 3 $FE Byte 11 $FE Byte 19 Buf 4 Byte 20 Byte 12 Buf 5 Byte 21 Byte 13 $AB Buf 6 Byte 22 Byte 14 $AB $12 Buf 7 Byte 23 Byte 15 $12 Búfer RAM Memoria Flash

22 Memoria EEPROM I2C Escritura de $45 (24LC02 = 1 0 1 0 A2 A1 A0) en $3E
SDA SCL 1 A2 A1 A0 ACK START SDA SCL 1 ACK Dirección del periférico SDA SCL Dirección del registro $3E 1 ACK STOP Dato $45 a escribir en $3E

23 Memoria EEPROM I2C Escritura de $72 (24LC16 = B2 B1 B0) en $23A SDA SCL Dato $72 a escribir en registro $3A del bloque $2 1 ACK START SDA SCL 1 ACK Dirección del periférico, usando bloque $2 SDA SCL Dirección del registro $3A dentro del bloque $2 1 ACK STOP

24 Memoria EEPROM I2C Escribir en $95 (24LC256 = A2 A1 A0) en $1A12 SDA SCL 1 A2 A1 A0 ACK Parte baja de dirección, es decir, registro $12 START SDA SCL 1 ACK Dato $95 a escribir en registro $12 del bloque $1A Dirección del periférico SDA SCL 1 ACK Parte alta de dirección, es decir, bloque $1A SDA SCL 1 ACK STOP

25 Memoria EEPROM I2C Para lectura.
Se inicia un proceso de escritura, enviando solamente la dirección de memoria. De acuerdo a los casos anteriores. Cuando se reciba el ACK de la dirección, se genera un Re-Start con R/W en ‘1’ y se empiezan a leer tramas. Las tramas serán enviadas mientras el maestro genere ACK. Para el último dato, no se genera ACK.

26 A continuación… Memorias EEPROM I2C Memorias Internas
Memorias Externas

27 Memoria EEPROM interna
Registro de la memoria PIC16F887. Tipo 24LC02, memoria de 256 Bytes. Dirección Inicial 0x2100 Dirección Final? 24LC02 A0 A1 A2 GND VDD WP SCL SDA 0V 5V

28 Escritura Escritura de datos en la memoria Interna
WRITE _EEPROM(address, dato); address es un entero de 8 o 16 bits, que especifica la posición relativa de la EEPROM interna donde se almacenará el dato dato es el entero de 8 bits que se almacenará en la EEPROM

29 Lectura Función básica de lectura de datos dato=READ_EEPROM(address);
dato es un entero de 8 bits leído desde la EEPROM interna. address es un entero de 8 o 16 bits, que especifica la posición relativa de la EEPROM interna donde se leerá el dato

30 Almacenamiento Escritura desde la compilación #ROM address = {datos}
address especifica la dirección inicial de la EEPROM interna donde se almacenarán los datos (comienza desde la 0x2100) datos son el conjunto de valores que se almacenarán en la EEPROM. Manipulación igual al de los arreglo.

31 Ejemplos Desarrollar un programa que (1):
Guardar y leer datos en las 10 primeras posiciones de memoria de la EEPROM interna Desarrollar un programa que (2): Mediante un teclado matricial se puede seleccionar entre escribir o leer. El usuario selecciona que desea escribir en las 9 posiciones iniciales de la EEPROM interna. Almacenar en la EEPROM interna y desde el tiempo de compilación el nombre del programador. Se puede leer cual información leer.

32 A continuación… Memorias EEPROM I2C Memorias Internas
Memorias Externas Memorias Externas

33 Biblioteca Incluir la biblioteca correspondiente:
#include <memoria_EEPROM> Memoria_EEPROM corresponde a la memoria externa que seleccionemos: 2401.c 2402.c 2404.c 2408.c 2416.c 2421.c 2432.c 2464.c 2465.c

34 Configuración Inicialización: init_ext_eeprom();
Permite configurar la comunicación I2C, es decir, selecciona modo Master, los puertos de comunicación I2C, tamaño de la memoria, entre otros.

35 Escritura Escritura de datos en la memoria Interna
WRITE _EXT_EEPROM(address, dato); address es un entero de 8 o 16 bits, que especifica la posición relativa de la EEPROM interna donde se almacenará el dato dato es el entero de 8 bits que se almacenará en la EEPROM

36 Lectura Función básica de lectura de datos dato=READ_EXT_EEPROM(address); dato es un entero de 8 bits leído desde la EEPROM interna. address es un entero de 8 o 16 bits, que especifica la posición relativa de la EEPROM interna donde se leerá el dato

37 Ejemplos Desarrollar un programa que (1):
Guardar y leer datos en las 10 primeras posiciones de memoria de la EEPROM interna

38 Fin de la clase 14


Descargar ppt "Clase 14: Memoria EEPROM."

Presentaciones similares


Anuncios Google