logo Estudio del dsPIC

 

Grabación de Memorias FLASH y EEPROM

 

Para grabar las memorias FLASH y EEPROM de los DSC existen dos métodos:

1º) Autograbación en tiempo de ejecución (RTSP).

Esta técnica la desarrolla el usuario mediante las instrucciones de Tabla que transfieren información entre la memoria de datos y la del programa. Con las 4 instrucciones de Tabla (TBLRDL, TBLWTL, TBLRDH y TBLWTH) descritas anteriormente se leen o escriben los 16 bits de la palabra baja o los bits <23:16> de la palabra alta. La dirección efectiva de la posición de la memoria de programa se forma con los 8 bits del registro TBLPAG y los 16 bits  de un registro Wn, que contiene la dirección efectiva de la memoria de datos (EA).

También es posible grabar y leer la memoria de programa con datos de tamaño byte dentro de cada una de sus palabras.

Para la grabación/borrado de múltiples datos de la FLASH y la EPROM se utilizan cuatro registros de control NVM (Memoria No Volátil).

 

Registros NVM

 

NVMCON: Registro de control NVM --> BITS DEL REGISTRO NVMCON.

 

Bit 15 WR: Bit de control de escritura (borrado o grabación)
Bit 14 WREN: Permiso de escritura (borrado o grabación)
Bit 13 WRERR: Flag de error de escritura en FLASH
Bits 12-8 Reservado
Bits 7-2 PROGOP<7:2>: Código de operación de grabación

 

El registro NVMCON selecciona si la operación se realizará sobre la FLASH o la EEPROM y las características principales de la misma.

 

VALORES DE NVMCON PARA OPERACIONES DE GRABACIÓN/BORRADO
TIPO MEMORIA OPERACIÓN TAMAÑO DATOS VALOR NVMCON
FLASH BORRADO 1 FILA (32 INSTRUCCIONES) 0X4041
GRABACIÓN 4 INSTRUCCIONES 0X4001
EEPROM BORRADO 1 PALABRA 0X4044
16 PALABRAS 0X4045
GRABACIÓN 1 PALABRA 0X4004
16 PALABRAS 0X4005
RESTO CONFIGURACIÓN ESCRITURA 1 REGISTRO CONFIGURACIÓN 0X4008

 

NVMKEY: Registro clave NVM. Solo puede ser escrito y su misión es evitar grabaciones o borrados accidentales. Se utiliza para guardar unos valores claves o de seguridad, que se indican a continuación:

NVMADR: Registro de dirección NVM. Contiene los 16 bits de menos peso de la dirección efectiva (EA<15:0>) de la posición a grabar o borrar. Este registro lo manejan automáticamente las instrucciones de Tabla y el usuario puede modificarlo cuando lo desee. Indica la posición de memoria en la que se quiere grabar o borrar.

NVMADRU: Byte (alto) de ampliación del registro NVMADR.

Las interrupciones deberán ser deshabilitadas durante la secuencia anterior. Tras esta secuencia, la escritura estará permitida al registro NVMCON durante un ciclo de instrucción.

Con la técnica RTSP se pueden borrar 32 instrucciones o 96 bytes simultáneamente y se pueden grabar 4 instrucciones (12 bytes) a la vez.

Las técnicas usadas para la grabación de la EEPROM de datos y la FLASH son similares cuando se usa el método RTSP. La única diferencia destacable entre ambos tipos de memoria es la cantidad de datos o información que puede ser grabado o leído en cada ciclo de grabación/borrado. Para ver ejemplos de código en ensamblador (ASM) para memorias EEPROM y FLASH hay que consultar el manual del dsPIC30F6010.

 

Ejemplo en código C de la Lectura, Grabación y Borrado de una memoria EEPROM

#include "p30f6010.h"

int secuenciagrabacion()
// Esta función escribe la secuencia de grabación
// tanto para borrado como para grabación
{
TBLPAG = 0x7F;      //Apuntamos la página
WREG0 = 0xFC00;      //Apuntamos el desplazamiento en la página
NVMKEY = 0x55;      //Movemos a NVKEY la secuencia 55
NVMKEY = 0xAA;      //Movemos a NVMKEY la secuencia AA
NVMCONbits.WR= 0x1;      //Activamos el bit WR de NVMCON
asm("NOP");      //Esperamos 2 nops
asm("NOP");
return 0;
}


//*************************
//      Programa principal
//*************************

