Si se pierde la energía, mientras que un chip flash es borrar el bloque, robusto software debe asumir que los contenidos del bloque puede cambiar arbitrariamente en cualquier momento , a menos que o hasta que el bloque se vuelve a borrar y una eliminación ciclo se ejecuta hasta el final. Incluso si el bloque todavía parece mantener los datos antiguos, no hay garantía de que va a seguir haciéndolo para cualquier longitud de tiempo. Incluso si el bloque parece ser borrado, no hay ninguna garantía de que programar los bits no espontáneamente "aparecer". Yo he visto un par de procesadores con flash interno que incluye una capacidad de comprobar si los bits eran "de verdad" suprimidos o eran "completamente" programado, pero nunca he visto la funcionalidad expuesta por un flash externo del dispositivo.
Si uno desea ser capaz periódicamente almacén de datos en la flash, y asegurar que en caso de fallo de la alimentación de cada actualización se realizará correctamente completamente o no de todo, uno debe tener al menos tres bloques de flash, y definir un protocolo que cada vez que un bloque se borran, se puede determinar que se basaba únicamente en el contenido de los otros dos bloques. Hay una gran variedad de protocolos para la aplicación de esta; yo voy a sugerir una simple aquí, suponiendo que la cantidad de información que se almacena es un bloque completo menos un tamaño mínimo de los programable unidad, y tres bloques están disponibles, que llamaré X, Y, y Z.
Cada bloque tendrá un "control" de los bits dentro de lo que está reservado para el seguimiento de la validez/supresión de estado; voy a llamar a los bits de x, y y z. Durante la operación, el sistema mantendrá el invariante que el bloque que contiene los datos correctos tendrá su bit de control en blanco; el "anterior" (bloque X está precedido por Z) tendrá su bit de control programado. Los bits de control para el bloque restante (el "después de" el uno con datos válidos) será irrelevante. Si todos los bits de control están en blanco, nunca nada ha sido correctamente escrito; si todos los bits de control programado, algo que ha conseguido seriamente dañado.
Para la escritura de nuevos datos, borrar el bloque siguiente al de la que tiene los datos correctos, a continuación, almacenar nuevos datos en ese bloque. Finalmente, como último paso, el programa de control poco de lo que solía ser el bloque actual. Hasta que el bit de control está programado, nada la atención acerca de los contenidos del bloque que se acaba de programar. Una vez que el bit está programado, nada la atención acerca de los contenidos del bloque siguiente el nuevo bloque. Siempre que el sistema tiene suficiente energía disponible para asegurar que la programación de que un bit sea éxito o no de manera limpia, confiable de la operación está asegurada en todos los power-escenarios de pérdida.
Supongamos que x es programado, y es en blanco, y z es cualquier cosa. Debido a que los datos válidos bloque debe tener su propia bandera en blanco y el bloque anterior de la bandera debe ser programado, X no puede ser un válido bloque (bandera de x está programado), y Z no puede ser un válido bloque (porque la bandera y está programado). En consecuencia, Y es el único bloque que puede contener datos válidos. Bloque X tiene la versión anterior de los datos, y Z no puede ser invocada para celebrar nada. Cuando es necesario para almacenar los nuevos datos, el código debe comenzar por el borrado de Z (independientemente de si ya aparece en blanco), y la programación de todos los datos que debe contener. Si se pierde la energía en cualquier momento durante este proceso, el estado del sistema será el mismo que antes de que comenzaran (basado en los indicadores, el contenido de Z se presume que el significado, por lo que su contenido no afectar el estado del sistema en todos).
Sólo después de que todas las escrituras a la Z es completa y contiene datos válidos deben bandera y ser programado. Una vez que la bandera está escrito, Z será reconocible como el bloque que contiene datos válidos desde su propia bandera estará en blanco mientras que las anteriores bloques' de la bandera (y) es programado; el hecho de que y está ahora programado significa Y no es válida.
La próxima vez que es necesario para almacenar los nuevos datos, el bloque X debe ser borrados y los datos allí almacenados; finalización debe ser indicado por la programación de la bandera z. El tiempo después de eso, Y deben ser borrados y los datos allí almacenados, con la finalización indicada por la programación de la bandera de x. Es vital que intenta programa de indicadores de x, y y z, ya sea completado o no tienen ningún efecto, pero esas son las únicas operaciones que deben ser "garantizado atómica" en el nivel de hardware. Todos los demás se escribe en la memoria se hace a un bloque cuyo contenido nunca se miró(*) a menos que se ejecute hasta el final.
(*) El sistema por lo general no será capaz de evitar el acceso no válidos del bloque, pero el comportamiento del sistema se ve afectada por el valor leído.
Por CIERTO, si uno no confía en la capacidad de garantizar que la bandera escribe ejecutar hasta el final, existen varios enfoques redundante con la bandera de bits, lo que potencialmente podría ayudar un poco, pero la fiabilidad no será más seguro. Supongamos, por ejemplo, que el sistema pierde energía, mientras que poco y es parcialmente programado de tal manera que a veces se lee como programado, pero a veces como en blanco. Si en el primer encendido, y se lee como en blanco, la próxima actualización de borrar Z. Si durante ese borrado, el sistema pierde energía y en el siguiente power-up, y se lee como programado, el sistema de suponer que Z es el válido bloque. Y si había leído como programado dos veces, entonces Z habría sido válido bloque y el siguiente bloque de borrado habría sido X. Si había leído como blanco dos veces, entonces Z habría sido reconocido correctamente el segundo tiempo como el bloque no válido. A pesar de que uno podría tratar de protegerse contra estos peligros mediante la adición de redundante bandera de bits, tales enfoques no ayuda mucho. Uno puede diseñar de tal manera que sería "poco probable" para parcialmente programadas indicadores de comportarse en la problemática de la moda, pero que es fundamentalmente diferente de la garantía de que si la bandera escribe trabajo atómicamente, nada de lo que el chip podría informar de cualquier otra parte por escrito los datos podría causar problemas.