En muchos dispositivos flash, borrar una página / bloque / sector / lo que sea necesario requerirá la programación interna de todos los bits a cero () y luego realizar un ciclo de borrado en todos los bits simultáneamente. En ocasiones, puede ser necesario repetir este proceso ( *). Si es necesario, dicha acción se realizaría automáticamente dentro del chip; La única consecuencia visible sería que un ciclo de borrado tomaría un tiempo inusualmente largo.
(*) STM parece usar lo contrario de la convención normal; los bits borrados en sus micros leen "0", mientras que los bits programados leen "1".
(**) He escrito software para un controlador que tenía que realizar todos los pasos "manualmente"; si algunos bits estuvieran "menos programados" que otros y terminaran de borrar primero, podrían evitar que los otros bits se borren correctamente, pero la reprogramación y el borrado de los bits supuestamente solucionaría el problema. No sé hasta qué punto los dispositivos flash más recientes tratan los mismos problemas.
Debido a que borrar un bloque primero requiere programarlo a todos los ceros (o, para ST, unos), no se debe esperar ningún comportamiento particular de un bloque parcialmente borrado a menos que o hasta que haya realizado otro ciclo de borrado en él, y este último ciclo se ha ejecutado hasta la finalización. Incluso si la página parece estar en blanco, no se debe confiar en ella. . Es posible que los bits que están parcialmente programados se lean en blanco pero a veces se lean como están programados. Escribir en una página aparentemente en blanco puede causar la pérdida de datos si los bits que aparecían en blanco, y se suponía que estaban en blanco, comenzaran a leerse como si hubieran sido programados.
Para evitar este problema, defina su formato de datos en memoria de modo que cada vez que se borre una página, se pueda discernir por el contenido de otras páginas, sin tener en cuenta el contenido de la página. página siendo borrada. Esto generalmente puede ser declarar que una página debe considerarse parcialmente borrada si otras dos páginas están de acuerdo con ese hecho, y organizar las cosas de modo que cuando se borra una página, dos páginas la digitarán, y ninguna página digite ninguna otra que pueda También se digite por la página que se está borrando; Una vez que se completa el borrado, al menos una de las páginas en las que se realizó la digitación debe programarse para que no lo haga. Luego, en el inicio, uno podrá identificar que existe una página parcialmente borrada, independientemente del contenido aparente de esa página, y repetir el comando de borrado para garantizar un borrado limpio.