5 votos

Ciclos de escritura en la memoria del microcontrolador

La información muestra que las memorias flash tienen un número limitado de ciclos de escritura (normalmente ~10.000). Muchos MCU emulan EEPROM en flash, de ahí que algunos documenten este write_life_cycle.

Sin embargo, un vistazo a la hoja de datos de cualquier MCU revela algo impar: esta memoria flash es sólo un banco de la unidad de memoria del MCU. Comparte la memoria global con los "REGISTROS de control y datos" (ver foto adjunta).

De ahí mi pregunta: Supongamos que un programa escribe continuamente a estos registros (por ejemplo, const ADC temp lecturas escritas a ADC1_DR), entonces este write_life_cycle puede ser superado en menos de un segundo. Sin embargo, como sabemos MCUs sobrevivir que por un cierto margen.

Traté de suponer que tal vez, los registros se implementan de manera diferente en HW, pero entonces, ¿por qué sus direcciones de memoria se superponen con el espacio de flash y sus anchos son los mismos? (un bus de 32 bits, obviamente, puede acceder a un registro de 16 bits -> ejemplo: todos los bits reservados en algunos registros, incluso podría reducir el costo)

¿En qué me he equivocado al entender cómo funciona la memoria de la MCU?

STM32F10xx_MemoryMap

0 votos

Yo pensaría que los registros de la MCU estarían en la RAM, o en registros hardware dedicados. Podrías almacenar código de programa o datos en flash, pero no estarías accediendo a ellos constantemente (y sería muy lento). Los periféricos están incluidos en la memoria mapa pero en realidad no están en la memoria física.

0 votos

"sus direcciones de memoria se solapan con el espacio flash" - ¿qué solapamiento?

1 votos

La memoria flash trasera que se ve en el mapa de memoria es sólo lectura ¡! Para escribir/borrar flash, el programa debe realizar operaciones en los registros de control. Necesitas leer sobre como funciona la flash NOR. En pocas palabras, las operaciones de escritura sólo convierten bits de uno en bits de cero. Las operaciones de borrado convierten páginas enteras de bits en todos unos. En general, la restricción de ciclo está en ciclos de borrado en cada página pero puedes escribir en una página tantas veces como quieras (pero esto no puede devolver 0 bits a 1). Esto permite escribir en bytes/palabras sucesivas sin consumir ciclos.

6voto

fzave Puntos 8

Las arquitecturas de procesador modernas permiten direccionar un espacio de memoria contiguo con el mismo bus de datos, incluso cuando se accede a varios tipos de memoria (por ejemplo, RAM, ROM y Flash). Resulta que esto es bastante práctico, ya que permite a tu programa leer/escribir RAM y leer de Flash sin hacer ningún truco especial para cambiar de tipo de memoria.

Este es el mismo principio que un bus de datos externo que puede acceder a un chip RAM discreto dentro de un cierto rango de direcciones y a un chip ROM discreto dentro de un rango de direcciones diferente, incluso cuando ambos chips están en el mismo bus y dentro del mismo espacio de direcciones.

En un microcontrolador moderno, estas secciones RAM/ROM/Flash se incluyen todas juntas en la misma pieza y se puede acceder a ellas por el mismo bus de datos dentro del procesador.

Los registros de función están en RAM, y pueden ser leídos/escritos tanto como quieras sin penalización. Su ejemplo de un registro ADC que se actualiza constantemente es un buen ejemplo; RAM se utiliza para almacenar los resultados ADC en ese registro y se puede acceder en el mismo bus de datos con la memoria flash.

El código de programa suele estar en el espacio flash, y éste es (normalmente) de sólo lectura. Sin embargo, algunos procesadores permiten borrar y reescribir secciones de la memoria flash interna. Esto no es tan fácil como escribir en RAM; normalmente hay algunas instrucciones especiales que le dicen al procesador qué página borrar, etc. La mayoría de los vendedores proporcionarán una biblioteca y/o código de ejemplo para hacer esto, como en el caso del área flash emulada EEPROM que mencionaste.

En la mayoría de los microcontroladores, la escritura en la memoria flash es la transición "fácil" (los 1 se convierten en 0) y puede hacerse byte a byte. El borrado (0s de nuevo a 1s) no es tan específico y normalmente se hace en bloques (página, sector, etc.) Dado que este borrado requiere un voltaje más alto, hay una bomba de carga en el chip para generar este voltaje de borrado de flash.

Este mayor voltaje de borrado tiene dos consecuencias: los ciclos de borrado suelen ser mucho más lentos que los de lectura (hay que acumular carga y verificar el borrado), y los pulsos de alto voltaje desgastan un poco la memoria flash con cada ciclo de borrado. Por lo tanto, el borrado de la memoria flash debe hacerse con moderación.

Tienes razón en que los proveedores incorporan un margen a estas estimaciones de vida útil, pero debes tener cuidado al diseñar una aplicación que borre/escriba en flash (autoprogramación) para no desgastar la memoria flash antes de que el producto haya superado su vida útil de diseño.

0 votos

Ha sido conciso, gracias. Así que, realmente se implementa de manera diferente en HW. No sabía que su memoria interna funciona como simplemente añadir memoria externa. Eso significaría que todas esas reservas que veo en realidad puede que ni siquiera existan, sino que representan los huecos de banda en las distintas direcciones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X