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

1

He tomado un curso de Arquitectura de Computadoras en el pasado que se enfoca en las CPU de escritorio y actualmente trabajo en sistemas integrados y estoy un poco confundido en cuanto a qué memoria corresponde a qué.

Estoy tratando de crear en mi cabeza una imagen análoga de la de las CPU del escritorio y no puedo encontrar algo en lo que estoy realmente seguro.

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

¿Esto significa 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 tu ayuda.

    
pregunta Satrapes

4 respuestas

3

Flash es como un disco duro porque:

  • No es volátil, lo que significa que conserva su contenido mientras se elimina el poder.
  • 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 tratarla como RAM.
  • La CPU del microcontrolador generalmente puede ejecutar código directamente desde flash, sin cargarlo primero en la RAM.
  • Normalmente, el sistema de archivos no se implementa en flash (aunque a veces el sistema de archivos se implementa en flash).

La ROM BIOS 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. En estos días, los microcontroladores suelen utilizar la memoria flash para el almacenamiento del programa. A las EEPROM se suele acceder en serie, normalmente son más pequeñas que las flashes y se utilizan a menudo para almacenar ajustes de configuración y similares. (Digo "normalmente" porque estas no son reglas absolutas).

    
respondido por el kkrambo
3

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.

    
respondido por el tcrosley
1

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

En algunos sentidos, puedes decir que Flash se comporta un poco como un disco duro y que la RAM se comporta como RAM y que los registros se pueden ver 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 principio de la memoria Flash interna. Si el primer byte es algún dato aleatorio 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, usted puede programarlo a menudo, pero el código de aplicación normal no puede o no (un actualizador de firmware, por supuesto, pero eso es un especial caso de uso). En una PC, el procesador ni siquiera es lo primero que comienza a funcionar, es el BIOS. El BIOS es un tipo 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 una carga de 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 el 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, disco duro o CD-ROM.

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

La mayoría de las MCU no tienen caché de instrucciones, simplemente cargan las instrucciones de Flash, una por una, avanzando al siguiente byte / palabra simplemente incrementando el contador del programa, donde una CPU cargaría una porción de programa (o algunas veces todos) desde el Disco Duro a la RAM para poder acceder a él más rápido, y luego acceder a él rápidamente cargaría bits más pequeños de la RAM en bloques en la Caché de instrucciones. Si una computadora cargara las instrucciones de la CPU desde el disco duro directamente, probablemente solo habríamos empezado a usar cualquier tipo de sistema operativo "Windows 95" en la llegada de las unidades de estado sólido, porque ejecutamos un sistema operativo gráfico completo como ese y seguimos haciendo otra cosa. desde un disco duro ATA133 sería un desafío, por decir lo menos. Por no hablar de tipos más lentos.

En las MCU, la EEPROM puede verse como el almacenamiento de datos dedicado. Cuando en una PC las funciones Flash y EEPROM están alojadas en el disco duro, almacenando datos y programas, en muchos sistemas integrados, el Flash (como se mencionó anteriormente) solo se usa para almacenar el programa y los números fijos que la MCU no puede cambiar, pero solo utiliza 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 el programa normal los modifica regularmente, pero en la mayoría de los casos 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 se me ocurren en la cabeza de inmediato, y posiblemente he cometido algunos pequeños errores en el camino, pero espero que al menos haya un poco más de claridad sobre algunos de los más. grandes diferencias. Existen algunas similitudes, pero ciertamente no son lo mismo.

    
respondido por el Asmyldof
0

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

Primero que nada: 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 lo que puede f.ex. Mostrar cosas, como en una PC.

Pero con una diferencia: The Flash Cant (que yo sepa) cambia por sí mismo. Mientras que en una PC también puede almacenar datos en su dispositivo de almacenamiento primario.

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

    
respondido por el Matze Strawberrymaker

Lea otras preguntas en las etiquetas