Hay dos tipos de memoria flash: flash NOR y flash NAND. La memoria flash NOR tiene una interfaz paralela para la dirección y los datos, al igual que la RAM normal, y generalmente se usa como parte del espacio de memoria del microcontrolador.
Por lo general, puede ejecutar código fuera de NOR flash. El flash NOR normalmente está contenido en el chip del microcontrolador, y de hecho así es como prácticamente todos los microcontroladores almacenan su código; O puede ser externo, ampliando el espacio de memoria del microcontrolador. Sin embargo, esto requiere una dirección externa y un bus de datos, que requiere muchos pines adicionales en el microcontrolador, que a menudo reemplazan a los pines que se usan para los puertos de E / S.
Por otra parte,
el flash NAND es casi siempre externo al microcontrolador, y es más como una unidad flash que se conectaría a un puerto USB en una PC o computadora portátil (aunque si el flash NAND se conectara directamente al microcontrolador , no habría necesidad de la interfaz USB).
Lo más importante de ambos tipos de memoria flash es que la lectura es mucho más rápida que escribir. Así que no puedes usarlo como una extensión de RAM. La lectura se realiza simplemente accediendo directamente a la memoria. 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.
Sin embargo la programación se vuelve un poco más complicada. El estado predeterminado para NOR flash y otras memorias no volátiles como NAND flash, EEPROM (ROM programable borrable eléctricamente) e incluso EPROM (ROM programable borrable) es un 1 lógico. No puede programar 1 en estos dispositivos, solo puede programa 0's. 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 su lugar, los bits en la memoria deben borrarse, lo que los coloca en el estado predeterminado 1 ya mencionado. Esto solo puede hacerse en bloques, no en palabras. En el Microchip PIC32, con el que más he trabajado últimamente, el tamaño mínimo de bloque que se puede borrar es 4096 bytes. Por lo tanto, si desea cambiar solo una palabra (32 bits), tendrá que leer los 4K de memoria, borrar el bloque y luego escribir los 4K de memoria de nuevo en flash, pero incluir el nuevo valor de 32 bits según sea necesario.
Este borrado lleva mucho tiempo: decenas o incluso cientos de milisegundos. Por lo tanto, no es utilizable para memoria de lectura / escritura como RAM. El borrado escribe 1 en todos los bits del bloque. Después de que el bloque haya sido bloqueado, entonces es posible escribir en él. La escritura solo puede escribir 0 en el flash, los 1 se ignoran ya que el bloque ya se ha borrado a 1. Una vez que se ha cambiado a un 0, no se puede volver a cambiar a 1 sin realizar la operación de borrado.
La mayoría de los microcontroladores usan lo que se llama un programador para programar inicialmente el código en el chip. Una vez programado, está listo para ejecutar el código. La mayoría de los programas no modifican el contenido de la memoria flash utilizada para el código, aunque generalmente es posible hacerlo.
Este borrado de bloque del dispositivo se remonta a las primeras EPROM, que procedieron a EEPROM. El código se programó en chips (como el 16KB 27128) y se colocó en sockets. Estas fichas tenían una pequeña ventana en la parte superior que permitía que la luz brillara en el dado. Cuando hubo que cambiar el programa, los chips se colocaron en un borrador UV durante 20 minutos aproximadamente, lo que borraría todo el chip. Entonces el chip se programaría con el nuevo programa.
Algunas EEPROM requieren el borrado de bloques de memoria antes de la programación; otros permiten escribir un byte a la vez (el controlador EEPROM en realidad borra primero el byte y lo programa).
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 de la memoria NAND. Muchas versiones del PIC32 solo permiten que la memoria flash se actualice 1000 veces, mucho menos que los 100.000 ciclos de borrado típicos para EEPROM o NAND.