Cuándo almacenar los parámetros a flash / eeprom de una MCU

0

Deseo utilizar el flash MCU para almacenar información no volátil, como los parámetros de ajuste. ¿Existe una política "mejor" conocida sobre cuándo almacenar estos valores ... encuentro algunas opciones y me gustaría conocer su opinión sobre ellos? a) Ejecutar una tarea para escribir parámetros a flash b) Escribir a flash durante la rutina de apagado. (pero qué sucede si ocurre un cierre repentino)

También, cómo decidir si los parámetros deben leerse desde flash o desde el código predeterminado. Una vez que el usuario cambia un parámetro (es diferente del valor predeterminado), cada siguiente inicio tendrá que leer esos parámetros del flash ... ¿verdad? Quiero saber cómo las personas experimentadas tratan estos problemas.

Gracias y saludos, Vishal Sapre

    
pregunta Vishal

1 respuesta

1

No hay una respuesta 'correcta' a tu pregunta. Al final, depende de los detalles del sistema que tiene y del nivel de rendimiento que necesita. Los principales puntos a considerar son:

  1. Resistencia FLASH. La memoria FLASH solo puede manejar un cierto número de escrituras antes de que comience a producir errores. Esto puede variar significativamente entre los fabricantes de memorias FLASH (1000 a 100,000 escrituras) y la EEPROM es generalmente mejor (100,000 escrituras). Si tiene más FLASH del que necesita para almacenar sus datos, también puede escribir un algoritmo para distribuir las escrituras en la parte no utilizada de la memoria para aumentar la resistencia. Al final, solo tiene que considerar cuántas veces es posible que se escriban los parámetros durante la vida útil de su producto y esto le dirá si puede simplemente escribirlos en FLASH cada vez que cambien, o si necesita usar un almacenamiento en caché más sofisticado. sistema.

  2. Interrupción de la fuente de alimentación. Si su producto tiene una batería integrada, es probable que esté razonablemente seguro de que no recibirá una interrupción no deseada de la fuente de alimentación. Esto le da mucha flexibilidad para decidir cuándo debe escribir los datos, y con menos frecuencia sería mejor evitar cualquier problema de resistencia de FLASH. Sin embargo, muchos sistemas integrados no tienen este lujo, lo que significa que tiene que decidir qué tan importantes son los datos para almacenar, y luego priorizar la escritura de los mismos basándose en esto. Si es muy importante, entonces debes llevarlo a FLASH lo más rápido posible. Si no lo está, puede guardarlo en caché y escribirlo periódicamente si ha cambiado. También tenga en cuenta que normalmente necesitaría un medio para determinar si una escritura FLASH se completó con éxito o se interrumpió por la pérdida de energía. La forma normal de hacer esto es tener un byte final de 'validación / suma de comprobación' que solo se escribe una vez que todos los datos se han escrito correctamente. En el inicio, el micro puede usar esto para asegurarse de que los datos almacenados sean correctos. Incluso puede tener un sistema de registro diario básico para que el código pueda volver a un conjunto de datos anterior si detecta un problema. La complejidad de su código depende de la probabilidad de que reciba una interrupción de la alimentación mientras escribe datos y de las consecuencias de la corrupción de los datos.

Con respecto a la segunda parte de su pregunta (cuándo leer), nuevamente no hay una respuesta 'correcta'. Si el rendimiento es un problema y tiene RAM de repuesto, entonces la solución obvia es almacenar los valores en la RAM. Si no tiene suficiente RAM o el rendimiento no es un problema, entonces leer desde FLASH cada vez es perfectamente aceptable. También tenga en cuenta que en muchos microcontroladores las lecturas internas de EEPROM / FLASH tienen muy poca penalización frente a RAM de todos modos.

    
respondido por el Jon

Lea otras preguntas en las etiquetas