Estoy experimentando un problema muy típico con la corrupción de datos en un chip flash de una manera no tan típica. Estoy usando el chip flash serie M25P16 de 16Mb de Micron para registrar datos históricos en mi dispositivo a través de SPI.
El registro funciona maravillosamente con un error conocido, y eso es cuando la alimentación del dispositivo se enciende durante una operación de Flash.
Esperaba que se corrompiera el último bloque de datos escrito en Flash, ¡pero en realidad parece que todo el Sector se corrompe!
Esto es lo que quiero decir con corrupto, cada bloque de datos que escribo en Flash recibe una suma de comprobación, si se lee un bloque de datos dañado, todos los datos son correctos EXCEPTO la palabra baja de la suma de comprobación . La palabra baja de la suma de comprobación siempre devuelve 0x0000.
Por ejemplo, una suma de comprobación de 0xA533037E escrita en flash se leerá como 0xA5330000.
Ahora, para la parte extraña, si este problema está ocurriendo y NUEVOS DATOS está escrito para parpadear, ¡sucede lo mismo con los nuevos datos!
La forma en que he estado resolviendo este problema es borrando todos los datos y volviendo a empezar. Esto parece resolver el problema de una manera no tan buena.
Mi pregunta es esta: para Serial Flash, si se produce una corrupción, ¿cree que es el sector completo el que se daña o solo un punto de datos? ¿Parece esto un comportamiento "típico" para valores corruptos?
Cualquier entrada es apreciada :)
Addendum Aquí está el enlace a la hoja de datos para el flash: