MENU
   Inicio
   Cursos
   Microbótica
   Productos
   Tutoriales
 
 
 
Web Site MCU de Motorola
 
 
Agosto 2001
Uso de la Memoria FLASH de los MCUs HC08 para el Almacenamiento de Datos Temporales

Una pregunta común cuando se comienza a trabajar con la familia de los nuevos microcontroladores HC08 FLASH de Motorola o bien cuando se está por decidir la Migración a uno de estos interesantes MCUs, es si es posible utilizar la memoria Flash de los mismos no solo para "grabar" programas en ella (memoria de programa) sino además para "almacenar" datos temporales (variables temporales, seteos, tablas transitorias, etc.) como si se tratara de una memoria "EEPROM" o similar NO - Volátil.

En los MCUs OTP ROM (One Time Programming ROM) esto era SOLO posible con el agregado de una memoria "externa" del tipo serial de 8 pines como las 93Cxx..
La memoria FLASH de 2da generación que poseen los MCUs HC08 es ideal para reemplazar ventajosamente el uso de memorias EEPROMs externas por los siguientes motivos:

  • Al no utilizarse un chip externo de memoria, se dispone de mayor cantidad de Pines I/O para usos generales y NO para el control de la memoria.
  • Ahorro en el costo del chip externo de memoria y en el espacio de PCB a utilizar.
  • Flexibilidad en el tamaño de la memoria a utilizar (se utiliza solo lo necesario, dejando el resto para la memoria del programa).
  • Circuitos adicionales integrados en el MCU como el LVI (Low Voltage Inhibit), necesarios para asegurar un funcionamiento confiable en sistemas con memoria No - Volátil .

Existen dos modos de "grabar" la memoria FLASH de los MCUs HC08, a saber:

En el "Modo Monitor" , que es un modo muy particular que poseen estos MCUs, puede grabarse la memoria flash de estos, además de emplearse este modo para el "debugging" en tiempo real de programas. Este modo permite la actualización del programa contenido en la memoria Flash aún cuando el chip se encuentre soldado a la placa del usuario. Esta modalidad se la conoce con el nombre de In - Circuit Programming (I.C.P.) En el "Modo Usuario" , que es el modo de funcionamiento normal del MCU, (en el cuál se correrá el programa implementado por el usuario), es posible alterar el contenido de la memoria flash, sin necesidad de tensiones o uso de pines especiales para tal fin.

El primero de los modos, es ideal cuando se requiere grabar un programa (aplicativo) en la memoria de un dispositivo "virgen" (de fábrica o borrado totalmente) durante la producción o desarrollo y durante posteriores "actualizaciones" (revisiones) del software originalmente implementado en el mismo.

Para este modo, existen herramientas de software y hardware (PROG08SZ, E-FLASH08, EVAL08xx, etc.) que facilitan la Programación En - Circuito (I.C.P.) o la programación de la totalidad del chip para las operaciones anteriormente descriptas.

En el segundo de los modos, y punto fundamental de nuestro artículo, puede utilizarse la Flash para almacenar datos "temporales" en memoria No - Volátil, con similares prestaciones a los chips EEPROM comunmente utilizados para tal fín.

Si tenemos en cuenta la estructura interna de la memoria FLASH de los HC08, la misma NO permite su alteración por medio de código escrito en su propia memoria, dicho de otra forma, no es posible alterar la flash con código "corriendo" en la misma flash. Esto que en principio parecería un "inconveniente" , garantiza (junto con otros recursos disponibles) la inalterabilidad de los datos ante programas del tipo "gusano" (que se "comen" código) frecuentes por errores en el programa u otras circunstancias.

Entonces, para alterar (grabar o Borrar) la flash, se dispone de dos (2) métodos, en el modo usuario:

Ejecución de Código desde RAM :

Con este método, es posible grabar o borrar la memoria flash, con código "corriendo" desde memoria RAM del MCU, para ello el programa de usuario implementado en la flash, deberá incluir una sub-rutina que realice una "migración" (copia) de líneas de código desde la flash (estas líneas contendrán el código necesario para modificar la memoria flash) hacia la RAM. Una vez copiado el código, y cuando se quiera borrar o grabar la flash con algún valor, el programa del usuario deberá llamar al código en RAM como si fuera una o varias sub-rutinas, con la particularidad que su ubicación no es la usual, sino espacio RAM.

Este método es común de usar en derivativos de la flia. HC08 con memorias RAM superiores a los 128 Bytes, por ejemplo los 908GP32, 908MR32/24/16/8, 908SR12,Etc. La ventaja principal, radica en la facilidad que dispone el usuario para mejorar o modificar las sub-rutinas encargadas del borrado o grabación de la flash. La desventaja es que se ocupa temporalmente espacio de RAM, por lo que hay que tener cuidado de ello.

Ejecución de Código desde ROM (ROM "Monitor") :

Con este método, es posible grabar o borrar la memoria flash, con código "corriendo" desde memoria ROM del MCU, para ello el programa de usuario implementado en la flash, deberá invocar por medio de un salto a sub-rutina, la dirección de comienzo de cada una de las sub-rutinas incluidas en la ROM de los distintos derivativos de HC08 que posean dichas rutinas.

Los derivativos que poseen estas rutinas en ROM son, por ejemplo, 908JL3, 908JK3, 908JK1, 908GR8, 908KX8 / KX2, 908JB8, etc

En estos MCUs, la memoria RAM es del orden de los 128 Bytes o similar, por lo que no es aconsejable ejecutar código desde esta, por el poco espacio disponible para tal fin.

Para mayor detalle de funcionamiento de cada uno de estos métodos, se sugiere al lector consultar las siguientes notas de aplicación de Motorola :

  • AN1831
  • AN - HK - 32
  • AN - HK - 33
  • AN1770

Estas notas se pueden obtener de los siguientes web site: www.mcu.motsps.com


Buenos Aires Robotics Society - Todos los derechos reservados.
e-mail: jdhios@uolsinectis.com.ar

Buenos Aires Robotics Society
Una división de RadeSys
Buenos Aires - Argentina