Universidad Técnica Federico Santa María Departamento de Electrónica Seminario de Computadores I: Diseño con microcontroladores Profesor Leopoldo Silva Memoria Flash Microcontrolador MSP430F149 Grupo 1 Tamara Ramírez Juan Espoz Francisco Villa Luis Ehlen Josey Avilés Jaime Díaz Contenidos Introducción …………………………………………………….. 3 Antecesores de la flash ………………………………………... 4 ¿Que es una Memoria Flash? ………………………………….. 5 Características de la Memoria Flash y diferencias …………. 6 respecto a otros tipos de memoria Flash del microcontrolador MSP430F149 ……………………. 7 Registros para configurar y acceder al ………………………. 9 controlador de memoria Flash Ciclo de borrado ………………………………………………... 12 Escribiendo la memoria Flash …………………………………. 15 Resultados en pruebas de laboratorio ………………………… 21 Seminario de Computadores I: Diseño con microcontroladores - 3- Introducción La memoria flash es un elemento que ha revolucionado la forma de manejar la información. Una diminuta pastilla permite transportar una gran cantidad de información sin mayores inconvenientes y a un bajo costo. En qué consiste esta tecnología y cuáles son las ventajas que posee respecto a otros dispositivos de almacenamiento, son los tópicos expuestos en las primeras hojas de este apunte. Sin embargo, el contenido del mismo se centra en la utilización de la memoria flash del microcontrolador MSP430F149, el cual será utilizado en el transcurso del Seminario de Computadores I. En este sentido, este apunte busca ser una guía práctica y resumida que permita al lector entender el funcionamiento de esta unidad de memoria y cómo hacer uso de ella. Esperamos el objetivo sea cumplido y desde ya agradecemos la confianza que el lector deposita en este equipo de trabajo al utilizar este apunte. Atentamente, Tamara Ramírez Jaime Díaz Francisco Villa Luis Ehlen Josey Avilés Juan Espoz Seminario de Computadores I: Diseño con microcontroladores - 4- Antecesores de la flash Básicamente, una memoria es un dispositivo electrónico cuyo objetivo consiste en almacenar información – programas, datos, resultados –. Debido a que el almacenamiento de información está asociado a la naturaleza de la misma, es posible encontrar una gran variedad de memorias que cumplan con el requisito que exige un objetivo en particular. Las memorias más comunes que se encuentran en el mercado son las siguientes: ROM (Read Only Memory): básicamente las ROM se basan en una matriz de diodos unidos, cuyas uniones pueden ser destruidas por sobre tensión, logrando así ser grabadas. Esto hace que en este tipo de memoria se pueda almacenar información sólo una vez (esta viene programada de antemano con cierta aplicación, no permitiendo al usuario realizar modificaciones), además la información contenida en ella no se pierde debido a interrupciones de corriente (memoria no volátil). Esta es una memoria muy utilizada para almacenar configuraciones de sistema en computadores. PROM (Programmable Read Only Memory) : memoria de sólo lectura, la cual puede ser programada una sola vez utilizando un dispositivo especialmente diseñado para estos efectos. Al igual que la anterior esta es una memoria no volátil. EPROM (Erasable Programmable Read Only Memory): memoria de sólo lectura programable y borrable, de alta densidad de bits por espacio físico. Para ser borrada dispone de una ventana de cuarzo a través de la cual se expone a un rayo ultravioleta que se encarga de restaurar el estado original de la memoria. EEPROM (Erasable Electrically Programmable Read Only Memory): memoria de sólo lectura programable y eléctricamente borrable, la cual retiene la información sin necesidad de estar energizada. Presenta una baja confiabilidad, son de alto costo y presentan una baja densidad de bits, se puede usar como una RAM no volátil pero es más lenta que ésta. RAM (Random Access Memory): memoria de acceso aleatorio o directo de lectura y escritura, en donde el sistema en que está instalada almacena los datos que está utilizando en el momento presente. La diferencia entre la RAM y otros tipos de memoria de almacenamiento, como los discos duros, es que ésta es mucho más rápida y es volátil, es decir, su información se elimina una vez que es desenergizada. Luego de este pequeño recordatorio se explicarán los detalles de la memoria Flash. Seminario de Computadores I: Diseño con microcontroladores - 5- ¿Que es una Memoria Flash? Una memoria flash es un tipo de chip EEPROM (Electrically Erasable Programmable Read Only Memory ), la cual posee una grilla de filas y columnas, en cuyas intersecciones se encuentra una celda. Esta celda está formada por dos transistores unidos a través de una delgada capa de óxido, tal como se describe en la siguiente figura 1. Uno de los transistores es llamado floating gate (compuerta flotante) y el otro control gate (compuerta de control). La única conexión entre la columna (Bitline) y la fila (wordline) en cada intersección de la grilla es a través de estos dos transistores. Mientras esta conexión tome lugar, la celda tendrá un valor “1”, de lo contrario el valor asignado es “0”. Para que la celda pueda tomar un valor 0, es necesaria la ocurrencia de un proceso llamado FoulerNordheim tunneling (tunelización de FoulerNordheim). La tunelización permite Figura1. Detalle de la celda de una memoria flash. alterar la presencia de electrones en la compuerta flotante. Al aplicar una carga eléctrica, usualmente de 10 a 13 volts, a la compuerta flotante, se produce un flujo de cargas desde la columna hacia una tierra. Al traspasar la compuerta flotante, las cargas provocan que esta compuerta se comporte como un cañón de electrones, los cuales son dirigidos hacia la compuerta de control. La capa de óxido se encarga de retener los electrones al otro lado de ella, de manera que adquiere una carga negativa. Estos electrones cargados negativamente constituyen una barrera entre las dos compuertas. Un dispositivo especial, denominado sensor de celda se encarga de monitorear el nivel de cargas que fluye a través de la compuerta flotante. Si el flujo en la compuerta es superior al 50 % de la carga, la celda tiene un valor 1. Si es inferior, ella toma el valor 0. Seminario de Computadores I: Diseño con microcontroladores - 6- Características de la Memoria Flash y diferencias respecto a otros tipos de memoria • La Flash es una memoria no volátil, es decir, la información almacenada en ella no se pierde luego de que ésta es desenergizada. En cambio una memoria RAM pierde la información ante cualquier interrupción de corriente. • La Flash es un tipo de memoria que posee la capacidad de ser regrabada eléctricamente cuantas veces se desee, contrastando con las memorias ROM y PROM que pueden ser grabadas sólo una vez, y la EPROM cuya información puede ser grabada cuantas veces se desee, pero utilizando luz ultravioleta, implicando así un desgaste mayor de este tipo de memoria. • Al igual que una memoria RAM, una flash posee la cualidad de almacenar una gran cantidad de información en poco espacio físico, a diferencia de las memorias EEPROM. • La cantidad de potencia que consume una memoria flash es bastante baja en relación a otros tipos de memoria existentes, tales como las memorias RAM (SRAM y DRAM). • Son memorias en general bastante rápidas, no tan veloces como una memoria RAM pero si más que una EEPROM. • Los precios de estas memorias son bastante económicos, una memoria Flash es menos onerosa que una EEPROM y una RAM (una memoria SRAM es bastante cara y sólo es utilizada en aplicaciones especiales, tales como memoria Caché.) • Otra diferencia de una memoria flash con una EEPROM convencional, radica en que la primera incluye un circuito cableado interiormente que permite realizar el proceso de borrado en forma parcializada. Se puede borrar la flash en sectores, denominados bloques, o en su totalidad. Una EEPROM es borrada punto a punto. Seminario de Computadores I: Diseño con microcontroladores - 7- Flash del microcontrolador MSP430F149 El microcontrolador MSP430F149 posee 60 KB + 256 B de memoria flash, la cual se distribuye como se indica en la tabla 1. Tabla 1. Distribución de memoria del MSP430F149 La memoria flash del microcontrolador incluye: - Un generador de voltaje interno programable. Bit, byte o palabras programables. Operación de baja potencia. Borrado a nivel de segmentos y borrado masivo. Segmentación de la memoria flash. La memoria flash esta particionada en segmentos. Bits, bytes o palabras pueden escribirse pero el segmento es la medida más pequeña que se puede borrar. La memoria está dividida en una memoria principal y memoria de información, la diferencia entre ellas está en el tamaño de los segmentos y su direccionamiento, la memoria de información tiene dos segmentos de 128-byte y la memoria main tiene dos o más segmentos de 512 bytes. Esto se ilustra en la figura 2. Seminario de Computadores I: Diseño con microcontroladores - 8- Figura 2. Particionamiento de la memoria flash en el MSP430F149. Operación de la memoria flash. El modo por defecto de la memoria es el modo de lectura, en este modo el cronómetro y el generador de voltaje están en off y la memoria opera idénticamente igual a una ROM. La memoria flash es un sistema programable sin la necesidad de un voltaje externo adicional. La CPU puede programar su propia memoria flash, sus modos de borrado o escritura se pueden seleccionar con los bit BLKWRT, WRT, MERAS, ERASE. Generador de cronometraje en la flash Las operaciones de borrado y escritura son controladas por el generador de cronometraje el cual está en el rango de 257 a 476 kHz. Este cronometraje puede ser originado desde las entradas ACLI, SMCLK o MCLK. El reloj también puede ser dividido usando los bits FNx para reunir los requerimientos de frecuencia. Seminario de Computadores I: Diseño con microcontroladores - 9- Registros para configurar y acceder al controlador de memoria Flash Para controlar la memoria Flash, se utilizan los registros FCTLx (donde x = 1, 2, 3), los cuales corresponden a registros de escritura y lectura, de 16 bits y protegidos por password. Los primeros 8 bits de estos registros, es decir, el primer byte, son utilizados para controlar la memoria Flash (como por ejemplo, seleccionar el modo de escritura o el modo de borrado, entre otros) y los 8 últimos bits, es decir, el segundo byte, es utilizado para almacenar el password para poder leer o escribir en el registro. El password de lectura corresponde a 096h y el password de escritura corresponde a 0A5h. Registros: FCTL1 15 14 7 BLKWRT 6 WRT 13 12 11 10 FRKEY, leída como 096h FWKEY, debe ser escrita como 0A5h 5 4 3 Reservado Reservado Reservado 2 MERAS 9 1 ERASE 8 0 Reservado BLKWRT Modo de escritura en bloque, el cual trabaja junto con WRT. Es automáticamente puesto a cero cuando EMEX es seteado. WRT Habilita la escritura, para cualquier modo. Es automáticamente puesto a cero cuando EMEX es seteado. MERAS Este bit es usado junto con ERASE para seleccionar el modo de borrado. ERASE Este bit es usado junto con MERAS para seleccionar el modo de borrado. RESERVADO Son bits reservados, que siempre son leídos como 0. FCTL2 15 7 FSSELx 14 13 6 5 12 11 10 FRKEYx, leída como 096h Debe ser escrita como 0A5h 4 3 2 FNx 9 8 1 0 Seminario de Computadores I: Diseño con microcontroladores - 10 FSSELx FNx Selecciona la fuente de reloj para el controlador de la Flash Divide el reloj del controlador de la Flash. El valor de división es FNx + 1. FCTL3 15 14 7 6 Reservado Reservado RESERVADO EMEX LOCK WAIT ACCVIFG KEYV BUSY 13 12 11 10 FRKEYx, leída como 096h Debe ser escrita como 0A5h 5 EMEX 4 LOCK 3 WAIT 2 ACCVIFG 9 1 KEYV 8 0 BUSY Son bits reservados, que siempre son leídos como 0. Bit de salida de emergencia. Este bit desbloquea la memoria Flash para escribir o borrar. Puede ser seteado durante la escritura de un Byte/word o durante una operación de borrado y la operación puede ser completada satisfactoriamente. En el modo de bloqueo de escritura si el bit LOCK es seteado mientras BLKWRT = WAIT = 1, entonces BLKWRT y WAIT son reseteados y el modo termina normalmente. Indica a la memoria Flash que está siendo escrita. 0 La memoria Flash no está lista para la siguiente escritura al byte/word. 1 La memoria Flash está lista para la siguiente escritura al byte/word. Bandera de interrupción para una violación de acceso. 0 No hay interrupciones pendientes. 1 Hay interrupciones pendientes. En este bit se registra la violación que se produce al escribir un passw ord Incorrecto y se genera un PUC (power-up clear), el cual debe ser reseteado por software. 0 El password FCTLx está escrito correctamente. 1 El password FCTLx está escrito incorrectamente. Este bit indica el estado del temporizador. 0 No está ocupado. 1 Ocupado. Controlador de interrupciones de la memoria Flash El controlador de la memoria Flash posee dos fuentes de interrupciones: KEYV, que se activa cuando se escribe un password incorrecto en los registros FTCLx; y ACCVIFG, que se activa cuando una violación de acceso ocurre, la cual es habilitada en el registro IE1. Estos dos bits son activados en el registro FTCL3, descrito anteriormente. Seminario de Computadores I: Diseño con microcontroladores - 11 IE1 7 ACCVIE 0 1 6 5 ACCVIE 4 3 2 1 0 Bit que habilita la interrupción de acceso a la memoria Flash, el cual activa la interrupción ACCVIFG. Debido a que los otros bits pueden ser usados por otros módulos, es recomendado setear o limpiar este bit usando las instrucciones BIS.C o BIC.B, en lugar de las instrucciones MOV.B o CLR.B. Interrupción no habilitada. Interrupción habilitada. Borrado de la memoria Flash Para borrar la Flash todos los bits son llevados a 1 y la menor cantidad que puede ser borrada es un segmento. Existen 3 modos de borrado, seleccionados con los bits ERASE y MERAS MERAS 0 1 ERASE 1 0 1 1 Modo de borrado Borrar segmento Borrado masivo (todos los segmentos de la memoria principal) Borra toda la memoria Flash Cada ciclo de borrado es iniciado por una escritura falsa de la memoria, lo que activa el temporizador interno y la operación de borrado. Para hacer esto se debe escribir una dirección que esté dentro del segmento que se desea borrar. El bit BUSY se activa inmediatamente después de la escritura falsa y se mantiene durante el ciclo de borrado. BUSY, MERAS y ERASE son puestos a 0 cuando el ciclo termina. El temporizador del ciclo de borrado de un segmento no depende de la cantidad de memoria presente, son equivalentes para todos los MSP430. Seminario de Computadores I: Diseño con microcontroladores - 12 - Ciclo de borrado El ciclo de borrado se describe temporalmente como en la figura 3. Figura 3. Diagrama temporal de borrado. Las interrupciones deben ser deshabilitadas antes del ciclo de borrado y luego deben ser habilitadas. Iniciando el borrado desde la memoria Flash Cualquier ciclo de borrado puede ser inicializado desde la memoria flash o desde la RAM. Cuando el borrado de un segmento es iniciado desde la Flash todos los tiempos son controlados por el controlador de memoria Flash y la CPU es congelada durante el ciclo de borrado, luego esta continua con la ejecución del código siguiente a la escritura falsa. Cuando se inicia un ciclo de borrado desde la memoria Flash es posible borrar algo del código que debe ser ejecutado después del ciclo de borrado, si esto ocurre los resultados son impredecibles. Deshabilitar las interrupciones y el watchdog Configurar el controlador de la Flash Escritura falsa Setear LOCK=1, re -habilitar interrupciones y watchdog Figura 4. Diagrama de flujo de borrado desde la flash. Seminario de Computadores I: Diseño con microcontroladores - 13 - ; Borrado de un segmento desde la Flash. ; 514 kHz < SMCLK < 952 kHz ; Se asume ACCVIE = NMIIE = OFIE = 0. MOV DINT #WDTPW+WDTHOLD,&WDTCTL ; Deshabilitar WDT ; Deshabilitar interrupciones MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV MOV CLR MOV ... EINT #FWKEY,&FCTL3 #FWKEY+ERASE,&FCTL1 #0FC10h #FWKEY+LOCK,&FCTL3 ; ; ; ; ; ; Limpiar LOCK Habilitar borrado de segmento Escritura falsa, borrado de S1 Setear LOCK Re-habilitar WDT si es necesario Habilitar interrupciones Iniciando borrado desde la RAM Cuando un ciclo de borrado es iniciado desde la RAM la CPU continua ejecutando el código siguiente desde la RAM, el bit BUSY debe ser encuestado para determinar el fin del ciclo de borrado. Si ocurre un acceso a la Flash mientras BUSY=1 se produce una violación de acceso y el flag ACCVIFG se setea y el borrado resulta impredecible. Figura 5. Diagrama de flujo de borrado desde la RAM. Seminario de Computadores I: Diseño con microcontroladores - 14 ; Borrado de un segmento desde la RAM. 514 kHz < SMCLK < 952 kHz ; Se asume ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; Deshabilitar WDT DINT ; Deshabilitar interrupciones L1 BIT #BUSY,&FCTL3 ; Test BUSY JNZ L1 ; Loop mientras busy MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV #FWKEY,&FCTL3 ; Limpiar LOCK MOV #FWKEY+ERASE,&FCTL1 ; Habilitar borrado CLR &0FC10h ; Escritura falsa, borrado de S1 L2 BIT #BUSY,&FCTL3 ; Test BUSY JNZ L2 ; Loop mientras busy MOV #FWKEY+LOCK,&FCTL3 ; Setear LOCK ... ; Re-habilitar WDT? EINT ; Habilitar interrupciones Seminario de Computadores I: Diseño con microcontroladores - 15 - Escribiendo la memoria Flash Los modos de escritura se detallan en la tabla siguiente: BLKWRT 0 1 WRT 1 1 Modo de escritura Escritura de Byte/word Escritura por bloques Ambos modos son semejantes, pero el modo de escritura por bloques es aproximadamente dos veces más rápido que el modo de escritura Byte/word. El bit BUSY es seteado durante la operación de escritura y reseteado cuando la operación se completa. Si la operación de escritura es iniciada desde la RAM, la CPU no debería acceder a la Flash mientras BUSY = 1, si esto ocurre se produce una violación de acceso. Escritura Byte/word. Esta operación puede ser iniciada desde la memoria Flash o desde la RAM. Cuando es iniciada desde la Flash, la temporización es controlada por su controlador interno y la CPU es congelada hasta que la operación termina. Figura 6. Diagrama temporal de la escritura Byte/word Cuando la operación de escritura es ejecutada desde la RAM, la CPU continúa ejecutando el código desde la RAM. El bit BUSY debe estar en 0 para que la CPU pueda acceder a la Flash, de otro modo ocurre una violación de acceso. Seminario de Computadores I: Diseño con microcontroladores - 16 - Figura 7. Diagrama de flujo de escritura Byte/word iniciada desde la Flash. ; Escritura Byte/word desde la Flash. ; Se asume que 0FF1Eh ha sido borrado. ; 514 kHz < SMCLK < 952 kHz ; Se asume ACCVIE = NMIIE = OFIE = 0. MOV DINT #WDTPW+WDTHOLD,&WDTCTL ; Deshabilitar WDT ; Deshabilitar interrupciones MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV MOV MOV MOV MOV ... EINT #FWKEY,&FCTL3 #FWKEY+WRT+WRT,&FCTL1 #0123h,&0FF1Eh #FWKEY,&FCTL1 #FWKEY+LOCK,&FCTL3 ; ; ; ; ; ; ; Limpiar LOCK Habilitar escritura Byte/word 0123h -> 0FF1Eh Hecho. Limpiar WRT Setear LOCK Re-habilitar WDT si es necesario Habilitar interrupciones Seminario de Computadores I: Diseño con microcontroladores - 17 Deshabilitar interrupciones y watchdog si BUSY=1 Setear el controlador de la Flash con WRT=1 Escribir byte o word si BUSY=1 Setear WRT=0, LOCK=1, re-habilitar interrupciones y watchdog Figura 8. Diagrama de flujo de escritura Byte/word iniciada desde la RAM. ; Escritura Byte/word desde la RAM. 514 ; Se asume que 0FF1Eh ha sido borrado ; Se asume ACCVIE = NMIIE = OFIE = 0. MOV #WDTPW+WDTHOLD,&WDTCTL ; DINT ; L1 BIT #BUSY,&FCTL3 ; JNZ L1 ; MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; MOV #FWKEY,&FCTL3 ; MOV #FWKEY+WRT,&FCTL1 ; MOV #0123h,&0FF1Eh ; L2 BIT #BUSY,&FCTL3 ; JNZ L2 ; MOV #FWKEY,&FCTL1 ; MOV #FWKEY+LOCK,&FCTL3 ; ... ; EINT ; kHz < SMCLK < 952 kHz Deshabilitar WDT Deshabilitar interrupciones Test BUSY Loop mientras busy SMCLK/2 Limpiar LOCK Habilitar escritura 0123h –> 0FF1Eh Test BUSY Loop mientras busy Limpiar WRT Setear LOCK Re-habilitar WDT? Habilitar interrupciones Seminario de Computadores I: Diseño con microcontroladores - 18 Escritura por bloque La escritura por bloque puede ser usada para acelerar el proceso de escritura cuando es necesario escribir varios byte/word secuencialmente. Un bloque contiene 64 Bytes, iniciándose en 0xx00h, 0xx40h, 0xx80h ó 0xxC0h y terminando en 0xx3Fh, 0xx7Fh, 0xxBFh ó 0xxFFh. Una escritura por bloque no puede ser iniciada desde la memoria Flash. El bit BUSY permanece en 1 durante toda la operación. El bit WAIT debe ser revisado entre la escritura de cada byte/word en el bloque. Cuando se escriben bloques sucesivos, el bit BLKWRT debe ser limpiado después de la escritura del bloque correspondiente. BLKWRT debe ser seteado para la escritura del próximo bloque, después de un tiempo de recuperación requerido por la Flash, dado por t(end). Figura 9. Diagrama temporal de escritura por bloque. Seminario de Computadores I: Diseño con microcontroladores - 19 - Deshabilitar interrupciones y watchdog si BUSY=1 Setear el controlador de la Flash Setear BLKWRT=WRT=1 Escribir byte o word si WAIT=0? no Block border? Setear BLKWRT=0 si BUSY=1? si Otro block? Setear WRT=0, LOCK=1, re-habilitar interrupciones y watchdog Figura 10. Diagrama de flujo de escritura por bloque. Seminario de Computadores I: Diseño con microcontroladores - 20 - ; Escritura de un bloque comenzando en 0F000h. ; Debe ser ejecutado desde la RAM, se asume que la Flash ha sido borrada. ; 514 kHz < SMCLK < 952 kHz ; Se asume ACCVIE = NMIIE = OFIE = 0. MOV #32,R5 ; Usado como contador de escritura MOV #0F000h,R6 ; Puntero de escritura L1 L2 L3 L4 MOV DINT BIT JNZ #WDTPW+WDTHOLD,&WDTCTL MOV #FWKEY+FSSEL1+FN0,&FCTL2 ; SMCLK/2 MOV MOV MOV BIT JZ INCD DEC JNZ MOV BIT JNZ MOV ... EINT #FWKEY,&FCTL3 #FWKEY+BLKWRT+WRT,&FCTL1 Write_Value,0(R6) #WAIT,&FCTL3 L3 R6 R5 L2 #FWKEY,&FCTL1 #BUSY,&FCTL3 L4 #FWKEY+LOCK,&FCTL3 #BUSY,&FCTL3 L1 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Deshabilitar WDT Deshabilitar interrupciones Test BUSY Loop mientras busy Limpiar LOCK Habilitar escritura por bloque Escribir dirección Test WAIT Loop mientras WAIT=0 Apuntar a la próxima palabra Decrementar contador de escritura Fin del bloque? Limpiar WRT,BLKWRT Test BUSY Loop mientras busy Setear LOCK Re-habilitar WDT si es necesario Habilitar interrupciones Seminario de Computadores I: Diseño con microcontroladores - 21 - Resultados en pruebas de Laboratorio Para comprobar en la práctica lo descrito teóricamente en este apunte, se realizaron algunas pruebas de escritura y borrado en la flash del MSP430F149 disponible en el kit de desarrollo EasyWEB de OLIMEX. Se utilizó rutinas en C y assembler para escribir y borrar en flash. Haciendo uso del emulador proporcionado por el software IAR se comprobó el funcionamiento de las rutinas, a partir de lo cual se desprenden las siguientes observaciones: - La etapa de configuración de los registros para definir los parámetros de escritura (modos de lectura/escritura, tipo de borrado, claves de escritura/lectura, entre otros) responde fielmente a lo indicado en el apunte. - Para el caso del borrado de la flash se observó diferencias entre el simulador IAR y el proceso realizado realmente en el microcontrolador. La primera diferencia radica en que al borrar en el simulador, el sector de memoria borrado aparece con valor 0. Esto difiere de la realidad, pues el borrado de una memoria flash corresponde a un estado 1 en cada bit. La segunda diferencia, más importante que la anterior, corresponde al proceso de borrado en segmento en la memoria flash. Para realizar este proceso, se configuran los registros correspondientes, indicando que se realizará un borrado de segmento y luego se procede a realizar la escritura falsa que permite identificar el segmento a borrar. En el simulador, este proceso no funciona correctamente, pues en lugar de borrar el segmento, el simulador considera la escritura falsa como verdadera, y escribe el dato entregado en la dirección de asignada sin realizar un borrado del segmento. Sin embargo, con el emulador se comprobó que el proceso de borrado de segmento funciona correctamente, usando la escritura falsa. - Otro detalle interesante se refiere a las posibilidades de escritura que posee la flash. En el caso de código C, el compilador traduce una instrucción de escritura como word (16 bits) por defecto. Sin embargo, se corroboró que la unidad mínima de escritura posible corresponde a un byte. Esto quiere decir que es posible escribir 8 bits, direccionando al Byte. Para realizar esta operación se utilizó el comando assembler move.b, el cual permite mover sólo un byte de un registro a la dirección de memoria deseada.