Vous êtes sur la page 1sur 7

GRABACIONES DE LAS MEMORIAS FLASH Y EEPROM.

Xavier Aldemar Jumbo Sarango


e-mail: xavieraldemarjumbo@hotmail.com RESUMEN: En el presente artculo se mostraran los
conceptos fundamentales acerca de lo que es la grabacin de las memorias FLASH y EEPROM, con la finalidad de obtener los conocimientos necesarios para aplicar esta clase de dispositivos. La grabacin de las memorias FLASH y EEPROM es una parte fundamental de los dsPIC30F ya que son dispositivos electrnicos avanzados y programables. Esta constituida por dos zonas de memoria la FLASH y la EEPROM. PALABRAS CLAVE: AGU, Bit-reverse, direccionamiento modular, Registros, Buffer. 1. INTRODUCCIN: La memoria de los dsPICF30 se divide en dos grandes bloques: la memoria de datos y a memoria de programa. La memoria de programa, a su vez, tambin encuentra dividida de dios partes: Espacio de memoria reservado al usuario: contiene los vectores de reset e interrupcin, memoria de programa del usuario(FLASH) y la memoria no voltil de datos (EEPROM). Espacio de memoria dedicado a la configuracin: contiene los registros de configuracin y de identificacin que caracterizan el funcionamiento del dispositivo. En un dsPICF30 la memoria de programa ocupa desde la posicin 0x000000 hasta la 0xFFFFFE de la memoria, abarca 4Mposicion de 24 bits cada una. La posicin 0x001000-0x017FFE corresponde a la memoria del programa de usuario (FLASH) y la posicin 0x7FF0000x7FFFFE se destinan a la memoria de datos (EEPROM). LA MEMORIA FLASH contiene el cdigo del programa de usuario que ejecuta el dsPIC, mientras que la EEPROM sirve para guardar datos que deben ser <<memorizados>> por el dsPIC.

Fig. 1 Mapa del espacio de memoria de programa

1.2 INSTUCCIONES DE TABLA.


Las instrucciones de tabla sirven para realizar operaciones de borrado y escritura de datos de tamao byte o palabra segn el modo de trabajo en la memoria FALSH y la memoria de datos EEPROM. Existen cuatro instrucciones de tabla diferentes TBLRDL: Lectura de parte baja TBLWTL: Escritura de la parte baja. TBLRDH: Lectura de la parte alta. TBLWTH: Escritura de la parte alta.

; Inicializacin del puntero de direccionamiento Se debe tener en cuenta que la posiciones de memoria de programa tienen un tamao de 24bits por lo que cada posicin de memoria de programa ocupa dos direcciones (de 16 bits). As, los 16 bits de mas peso constituyen la parte alta de la instruccin y los 16 bits de menos peso la parte baja. MOV #tblpage(PROG_ADDR),W0 ; W0 Valor de tabla MOV W0, TBLPAG ; w0= TBLPAG MOV #tbloffset (PROG_ADDR),W0; W0() pala baja) dire ; Lectura de la posicin direccionada TBLRDH(W0), W3 ; W3 byte alto<23:13> TBLRDL(W0), W4 ; W4 palabra baja<15:0> 1.2.2. MANEJO DE LAS INSTRUCCIONES DE ESCRITURA DE TABLA Para poder programar la escritura mediante tabla se deber seguir tres pasos: 1. Primero, al igual que para la lectura , habr que inicializar el puntero de direccionamiento para obtener la direccin de memoria en la que se va a escribir. Despus, se debe cargar los registros W de mantenimiento con los datos que se quieren escribir. Por lo ultimo los registros de mantenimiento en la direccin de memoria indicada por el puntero de direccionamiento.

2. Fig. 2 Direccin alta y baja en las operaciones de Tabla En la siguiente figura se muestra como se direcciona la memoria de programa mediante un puntero de tabla. La direccin de una posicin de la memoria de programa se compone de 24bits , los 8 bits de mas peso son los 8bits del registro TBLPAG, mientras que los 16 bits de menos peso corresponde con la direccin efectiva. 3.

Ejemplo 1.2 Escritura de un posicin de la memoria de programa mediante instrucciones de tabla en modo byte. ; Primero inicializacin del puntero de direccionamiento MOV # tblpage(PROG_ADDR), W0 ;W0 valor tab de pag MOV W0, TBLAPG ; W0= TBLPAG MOV # tbloffset(PROG-ADDR), W0 ; W0(pala baja)direc ;Segundo: carga de datos a escribir en registros de trabajo

Fig. 3 Puntero de Tabla que apunta a la memoria de programa 1.2.1 MANEJO DE LAS INSTUCCIONES DE LECTURA DE TABLA Para programar la lectura mediante instrucciones de tabla se sigue dos pasos: Primero se inicializa el puntero d direccionamiento para obtener la direccion de la memoria de programa que se quiere leer, usando los registros TBLPAG y W. Despues se lee la posicion de memoria direcionada. Ejemplo 1.1 Lectura de un posicin de la memoria de programa mediante instrucciones de tabla en modos palabra.

MOV # LOW-BYTE, W2 MOV # MID_BYTE, W3 MOV # HIGH_BYTE, W4

; W2= byte<7-0> ; W3=byte<15-8> ; W4)=byte<23-16>

Tercero: Escritura de los bytes almacenados. TBLWTL.B W2 (W0++) TBLWTL.B W3, (W0++) TBLWTH.B W4,(W0 ; Escritura del byte bajo ; Escritura del byte medio ; Escritura del byte bajo

1.3 REGISTRO DE CONTROL


Las operaciones de programacin de las memorias FLASH y EEPROM se manejan mediante tres registros de control de memoria no voltil.

1.3.1

REGISTRO NVMCOM

El registro NVCOM es el registro que controla las operaciones de escritura/borrado en las memorias FLASH Y EEPROM

Fig. 5 Direccionamiento de la memoria mediante los registros NVM Fig. 4 Registro de control NVCOM Bit 15 (WR): Bit d control de escritura (programacin o borrado). 1= Indica el comienzo de un ciclo de borrado/ escritura de la EEPROM o de la FLASH 0= indica que el ciclo de escritura/ borrado se ha completado. Bit 14(WREN): Bit de bloque de escritura 1= Habilita la operacin de escritura/ borrado 0= Deshabilita la operacin de escritura/ borrado. El dispositivo pone automticamente este bit a <0> cuando termina la operacin de escritura/borrado Bit 13(WRERR): Bit de error de flag en FLASH. 1= La operacin de escritura ha finalizado antes de lo previsto, por lo que a se ha producido algn error. 0= La operacin de escritura ha finalizado satisfactoriamente. Bit 12-8(RESERVADO): El cdigo escribir ceros en estas posiciones. de usuario debe

1.3.3

REGISTRO NVMKEY

Es un registro de solo escritura que se usa para evitar escritura/ borrado accidentales en las memorias FLASH y EEPROM. Para que se pueda realizar un operacin de escritura/ borrado, se deben seguir los siguientes pasos. 1. 2. 3. Escribir 0x55 a NVMKEY Escribir 0xAA a NVMKEY Ejecutar dos instrucciones NOP

Despus de realizar esta secuencia, estar permitida la escritura en el registro NVMCOM y por lo tanto se podr realizar la operacin de escritura/ borrado. El cdigo del siguiente ejemplo muestra como programar esta secuencia de desbloqueo. Bit 15-8: No implementado, se leen como <<0>> Bit 7-0: NVMKEY<7-0>; Bits de registro de seguridad (solo escritura)

Bit 7-0(PROGOP<7:0>): Son los bits de operacin. Aqu se introduce el cdigo de la operacin que se quiere realizar.

1.3.2

REGISTR DE DIRECCION NVM.

Existen dos registros de direccin NVM: el registro NVMADRU y el registro NVMADR: En este par de registros se carga los 24 bits de la direccin de memoria FLASH o EEPROM donde se va a realizar la operacin de escritura/ borrado: en el registro NVMADRU se carga los 8 bits de mas peso de la direccin y en le registro NVMADR los 16 bits de menos peso de la misma

Fig. 6 Estructura del registro NVMKEY Ejemplo 1.3 PUSH MOV IOR MOV MOV MOV MOV BSET NOP NOP POP SR #0Xx00E0, W0 SR #0x55, W0 W0, NVMKEY #0xAA, W0 W0, NVMKEY NVMKEY, #WR SR

2)

1.4 GRABACION DE LA MEMORIA FASH


Existen dos mtodos para grabar la memoria de programa del usuario:

Autograbacion en tiempo de ejecucin(RTSP):

Se implementa en el software del usuario y se aplica de forma similar para la programacin de la FLASH y EEPROM

Programa

