1 votos

desbordamiento de la eeprom

Yo estaba usando STM32f401RE, y he almacenado una serie de números en el AT24c512, EEPROM leer y escribir las operaciones en varias ocasiones durante la ejecución del código se hace, alrededor de 10.000 veces cada ejecución del código. Al principio, los números de EEPROM leer correctamente y se escriben correctamente en él.

Pero cuando ese dispositivo permanecerá encendido durante unas 5 a 6 horas y los datos de la EEPROM pueden ser escritos y leídos por el microcontrolador no recibir los números correctos.

Por ejemplo, debería escribirse 500 en la EEPROM, pero el número que se lee de la EEPROM es 1.589.436. Que al apagar el dispositivo o escribir los nuevos números no saldrán correctamente. En su opinión, ¿cuál es el problema? ¿Cómo puedo arreglar esto?

4voto

RelaXNow Puntos 1164

Parece que está desgastando la EEPROM. Todas estas células de memoria de puerta flotante tienen un número finito de veces que pueden ser escritas y borradas antes de que se dañen irremediablemente. Comprueba la hoja de datos. Debería indicar los valores mínimos de "vida útil" garantizados para las escrituras y los borrados.

La mayoría de las EEPROM puras están preparadas para realizar más de 10.000 operaciones de este tipo. Sin embargo, eso es lo que aparentemente está haciendo su código cada vez . Y, especialmente durante el desarrollo y la depuración, es muy posible que algo se haya ejecutado en un bucle y haya realizado estas operaciones muchas veces.

Tu EEPROM está tostada, acabada, desgastada. Si la sustituyes por un nuevo chip y el problema desaparece (temporalmente), entonces es definitivamente lo que ha ocurrido.

En general, si se requiere una actualización frecuente de los datos no volátiles, hay que hacer algo más que conectar a ciegas una EEPROM. La primera estrategia es cambiar la arquitectura para que el estado no volátil no tenga que actualizarse tan a menudo. Si eso es imposible, entonces hay que vivir con la vida útil limitada o utilizar una tecnología diferente.

Otra cosa que hay que mirar es cómo exactamente el firmware está escribiendo en la EEPROM. Estas cosas suelen tener "páginas" que se borran eléctricamente o se escriben a la vez. A veces es posible escribir bytes individuales, pero sigue contando como un evento para toda la página.

Por lo tanto, el firmware debe ser inteligente en cuanto a la forma en que se realizan las escrituras. Suelo crear rutinas de interfaz que permiten leer o escribir bytes individuales de forma aleatoria. Sin embargo, por debajo realmente almacenan en caché una página entera. Las escrituras no van a la EEPROM física hasta que se necesite una página diferente o hasta que se llame a la rutina FLUSH explícita. A veces la rutina FLUSH es llamada automáticamente por un temporizador.

Sin embargo, en todos los casos no se hace una escritura física cuando no se está cambiando ningún valor. Mantengo un bit "sucio" que indica si la página en caché ha sido cambiada desde que se leyó de la EEPROM. Cuando se va a una página diferente, no se hace ninguna escritura si la caché actual no está sucia. También hay una lógica para comprobar si las escrituras de bytes individuales no cambian el valor de la caché. En ese caso, el indicador de suciedad no se activa.

Unas rutinas adecuadas de acceso a la EEPROM de bajo nivel pueden ayudar, pero la aplicación también tiene que ser consciente de las limitaciones de la memoria no volátil. Debe intentar evitar, por ejemplo, saltar por todo el espacio de direcciones escribiendo pequeños números de bytes. Si tienes que hacer una escritura grande, ten cuidado de hacerla secuencialmente.

Por supuesto, no se puede escribir un nuevo valor cada segundo, por ejemplo, y esperar que un dispositivo de 100.000 escrituras dure más de 28 horas. Incluso un dispositivo de 1.000.000 de escrituras no duraría ni 12 días en este caso.

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