Actualizado el 21 de Marzo del 2018 (Publicado el 16 de Octubre del 2017)
1.158 visualizaciones desde el 16 de Octubre del 2017
141,0 KB
8 paginas
Creado hace 16a (22/04/2009)
COMENTARIO TECNICO
Uso de la memoria FLASH de los MCUs HC908
para el Almacenamiento de Datos Temporales.
Por el Ing. Daniel Di Lella, Depto. Técnico EduDevices – www.edudevices.com.ar
Una pregunta común cuando se comienza a trabajar con la familia de los nuevos microcontroladores HC908
FLASH de Freescale o bién 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 - Volatil.
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 HC908 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 - Volatil .
Existen dos modos de "grabar" la memoria FLASH de los MCUs HC08, a saber:
1) 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.)
2) 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
dispositívo "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, FLASH_POD, EVAL08QTY,
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 utilizarce 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 HC908, 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 derivatívos de la flia. HC908 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 derivatívos de HC908 que poseean dichas rutinas (hoy en día, casi todos!!) .
Los derivatívos 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 Freescale :
- AN1831
- AN - HK - 32
- AN - HK - 33
- AN1770
Estas notas se pueden obtener del siguiente web site:
www.freescale.com
En el presente artículo, se explicará un programa ejemplo de cómo utilizar las rutinas incorporadas dentro de
la ROM monitor de algunos derivatívos de la flia. HC908.
El programa se basa en la nota de aplicación AN1831 "Using MC68HC908 On - Chip FLASH
Programming Routines" y en el mismo se utilizará un MC908JK3, pero es valido su uso para otros
dispositivos.
El Programa.
En el programa "demo3jl" , se efectua la "memorización" de datos temporales (variable Num_RAM
auto-incrementada en cada corrida del programa) en un espacio reservado de la memoria FLASH
(en este caso $EC00, pero podría ser cualquier dirección de la Flash), que en el comienzo posee $FF
(en blanco) en toda su extensión ( TABLA ).
Se utilizarán las sub - rutinas "PRGRNGE" y "ERARNGE" contenidas en la ROM.
También se incluyó un "artilugio" para extender la "vida útil" de la Flash (que en condiciones normales, osea
sin este artilugio, soporta unos 10.000 ciclos grab. / borr a -40 °C y más de 100.000 entre 20 y 30 °C) unas
64 veces más, ya que se irán desplazando los valores memorizados al próximo espacio "en blanco" disponible
en la TABLA reservada para los valores temporales y solo se efectuará el borrado de la "página" cuando se
complete la tabla (valores todos distintos de $FF).
Debe hacerse notar, los espacios reservados para las variables utilizadas por las sub - rutinas en ROM en la
RAM del MCU, para mayor detalle, se sugiere leer atentamente la nota AN1831 de Freescale.
******************************************************************************
* DEMO3JL.ASM - PROGRAMA DEMO NUMERO 3 - FLASH PROGRAMMING *
* SEMINARIO DE ACTUALIZACION MICROCONTROLADORES HC908 FLASH *
* www.EduDevices.com.ar *
* *
* SE USARAN LAS RUTINAS CONTENIDAS EN LA ROM "MONITOR" SEGUN AN1831 *
* DISPOSITIVOS JL3 / JK3 / JK1 *
******************************************************************************
***************
* EQUATES *
***************
BASE 10T ; BASE DECIMAL POR DEFAULT
INCLUDE 'jl3regs.inc' ; equates registros HC908JL3
RAM EQU $0080 ; Comienzo de la RAM para el JL3
DATSTRC EQU RAM+8 ; RAM para uso del "MONITOR ROM"
RAMUSER EQU DATSTRC+7 ; Comienzo de la RAM p/ usuario
DATAFLASH EQU $EC00 ; Comienzo de la FLASH para almacenar datos
RomStart EQU $ED00 ; Comienzo de la ROM/FLASH para el programa
VectorStart EQU $FFDE ; Comienzo tabla de vectores varios
GETBYTE EQU $FC00 ; Sub-Rutina en ROM TX/RX un Byte x port
RDVRRNG EQU $FC03 ; Sub-Rutina en ROM lectura y verif. de un rango
ERARNGE EQU $FC06 ; Sub-Rutina en ROM borrado row / mass Flash
PRGRNGE EQU $FC09 ; Sub-Rutina en ROM escritura datos en FLASH
DELNUS EQU $FC0C ; Sub-Rutina en ROM DELAY "N" microsegundos
***********************
* VARIABLES EN RAM *
**********************
ORG RAM ; Comienzo RAM para JK3
; reservada hasta DATSTRC P/ uso
; rutinas ROM prog/erase FLASH.
ORG DATSTRC ; RAM p/ uso en prog/erase flash
CTRLBYT RMB 1 ; BIT 6 -- MASS FLAG, 1 -- mass erase
CPUSPD RMB 1 ; CPU speed = 4 x Fop aprox.
LADDR RMB 2 ; Last
Comentarios de: Uso de la memoria FLASH de los MCUs HC908 para el Almacenamiento de Datos Temporales (0)
No hay comentarios