en serie (ICSP): Precisa de una conexin para transferir los datos al dispositivo y es mucho mas rpida que RSTP 1.4.1 METODO DE GRABACION RTSP La memoria de programacin FLASH del dsPIC30F esta organizada en lneas y paneles. Cada lnea consta de 32 instrucciones (96 bytes) y cada suele estar formado por 128 lneas. No obstante, el tamao del panel puede variar dependiendo del modelo de dsPIC30F, cada uno de estos paneles tiene asociado unos registros de escritura en los que se pueden cargar hasta 32 instrucciones. El mtodo RTSP consiste bsicamente en configurar un puntero de tabla que apunte a la direccin de memoria que se quiere modificar y luego cargar los registros de escritura mediante instrucciones de escritura de tabla. Este mtodo permite al usuario borrar 32 instrucciones (96 bytes) o escribir 4 instrucciones (12 bytes) al mismo tiempo en memoria de programa. GRABACION DE LA MEMORIA DE PROGARAMA Antes de comenzar a borra una lnea de la memoria FLASH, esta se debe haber sido almacenada en la memoria RAM como <<imagen >> de datos y para poder en una lnea, esta debe haber sido borrado previamente. La grabacin de la memoria FLASH sigue los siguientes pasos: 1) Leer una lnea de la FLASH (32 palabras) y almacena en la RAM como <<imagen >> de datos

Actualizar la imagen de datos RAM con los nuevos datos de la memoria FLASH. 3) Borrar una lnea de la memoria FLASH a) Configurar el registro NVMCOM b) cargar le direccin de la lnea a ser borrada en los registros NVMADRU y NVMADR. c) Deshabilitar las interrupciones. d) Escribir la secuencia de seguridad en NVMKEY. e) Poner el bit WR del registro NVCOM A <<1>> para que comience el ciclo de borrado f) Habilita las interrupciones. g) Borrar la lnea de la flash 4) Cargar en los registros de escritura de la FLASH 32 palabras desde la RAM. Estos son los datos que hay que grabar en una lnea de la memoria FLASH 5) Escribir una lnea de la memoria FLASH a) Configurar el registro NVMCOM. b) Deshabilitar las interrupciones. c) Escribir la secuencia de seguridad en NVMKEY. d) Poner a <<1>> el bit WR del registro NVCOM para que comience el ciclo de escritura. e) Rehabilitar las interrupciones. 6) Repetir los pasos tantas veces como lneas de la memoria FLASH se quieran grabar. Ejemplo 1.4 Borrado de una lnea de la memoria FLASH mediante RTSP. ; Configurar el registro NVMCOM MOV #0X4041, W0 MOV W0,NVMCOM ; Configurar el puntero de direccin de lnea a ser borrado. MOV #tblpage(PROG_ADDR),W0 MOV W0,NVMADRU MOV #tbloffset(PROG_ADDR),W0 MOV W0, NVMADR ; Deshabilitar las interrupciones, si estn habilitadas PUSH SR MOV #0x00E0, W0 IOR SR ; Escribir la secuencia de seguridad en el registro NVMKEY MOV #0x55, W0 MOV W0,NVMKEY MOV #0xAA, W0 MOV W0, NVMKEY ; Comenzar la operacin de borrado BSET NVMCOM, #WR NOP NOP Ejemplo 1.5 Escritura de una lnea de la memoria FLASH mediante RTSP ; configurar el registro NVMCON MOV #0X4001, W1

MOV W0, NVMCON ; Cargar Los cuatro Registros de escritura de memoria de programa CALL Cargar_Registros-Escritura; ; Deshabilitar las PUSH MOV IOR interrupciones, si estn habilitadas SR #0x00E0, W0 SR

Ventajas que ofrece el mtodo de grabacin ICSP Reduce el coste de actualizar el cdigo de un equipo. Muchos sistemas requieren calibracin en las ltimas etapas de programacin y testeo. El hecho de que una vez programado el circuito pueda ser testeado y probado sin tener que cambiar se de sitio. El modo de grabacin ICSP, se habilita poniendo en nivel alto las patitas PGC Y PGD y una vez hecho esto, se aplica la alimentacin positiva a la patita MCRL#/Vpp

