Voy a hablar sobre la programación de la memoria flash, pero una gran cantidad de material será similar a las EEPROM (ROM programable borrable eléctricamente), ya que la memoria flash se derivó de las EEPROM a mediados de la década de 1980. Como se describe a continuación, desde un punto de vista físico, el estado predeterminado es 1. Pero lo más importante, voy a explicar por qué no es un estado predeterminado - se puede no sólo arbitrariamente programa en la parte superior de lo que ya está programado de la última vez.
El flash NOR casi siempre se elige para el programa flash ya que la interfaz es la más adecuada para colocar los datos dentro del mapa de memoria del microcontrolador: la dirección completa y los buses de datos imitan la RAM y permiten el acceso aleatorio a cualquier ubicación. Los datos se pueden leer una palabra a la vez, donde una palabra se define como el ancho de datos del microcontrolador, generalmente de 8, 16 o 32 bits. NAND flash, por otro lado, se desarrolló para reemplazar los discos duros y funciona de forma secuencial.
Sin embargo, la programación se vuelve un poco más complicada. Como ya se mencionó, el estado predeterminado para flash NOR y otras memorias no volátiles como flash NAND, EEPROM e incluso EPROM es un 1 lógico. No puede programar 1 en estos dispositivos, solo puede programar 0. Entonces, por ejemplo, si tiene un byte que contiene 0x0123 y desea cambiarlo a 0x3210, no puede hacerlo directamente como escribir sobre un byte en la RAM.
En cambio, los bits en la memoria deben borrarse, lo que los coloca en el estado predeterminado 1 ya mencionado. Esto solo se puede hacer en bloques, no en palabras. En el Microchip PIC32, con el que he trabajado más recientemente, el tamaño mínimo de bloque que se puede borrar es 4096 bytes. Por lo tanto, si desea cambiar una sola palabra (32 bits), tendría que leer el 4K de memoria, borrar el bloque y luego volver a escribir el 4K de memoria en flash pero incluyendo el nuevo valor de 32 bits según sea necesario. Esta eliminación puede llevar algo de tiempo, una buena parte de un segundo.
La siguiente es una imagen de una celda de memoria flash. Flash almacena los datos eliminando o colocando electrones en la puerta flotante. Cuando los electrones están presentes en la puerta flotante, no fluye corriente a través del transistor, lo que indica un 0. Cuando los electrones se eliminan de la puerta flotante, el transistor comienza a conducir, indicando un 1. (Esto es por convención, podría haber sido el de otra manera, pero requeriría inversores en todas las líneas de datos).
Operación de borrado. El estado predeterminado de las celdas de memoria flash (una celda flash NOR de un solo nivel) es 1 porque las puertas flotantes no tienen cargas negativas. La eliminación de una celda de memoria flash (restablecimiento a 1) se logra aplicando un voltaje a través de la fuente y la puerta de control (línea de palabras). El voltaje puede estar en el rango de -9V a -12V. Y también aplique alrededor de 6V a la fuente. Los electrones en la puerta flotante se extraen y se transfieren a la fuente mediante túneles cuánticos . En otras palabras, los electrones hacen un túnel desde la puerta flotante hasta la fuente y el sustrato.
Debido a que el borrado usa altos voltajes, el borrado en bloques requiere menos área de troquel. Por lo tanto, los voltajes solo se pueden aplicar a filas completas de transistores a la vez.
Para escribir, se puede programar una celda flash NOR o establecerla en 0 mediante el siguiente procedimiento. Mientras escribe, se aplica un alto voltaje de alrededor de 12V a la puerta de control (línea de palabras). Si se aplica un alto voltaje de alrededor de 7V a la línea de bits (terminal de drenaje), se almacena un 0 en la celda. El canal ahora está encendido, por lo que los electrones pueden fluir desde la fuente hasta el drenaje. La corriente de drenaje de la fuente es lo suficientemente alta como para hacer que algunos electrones de alta energía salten a través de la capa aislante hacia la puerta flotante a través de un proceso llamado inyección de electrones calientes.
Para la lectura, se aplica un voltaje de alrededor de 5 V a la puerta de control y alrededor de 1 V al drenaje. El estado de la celda de memoria se distingue por la corriente que fluye entre el drenaje y la fuente.
La vida útil de la memoria no volátil se mide en términos de ciclos de borrado. La desventaja de NOR es que el número de ciclos de borrado es aproximadamente 1/10 del de la memoria NAND. Muchas versiones del PIC32 solo permiten que la memoria flash se actualice 1000 veces, mucho menos que los típicos 100,000 ciclos de borrado para EEPROM.
Por lo tanto, no es tan importante si los diseñadores hicieron que el estado predeterminado sea 1 o 0 (eligieron el valor que permitió la implementación más fácil); Lo importante es que primero hay que borrar un bloque de flash (lo que lleva tiempo) y luego reprogramar todo el bloque (incluso si se cambia una sola palabra (lo que requiere una cantidad sustancial de RAM).
Este borrado en bloque del dispositivo vuelve a las primeras EPROM (ROM programable borrable), que procedió a EEPROM. El código se programó en chips (como el 16KB 27128) y se colocó en zócalos. Estas fichas tenían una pequeña ventana en la parte superior que permitía que la luz brillara en el dado. Cuando se tuvo que cambiar el programa, los chips se pusieron en un borrador de UV durante 20 minutos más o menos, lo que borraría todo el chip. Entonces el chip se programaría con el nuevo programa.
Algunas EEPROM requieren borrar bloques de memoria antes de programar; otros permiten escribir un byte a la vez (el controlador EEPROM en realidad borra primero el byte y lo programa).