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
|