; Escribir la secuencia de seguridad MOV #0x55, W0 MOV W0, NVMKEY MOV #0xAA, W0 MOV W0, NVMKEY ; Comenzar la operacin de programacin BSET NVMCON, #WR ; Insertar dos NOP de3spues de la programacin NOP NOP ; Reactivar las interrupciones, si es necesario POP SR El segmento de cdigo mostrado en el ejemplo 16.18 debe ser repetido 8 veces para poder programar una lnea entera (32instrucciones) de la memoria FLASH. GRABACION DEL REGISTRO CONFIGURACION MEDIANTE RTSP DE

El procedimiento para escribir el registro de configuracin mediante RTSP es muy similar al procedimiento de escritura en ala memoria FLASH. La diferencia es que el registro de configuracin tiene un tamao de 16 bits, solo sern necesario las instrucciones de escritura TBLWTL. 1.4.2 METODO DE GRABACION ICSP

Fig. 7 Habilitacin del modo de grabacin ICSP Para deshabilitar el modo ICSPM nicamente hay que pasar al modo STDP y para salir definitivamente bastara con quitar la alimentacin o con pasar MCLR# a nivel bajo.

El mtodo de grabacin ICSP es un tipo de grabacin ISP. La programacin ISP cosiste en granar el programa ene le dispositivo una vez que haya sido montado en la tarjeta. El mtodo consiste ICSP emplea solo dos patitas de E/S del dispositivo para introducir en el los datos y los impulsos de reloj, u una ves que se ha realizado la grabacin, pueden ser utilizados como patitas de E/S normales. Las patitas de los datos a gravar se llama PGD y la de los impulsos de reloj PGC. Cuando se usa este mtodo de grabacin, el dsPIC requiere tres patitas para la alimentacin. Vss la que soporta la tierra Vdd la tensin de alimentacin general positiva Vpp voltaje para grabacin de la memoria FLASH. La patita Vpp esta multiplexado con MCLR#.

1.5 GRABACIN EEPROM

DE

LA

MEMORIA

La memoria EEPROM de datos esta mapeada ene le respecto de la memoria de programa y esta organizada en palabras de 16 bits pudiendo alcanzar un tamao de 2k palabras (4KB), segn el modelo de dsPIC30F. Los procedimientos para la escritura y borrado e la EEPROM son similares a los del mtodo RTSP de la memoria FLASH, pero en la EEPROM el acceso a los datos es mas rpido y a diferencia de lo que ocurra con la memoria FLASH, la CPU no se detiene durante una operacin de escritura/ borrado de la EEPROM. Las operaciones que se pueden realizar en la memoria EPROM son: Borrar una palabra

Borrar una lnea (16 palabras) Escribir una palabra Escribir una lnea (16 palabras)

MOV MOV

W0, TBLPAG #tbloffset(CONFIG_ADDR),W0

El programa del usuario es responsable de esperar a que la operacin de escritura/ borrado se complete. Para ello, el fin de las operaciones de escritura/ borrado en la EEPROM se puede detectar mediante uno de estos tres mtodos: Explorar el bit WR por software. Explorar el bit NVMF por software. Habilitar las interrupciones NVM.

; Configurar NCMCON para borrar una palabra de la EEPROM d datos. MOV #0x 4044, W0 MOV W0, NVMCON ; Deshabilitar las interrupciones mientras la secuencia calve se escribe. PUSH SR MOV #0x00E0, W0 IOR SR ; Escribir la secuencia de seguridad MOV #0x55, W0 MOV W0, NVMKEY MOV #0Xaa, W0 MOV W0, NVMKEY ; Comenzar la operacin de borrado BSET NVCON, #WR ; Reactivar las interrupciones POP SR 1.5.2 BORRADO Y ESCRITURA DE UNA LINEA EN LA EEPROM. Al igual que ocurra en el mtodo RTSP de la memoria FLASH, antes de borrar una lnea de datos de la memoria EEPROM deber cargarse en memoria RAM como <<imagen>> de datos. Y si se va a escribir una lnea, primero hay que cargar los datos que se van a escribir en los registros de escritura de la EEPROM. Despus hay que configurar el registro NVMCON adecuadamente para borrar/escribir una lnea de la memoria EEPROM. Los registros TABPAG y NVMADR, deben cargarse con la direccin de la EEPROM de la lnea que se va a ser borrada. Para poder habilitar la escritura del registro NVMCON debe escribirse en el registro NVMKEY la secuencia de desbloqueo. 1. Leer una lnea de la EEPROM de datos y almacenar en la RAM como <<imagen>>. 2. Actualizar la imagen de datos con el nuevo dato 3. Cargar los registros TBLPAG y NVMADR. 4. Configurar el registro NVMCON para borra una lnea de la EEPROM. 5. Borra el bit estado WR. Comienza el ciclo de borrado. 6. Escribir la secuencia de seguridad de NVMKEY. 7. Establecer el bit WR. Comienza el ciclo de borrado. 8. Obtener el bit WR o el de espera para la interrupcin NVM. El algoritmo de escritura de una (1 lnea) de datos en los registros de escritura de la EEPROM.

Nota: si se obtiene resultados inesperados, el usuario deber leer la EEPROM mientras este en marcha la operacin de escritura o borrado. 1.5.1 BORRADO Y PALABRA DE UNA PALABRA EN LA EEPROM Para borra una palabra de la EEPROM, lo primero que hay que hacer es cargar los registros TBLPAG y NVMADR con la direccin de la EEPROM a borrar, mientras que para escribir una lnea El algoritmo de borrado de una palabra en al EEPROM es el siguiente: 1. 2. 3. 4. 5. 6. Cargar la direccin de la palabra a borra en los registros TBLPAG y NVMADR. Configurar el registro NVMCON para borrar una palabra de la EEPROM Borra el bit estado NVMIF y habilitar NVM (opcional). Escribir la secuencia de desbloquo en el registro NVMKEY. Poner a <<1>> El bit WR. Comienza el ciclo de borrado. Detectar el fin del ciclo de borrado.

El algoritmo del escritura de una palabra en al EEPROM en el siguiente: 1. 2. 3. 4. 5. 6. 7. Cargar el registro TBLPAG. Cargar la palabra de datos en el registro escritura de la EEPROM. Configurar el registro NVMCON para escribir una palabra en al EEPROM. Borra el bit estado NVMIF y habilitar la interrupcin NVM (opcional). Escribir la secuencia de desbloqueo en el registro NVMKEY. Activar el bit WR. Comienza el ciclo d escritura. Detectar el fin del ciclo de escritura.

Ejemplo 1.6 Borrado de una palabra de la EEPROM. ; Configurar el puntero para apuntar a la posicin a borra MOV #tblpage (CONFIG_ADDR), W0

1.
2. 3. 4. 5. 6. 7. 8.

Escribir las 16 palabras (1 lnea) de datos en los registros de escritura de la EEPROM. Cargar el registro TBLPAG. Configurar el registro NVMCON para programar una lnea de la EEPROM. Borrar el bit estado NVMIF y habilita la interrupcin NVM (opcional). Escribir la secuencia de seguridad de NVMKEY. Establecer el bit WR. Comienza el ciclo de programacin. Obtener el bit WR o el espera para al interrupcionNVM.

10. CONCLUSIONES
La grabacin de las memorias FLASH y EEPROM, es una parte dundamental de las dsPIC30F.

11. RECOMENDACIONES
Siempre es recomendable tener mas informacin de cualquier dispositivo que queramos manejar o manipular para as poder conocer al mximo los funcionamientos que en este caso son los dsPIC30F.

12. REFERENCIAS

Ejemplo 1.7 Borrado de una lnea de la memoria EEPROM. ; Configurar el puntero de una lnea de la EEPROM a borra . MOV #tblpage(CONFIG_ADDR), W0 MOV W0, TBLPAG MOV #tbloffset(CONFIG_ADDR), W0 ; Deshabilitar las interrupciones mientras la secuencia clave se escribe. PUSH SR MOV #0x00E0, W0 IOR SR ; Escribir la secuencia de seguridad. MOV #0x55, W0 MOV W0, NVMKEY MOV #0XAA, W0 MOV W0, NVMKEY ; comenzar las interrupciones de borrado. BSET NVMCON, #WR ; Reactivar las interrupciones POP SR 1.5.3 LECTURA DE LA MEMORIA EEPROM. Para leer la memoria EEPROM se utiliza la instruccin TBLDR, que permite leer una palabra de la EEPROM. En el ejemplo siguiente se almacena en W0 la direccin de la EEPROM y el resultado de la lectura de esta direccin es disponible en el registro W4. Ejemplo 1.8 ; configurar el puntero apuntando a la memoria EEPROM MOV # tblapage(EE-ADDR), W0 MOV W0, TBLPAG MOV # tbloffset(EE_ADDR), W0 ; Leer el dato EEPROM TBLRDL (W0), W4

Microcontroladores avanzados dsPIC, controladores digitales de seales arquitectura programacin y aplicaciones, capitulo 16, la memoria de datos.