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

14

Una pregunta fácil, espero! No encuentro ninguna respuesta definitiva ...

Estoy escribiendo controladores para un SST25VF064C chip de memoria flash. Se comunica a través de SPI.

Como toda la memoria flash (que yo sepa), necesita borrarse (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 escrita anteriormente, si evito las áreas ya escritas? Por ejemplo, digamos que almaceno datos en bytes 0-127. Más tarde, ¿puedo escribir otros 128 bytes en la misma página, si comienzo en el byte 128?

    
pregunta bitsmack

3 respuestas

12

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 volver a escribir una ubicación escrita previamente, siempre que solo esté borrando más bits. Esto puede ser útil para mantener cosas como mapas de bits de asignación.

    
respondido por el Dave Tweed
3
  

puedo escribir en una página escrita anteriormente, si evito   áreas ya escritas?

Si entiendo p. 16 de la hoja de datos correctamente, está diciendo: con este chip en particular, no debe escribir en una página escrita previamente, incluso si evita las áreas ya escritas.

detalles

La SST25VF064C hoja de datos del chip de memoria flash en la p. 16 dice "Los programas de instrucción de la página hasta 256 bytes de datos en la memoria. La página seleccionada la dirección 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". ¿Ha publicado SST o Microchip alguna documentación que aclare esta frase tan ambigua?

En mi experiencia, el fabricante de todos los chips flash MLC y algunos chips flash SLC más nuevos exigen que una vez que se haya escrito una página, la página debe debe borrarse antes de escribir nuevamente esa página, incluso si solo quieres cambiar de 1 bit a 0 bit. (Esto se denomina "regla de una sola escritura" en el artículo de YAFFS .)

En mi experiencia, todos los chips flash más antiguos le permiten cambiar de 1 bit a 0 bit sin un ciclo de borrado, incluso si ese bit está en una página o incluso un byte que ya tenía otros bits programados a cero - Se puede programar una página de flash varias veces entre borrados. (Esto se denomina "escritura múltiple" en el artículo de YAFFS).

La hoja de datos del fabricante es una promesa condicional que el fabricante le hace a usted. Mientras 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 escrita previamente, 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 han cambiado. Sin embargo, como 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 tal actividad no autorizada causa que el tiempo de retención de datos y la resistencia sufran, debido a la perturbación del programa, la sobre programación, la captura de carga, efectos similares a martillo de fila DRAM , etc.

"El esquema de uso de la memoria influye en la tasa de error de bits. Programación de páginas parciales, programación de páginas no secuenciales dentro del bloque, lectura excesiva por bloque sin borrado, así como número de operaciones de lectura no iguales dentro de un solo número de aumento de bloque de los errores de lectura molestar ". - Michal Jedrak. "Memoria flash NAND en sistemas integrados".

"La perturbación del programa se produce cuando un bit se programa involuntariamente de un" 1 "a un" 0 "durante un evento de programación de páginas. Este error de bit puede ocurrir en la página que se está programando o en Otra página en el bloque. Las condiciones de tensión de polarización en el bloque durante la programación de la página pueden causar una pequeña cantidad de corriente para hacer un túnel hacia las celdas de memoria cercanas. Página parcial repetida Los intentos de programación seguirán agravando esta condición ". - Douglas Sheldon y Michael Freie. " Perturbar 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 con la programación aleatoria en el bloque y aplicando múltiples escrituras parciales a las páginas." "Mitigación de fallos repentinos de NAND de Yaffs"

    
respondido por el davidcary
0

Es muy probable que el software de programación que está utilizando ya esté escribiendo los 256 bytes "requeridos". Aparece "como" lo que le da la capacidad de escribir de uno a 256 bytes, pero sospecho que lo que está haciendo es OR-ing en el (los) byte (s) que desea con una "máscara" de 256 "FF". Si esto es correcto, entonces puede "de forma segura" escribir cualquier byte una vez , sin tener que borrar todos los 4K bytes. Si se escribe una suma de control fuera de su control, entonces, lo más probable, se creará una suma de control no válida cuando escriba otro byte en un segmento escrito previamente. Las implicaciones de esto, depende del chip.

Si su software de programación no hace el "OR-IN", 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 256 bytes de FF, y escriba el segmento en la página deseada.

Si cualquiera de los dos métodos funciona con cualquier chip en particular, puede ser fácilmente determinado por usted. ¡Escriba en los primeros 128 bytes, escriba en los segundos 128 bytes, verifique que los primeros 128 bytes NO estén "desordenados"!

    
respondido por el Guill

Lea otras preguntas en las etiquetas