¡Una pregunta fácil, espero! No encuentro ninguna respuesta definitiva ...
Estoy escribiendo controladores para un chip de memoria flash SST25VF064C . Se comunica a través de SPI.
Como toda memoria flash (que yo sepa), necesita ser borrada (todos los bits = 1) antes de que pueda escribirse (bits = 0). Para este chip, el área más pequeña que se puede borrar es 4kB.
Su memoria está dividida en páginas de 256 bytes. Con una instrucción, puedo escribir desde un byte hasta 256 bytes en una página específica. No tengo que comenzar en un límite de página: la primera ubicación que se programará puede estar en cualquier lugar dentro de una página.
La regla general es asegurarse de que la página se borre antes de escribir en ella. Pero, ¿puedo escribir en una página previamente escrita si evito las áreas ya escritas? Por ejemplo, digamos que almaceno datos en bytes 0-127. ¿Puedo luego escribir otros 128 bytes en la misma página, si empiezo en el byte 128?
Si entiendo p. 16 de la hoja de datos correctamente, dice: Con este chip en particular, no debe escribir en una página escrita previamente, incluso si evita las áreas ya escritas.
detalles
La hoja de datos del chip de memoria flash SST25VF064C en la pág. 16 dice "La instrucción del programa de página programa hasta 256 bytes de datos en la memoria. La dirección de página seleccionada debe estar en el estado borrado (FFH) antes de iniciar la operación del programa de página".
Supongo que, por lo tanto, "toda la página seleccionada debe estar en el estado borrado (cada byte en la página FFh) antes de iniciar una operación de Programa de página". ¿SST o Microchip han publicado alguna documentación que aclare esta oración enloquecedoramente ambigua?
En mi experiencia, el fabricante de todos los chips flash MLC y algunos chips flash SLC más nuevos exige que una vez que se haya escrito una página, la página debe borrarse antes de que se vuelva a escribir, incluso si solo desea cambiar 1 bit a 0 bit. (Esto se llama la "regla de escritura única" en el artículo de YAFFS ).
En mi experiencia, todos los chips flash más antiguos le permiten cambiar 1 bit a 0 bit sin un ciclo de borrado, incluso si ese bit está en una página o incluso en un byte que ya tiene otros bits programados a cero: un La página de flash se puede programar varias veces entre borrados. (Esto se llama "escritura múltiple" en el artículo de YAFFS).
La hoja de datos del fabricante es una promesa condicional que el fabricante le hace. Siempre que siga todas las recomendaciones de la hoja de datos, el fabricante promete que el chip funcionará según lo especificado. Sospecho que si programa una página previamente escrita, evitando las áreas ya escritas, existe una buena posibilidad de que una lectura inmediata pueda proporcionar los datos que espera: los bytes recién escritos son los valores que acaba de escribir, y los otros bytes probablemente no hayan cambiado. Sin embargo, debido a que esto no sigue las recomendaciones de la hoja de datos, ya no puede confiar en todas las promesas de la hoja de datos. Escucho rumores de que dicha actividad no autorizada causa que el tiempo de retención de datos y la resistencia se vean afectados, debido a la perturbación del programa, la sobreprogramación, la captura de carga, los efectos similares al martillo de fila DRAM , etc.
"El esquema de uso de la memoria influye en la tasa de error de bits. La programación de páginas parciales, la programación de páginas no secuenciales dentro del bloque, la lectura excesiva por bloque sin borrar, así como el número no igual de operación de lectura dentro de un solo bloque aumentan el número de lectura molestar errores ". - Michal Jedrak. "Memoria Flash NAND en sistemas embebidos".
"La perturbación del programa ocurre cuando un bit se programa involuntariamente de un" 1 "a un" 0 "durante un evento de programación de página. Este error de bit puede ocurrir ya sea en la página que se está programando o en otra página del bloque. Condiciones de voltaje de polarización en el bloqueo durante la programación de la página puede hacer que una pequeña cantidad de corriente se canalice hacia las celdas de memoria cercanas. Los intentos repetidos de programación parcial de la página continuarán agravando esta condición ". - Douglas Sheldon y Michael Freie. "Molestar las pruebas en memorias flash" . pag. 8, 9.
"La perturbación del programa ocurre cuando un bit se programa involuntariamente (1 a 0) durante una operación de programación ... Esta condición empeora por la programación aleatoria en el bloque y al aplicar múltiples escrituras parciales a las páginas". "Mitigación de falla flash NAND de Yaffs"
fuente
Es muy probable que el software de programación que está utilizando ya esté escribiendo los 256 bytes "requeridos". "Parece" como si le estuviera dando la capacidad de escribir de uno a 256 bytes, pero sospecho que lo que está haciendo es OR-or el byte (s) que desea con una "máscara" de 256 "FF". Si esto es correcto, puede escribir "de forma segura" cualquier byte una vez , sin tener que borrar todos los bytes de 4K. Si se escribe una suma de verificación fuera de su control, lo más probable es que se cree una suma de verificación no válida cuando escriba otro byte en un segmento previamente escrito. Las implicaciones de esto dependen del chip.
Si su software de programación no hace el "OR", puede hacerlo usted mismo. Borre un segmento de 256 bytes, escriba el (los) byte (s) en la (s) posición (es) correcta (s), O con una máscara de FF de 256 bytes, y escriba el segmento en la página deseada.
Usted puede determinar fácilmente si cualquiera de los métodos funciona con cualquier chip en particular . ¡Escriba en los primeros 128 bytes, escriba en los segundos 128 bytes, verifique que los primeros 128 bytes NO estén "en mal estado"!
fuente