¿La memoria flash en MCU es similar a un disco duro?

Tomé un curso de arquitectura informática en el pasado que se enfoca en CPU de escritorio y actualmente trabajo en sistemas integrados y estoy un poco confundido sobre qué memoria corresponde a qué.

Estoy tratando de crear en mi cabeza una imagen análoga a la de la CPU de escritorio y no puedo encontrar algo en lo que realmente confíe.

Por ejemplo, tanto los microprocesadores como los MCU tienen memoria RAM, lo cual está bien. Según tengo entendido, esta es la memoria inmediata a la que puede acceder la CPU. Podría usar direcciones virtuales, por supuesto, y tener acceso a todos los datos, pero en efecto, primero tendría que moverlos a la memoria caché y la memoria para que sea accesible por el UPC.

¿Significa esto que la memoria flash dentro de una MCU es similar al disco duro de una computadora?

Y si es así, ¿cuál es el papel de una EEPROM?

Muchas gracias por su ayuda.

Respuestas (4)

Hay dos tipos de memoria flash: NOR flash y NAND flash. NOR flash tiene una interfaz paralela para direcciones y datos, al igual que la RAM normal, y normalmente se usa como parte del espacio de memoria del microcontrolador.

Por lo tanto, normalmente puede ejecutar código fuera de NOR flash. El flash NOR generalmente está contenido con 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, lo que requiere muchos pines adicionales en el microcontrolador, a menudo reemplazando los pines que se usan para los puertos de E/S.

La memoria flash NAND, por otro lado, casi siempre es externa al microcontrolador, y es más como una unidad flash que conectaría a un puerto USB en una PC o computadora portátil (aunque si la memoria flash NAND se conectara directamente al microcontrolador, habría no hay necesidad de la interfaz USB).

Lo más importante de ambos tipos de memoria flash es que leer es mucho más rápido que escribir. Por lo tanto, no puede 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, normalmente 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 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 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 últimamente, el tamaño mínimo de bloque que se puede borrar es de 4096 bytes. Entonces, si quisiera cambiar solo una palabra (32 bits), tendría que leer los 4K de memoria, borrar el bloque y luego volver a escribir los 4K de memoria en la memoria flash, pero incluyendo 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 se puede utilizar para memoria de lectura/escritura como RAM. El borrado escribe 1 en todos los bits del bloque. Una vez que se ha borrado el bloque, 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. Un bit se ha cambiado a 0, no puede volver a cambiarlo 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 código. La mayoría de los programas no cambian el contenido de la memoria flash utilizada para el código, aunque normalmente es posible hacerlo.

Este borrado de bloque del dispositivo se remonta a las primeras EPROM, que procedieron de las EEPROM. El código se programó en chips (como el 16KB 27128) y se colocó en los zócalos. Estos chips tenían una pequeña ventana en la parte superior que permitía que la luz brillara en el dado. Cuando había que cambiar el programa, los chips se colocaban en un borrador UV durante unos 20 minutos, lo que borraba todo el chip. Entonces el chip sería programado 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 el byte primero y luego 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 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 o NAND.

Flash es como un disco duro porque:

  • No es volátil, lo que significa que retiene su contenido mientras se quita la energía.
  • Es donde se almacena el programa ejecutable.
  • Se puede borrar y reprogramar.

Flash no es como un disco duro porque:

  • La CPU del microcontrolador generalmente tiene una interfaz paralela para flashear y puede abordarla como RAM.
  • La CPU del microcontrolador normalmente puede ejecutar código directamente desde flash, sin cargarlo primero en la RAM.
  • Normalmente, un sistema de archivos no se implementa en flash (aunque a veces se implementa un sistema de archivos en flash).

La BIOS ROM de la PC, en lugar de la unidad de disco duro, es probablemente una mejor analogía para el flash de un microcontrolador.

Las EEPROM también son no volátiles como flash. Actualmente, los microcontroladores suelen utilizar memoria flash para el almacenamiento de programas. Por lo general, se accede a las EEPROM en serie, suelen ser más pequeñas que la memoria flash y, a menudo, se usan para almacenar ajustes de configuración y demás. (Digo "típicamente" porque estas no son reglas absolutas).

Es un poco molesto comparar un controlador integrado como una MCU con una computadora completa y completa o incluso con la placa principal.

En algunos sentidos, se puede decir que Flash se comporta un poco como un disco duro y que la RAM se comporta como RAM y que los registros pueden verse como una especie de caché de datos, pero hay algunas diferencias muy importantes.

