Otra alternativa:
Reserve un bit "reescrito recientemente" en cada página de la memoria de ese chip flash.
(Tal vez almacene ese bit en uno de los 8 bytes "adicionales" por página).
Como sugiere la hoja de aplicaciones, cada vez que la aplicación escribe en una página aleatoria, también vuelva a escribir otra página que no haya sido reescrita por un tiempo.
Para encontrar esa otra página, escanee todos los bits "recientemente reescritos" buscando un bit "0". El primer "0" bit que encuentre corresponde a la página específica que se va a reescribir.
Una vez que lo haya encontrado, vuelva a escribir los datos en la página mientras borra el bit "recientemente reescrito" a "1".
Dado que escanea en orden secuencial, los bits "reescritos recientemente" hacia el principio son todos "1", y los bits hacia el final son todos "0".
(Opcionalmente, mantenga un puntero en la RAM apuntando a la página con la última página con un bit "1" "recientemente reescrito", o la primera página con un bit "0", para que pueda comenzar la búsqueda desde ese punto, en lugar de comenzando desde la página 0 cada vez).
Cuando realice la búsqueda, y la CPU no pueda encontrar ninguna páginas que deban reescribirse (cada bit "recientemente reescrito" es un "1"), luego programe cada "reescrito recientemente "bit a" 0 ", comenzando con ese bit en la página de flash 0.
(Puede programar solo un bit por página sin borrar toda la página).
En el momento del arranque, cuando se conecta la alimentación por primera vez,
deberá comprobar si el flash está en el estado "normal": todas las páginas hacia el principio tienen un bit "1" "recientemente reescrito", y todas las páginas hacia el final tienen un bit "0" .
Cualquier otra cosa indica el estado "interrumpido", en el medio de la programación todos los "bits que se deben volver a escribir" en "0", en cuyo caso la CPU debería terminar de programar todos esos bits "recientemente reescritos" en "0".
(Supongo que podría, en lugar de almacenar ese bit dentro de su página correspondiente,
Empaque todos esos bits en una matriz de bits y guárdelos en unas pocas páginas de flash que reserve para ese uso. Por ejemplo, el séptimo bit en esa matriz corresponde a la séptima página de flash.
En ese caso, probablemente querrá invertir el significado del bit y programarlo a "0" cuando la página correspondiente se borre y se vuelva a escribir, y de vez en cuando, cada vez que descubra que cada página tiene una "0" bit, borra todos esos bits a "1". El resultado es aproximadamente el mismo que lo que sugiere rdeml).