int main(void)
{
int a = 0;      //Variable auxiliar
TBLPAG = 0x7F;      //Apuntamos a la página de la dirección a leer
WREG0 = 0xFC00;
asm("TBLRDL [W0],W4");      //Leemos el dato en WREG4
WREG4 = WREG4 + 1;      //Sumamos 1 a WREG4
NVMCON = 0x4044;      //Configuramos NVMCON para borrar EEPROM
a = secuenciagrabacion();      //Ejecutamos secuencia borrado/grabación
while(NVMCONbits.WR == 1);      //Esperamos al bit WR de NVMCON que sea 0
TBLPAG = 0x7F;      //Apuntamos a la página de la dirección a leer
WREG0 = 0xFC00;      //Apuntamos el desplazamiento en la página
asm("TBLWTL W4, [W0]");      //Escribimos en el registro el contenido de W4
NVMCON = 0x4004;      //Configuramos NVMCON para grabado EEPROM
a = secuenciagrabacion();      //Ejecutamos secuencia borrado/grabación
while(NVMCONbits.WR == 1);      //Esperamos al bit WR de NVMCON que sea 0
return 0;
}

 

2º) Grabación serie en circuito (ICSP™).

Se trata de un protocolo registrado por Microchip destinado a la grabación en serie de dispositivos programables conectados en el circuito de aplicación, simplemente utilizando dos líneas, una para el reloj y otra para transferir los datos serie a grabar mediante el interfaz SPI y un software integral de tipo “bootloader” cuyas especificaciones técnicas pueden encontrarse en las páginas del fabricante en internet: www.microchip.com

Este sistema de grabación se utiliza con gran efectividad en todo tipo de microcontroladores y dispositivos programables, además de los DSC.

Todos los modelos de microcontroladores dsPIC se programan usando ICSP o LVP (LVP es "Low Voltage Programming”). Así mismo, todos los programadores modernos de dsPIC utilizan este método para programarlos, aunque esto no sea aparente en algunos programadores que cuentan por ejemplo con un socket ZIF, como el mostrado en la figura.

 

Zocalo ZIF

 

En el caso de los programadores con socket ZIF, El método de programación sigue siendo ICSP (Programación En Circuito), sólo que en este caso todas las señales ICSP están ruteadas al socket ZIF; sin embargo debido que el dsPIC debe ser removido del circuito para ubicarlo en el socket, se contradice el propósito inicial de la idea, la cual es justamente no remover el dsPIC de su circuito. Para los principiantes el uso del socket ZIF es más conveniente; sin embargo para quien debe realizar un trabajo de largo aliento, con muchas iteraciones de re-programación, programar el dsPIC sin tener que removerlo cada vez de su circuito es mucho más conveniente.

En la siguiente fotografía vemos un ejemplo de un sistema siendo programado "en circuito":

 

ICSP

 

Señales y Conexiones en el Cabezal ICSP:

Las señales provistas al dsPIC por el dispositivo programador para realizar la escritura, lectura y verificación del programa son las siguientes:

El siguiente diagrama de circuito muestra un método muy usual para la implementación de ICSP:

Circuito ICPS

 

Como se puede observar, el método ICSP utiliza terminales del microcontrolador que también pueden cumplir potencialmente otras funciones.

 

Circuito de Aislamiento:

Para que la programación se lleve a cabo de manera correcta y segura, es necesario aislar el circuito de aplicación del circuito de programación. El circuito ejemplo mostrado en la figura anterior nos muestra de qué manera se puede lograr esto:

Es importante recalcar que, si bien este típico ejemplo de circuito de aislamiento funciona para la mayoría de los casos, no es una receta segura para todos, y en algunos casos podría requerirse ligeras modificaciones o incluso un planteamiento diferente para lograr dicho aislamiento.


Depuración con ICSP:

Cabe notar también que ICSP, aparte de proveer el método para la escritura, lectura y verificación del código de programa en el microcontrolador, provee también métodos para la depuración y la emulación "en circuito"; capacidades que vienen adicionalmente implementadas en ciertos dispositivos conocidos como programadores/depuradores/emuladores. Ambas capacidades adicionales complementan grandemente la "caja de herramientas" de todo desarrollador de sistemas microcontrolados.


Programación Con Bajo Voltaje (LVP):

La Programación Con Bajo Voltaje LVP (Low Voltaje Programming) es una opción adicional de programación presente en los dsPIC  la cual permite obviar VPP (12-14 VDC) y utilizar bajo voltaje. Para ello los dsPIC cuentan con otro terminal denominado PGM a través del cual el dispositivo programador toma control del dsPIC para su programación. Los detalles de este método salen del alcance de este apartado, simplemente añadiremos que, si se va a usar ICSP con VPP (12-14 VDC), es recomendable deshabilitar la Programación Con Bajo Voltaje (LVP) en el microcontrolador (mediante la escritura del bit correspondiente en la palabra de configuración (registro CONFIG) del microcontrolador, esto para evitar desprogramaciones accidentales del dsPIC.

 

Ir arriba
Ir Arriba