Memoria flash: ¿Es necesario borrar toda la página antes de escribir solo unos pocos bytes?

16

¡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?

bitsmack
fuente

Respuestas:

13

Sí, después de cualquier borrado, puede usar cualquier número de operaciones separadas para escribir datos (cambiando los bits de 1 a 0) antes de la próxima operación de borrado.

Incluso puede reescribir una ubicación previamente escrita, siempre que solo esté borrando más bits. Esto puede ser útil para mantener cosas como mapas de bits de asignación.

Dave Tweed
fuente
¡Excelente, gracias! Esto era justo lo que estaba buscando.
bitsmack
Tenga en cuenta que a algunos chips no les gusta que escriba un byte anterior después de uno posterior al mirar varias hojas de datos, sin embargo, esto parece variar según los dispositivos.
Vality
1
@Vality: ¿Puedes dar un ejemplo de esto?
Dave Tweed
3
Las MCU @DaveTweed NXP LPC21xx y LPC23xx tienen un byte de suma de comprobación por cada 16 bytes de memoria; debe escribir los 16 bytes a la vez porque la suma de verificación se escribe en esa operación. Si viene más tarde e intenta escribir ceros en la misma "línea", los ceros se escriben, pero también se escribe una nueva suma de verificación sobre la anterior; lo más probable es que tenga algunos 1 donde el anterior tenía 0, por lo que la suma de comprobación se invalida. No recuerdo si el MCU le permite leer una línea con una suma de verificación incorrecta. De todos modos, eso sería un ejemplo de "variar entre dispositivos".
Guillermo Prandi
1
"cualquier número de operaciones separadas para escribir ... la próxima operación de borrado". Tenga en cuenta que algunas partes, particularmente las memorias flash integradas en MCU, indicarán un número máximo de escrituras antes de que se requiera un borrado. Presumiblemente, violar este límite correrá el riesgo de corromper otras áreas de la memoria, por lo que es importante tener cuidado con dichos límites.
ajb
5

¿Puedo escribir en una página previamente escrita si evito las áreas ya escritas?

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"

davidcary
fuente
0

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"!

Guill
fuente