Por ejemplo, muchas MCU tienen un comportamiento de inicio muy limitado que simplemente comienza a ejecutar comandos al comienzo de la memoria Flash interna. Si el primer byte son datos aleatorios dentro de lo que podría ser un archivo de Excel, eso sería malo. Algunas MCU también pueden escribir en Flash, otras no. En muchos diseños, el Flash se usa como una verdadera ROM, puede programarlo a menudo, pero el código de la aplicación normal no puede o no lo hará (un actualizador de firmware lo haría, por supuesto, pero ese es un caso de uso especial).En una PC, el procesador ni siquiera es lo primero que comienza a funcionar, es el BIOS. El BIOS es una especie de MCU que busca un disco duro (u otro dispositivo), luego busca una unidad de arranque en ese disco y luego le dice a la CPU que comience a trabajar desde allí. Y también realiza muchas otras funciones en las placas base en estos días. Gracias a brhans: la CPU comienza a funcionar de inmediato, pero carga su operación inicial, o al menos en la mayoría de los casos, desde la BIOS (E(E))PROM para comenzar a averiguar dónde encontrar cosas en el sistema. Luego busca un medio de arranque real y carga el sistema operativo desde allí. Como una memoria USB, un disco duro o un CD-ROM.

Aparte de eso, es muy probable que su MCU tenga una relación muy íntima con su RAM interna, básicamente puede leer y escribir cualquier byte en el contenido de su corazón (incluido el , mientras que la mayoría, si no todas, las computadoras tendrían zonas de exclusión (administrado por la memoria controlador) o incluso protección completa donde necesita un privilegio especial (como ser el sistema operativo actualmente en ejecución) para acceder a la memoria directamente.

La mayoría de las MCU no tienen caché de instrucciones, solo cargan las instrucciones de Flash, una por una, avanzando al siguiente byte/palabra simplemente aumentando el contador del programa, donde una CPU cargaría una parte del programa (o, a veces, todo) desde el disco duro en la RAM para poder acceder a él más rápido, y luego, para acceder a él realmente rápido, se cargarían bits más pequeños de la RAM en bloques en la memoria caché de instrucciones. Si una computadora cargara sus instrucciones de CPU directamente desde el disco duro, probablemente solo habríamos comenzado a usar cualquier tipo de sistema operativo de tipo "Windows 95" en el advenimiento de las unidades de estado sólido, porque ejecutar un sistema operativo gráfico completo como ese y seguir haciendo otra cosa. desde un disco duro ATA133 sería un desafío, por decir lo menos. Por no hablar de los tipos más lentos.

En las MCU, la EEPROM puede verse como el almacenamiento de datos dedicado. Mientras que en una PC, las funciones Flash y EEPROM están alojadas en el disco duro, almacenando datos y programas, en muchos sistemas integrados, Flash (como se mencionó anteriormente) solo se usa para almacenar el programa y números fijos que la MCU no. cambia, pero solo usa o busca, mientras que los datos variables se almacenan en la EEPROM.

Por supuesto, eso es una generalización, hay muchos ejemplos en los que algunos datos se almacenan en el programa Flash y aún así el programa normal los cambia regularmente, pero en la mayoría de los casos esa no es una gran idea. (La resistencia de escritura de Flash es más baja que la EEPROM, por ejemplo).

Sin duda, hay muchos más ejemplos de diferencias que no me vienen a la cabeza de inmediato, y posiblemente haya cometido algunos pequeños errores en el camino, pero espero que al menos haya un poco más de claridad sobre algunas de las diferencias más importantes. Hay algunas similitudes, pero ciertamente no son lo mismo.

Ummm: hasta donde yo sé, en una placa base de PC, el BIOS es una (E) EPROM, no una MCU (y los BIOS que actualicé en el pasado ciertamente estaban en 27Cxxx y familias similares). El procesador comienza su ejecución en el espacio de memoria en el que la EEPROM está asignada por la configuración predeterminada de la Unidad de gestión de memoria en el conjunto de chips. No hay una MCU independiente involucrada en un BIOS.
@brhans Mira, sabía que cometí errores :-) Gracias por entrometerte.

TL:DR; Diría que el flash es el SSD en lugar de un HDD.

En primer lugar: ninguno de los dos, flash o eeprom, tiene partes móviles en su interior, por lo que no hay un disco duro (HDD), sino un SSD.

Volver al tema: Flash es además el SSD principal en su sistema, el dispositivo de arranque. Porque el flash es la parte de la MCU que se encarga de controlarlo, con el que puedes f.ej. mostrar cosas, como en una PC.

Pero con una diferencia: Flash no puede (hasta donde yo sé) cambiarse a sí mismo. Mientras que en una PC también puede almacenar datos en su dispositivo de almacenamiento principal.

Para eso viene la EEPROM: se podría decir que es la parte regrabable de su dispositivo de almacenamiento normal o su dispositivo secundario.