Autor Tema: Daño en memoria flash  (Leído 8860 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Daño en memoria flash
« en: 18 de Abril de 2017, 13:46:38 »
Hola amigos del foro, tengo una memoria flash SST25VF064C, mi equipo esta escribiendo datos periódicamente en ella, pero estoy teniendo problemas de que algunos datos salen corruptos, se daña un byte o varios byte aleatorios en los sectores, un byte se puede corromper y quedar ya dañado en la memoria o esta se va dañando por sectores.

Gracias por su ayuda.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Daño en memoria flash
« Respuesta #1 en: 18 de Abril de 2017, 15:00:36 »
Citar
mi equipo esta escribiendo datos periódicamente en ella,

¿Y ya cumplio su vida util ?, las Flash poseen muy pocos ciclos de escritura/lectura.

Que vida aproximada tenias calculado?, cada cuanto esta grabando un sector determinado?

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Daño en memoria flash
« Respuesta #2 en: 18 de Abril de 2017, 15:32:08 »
La verdad no había pensado en el tiempo de vida útil, yo estoy escribiendo cada minuto y tengo ya como 2 meses así, en el datasheet dice esto: "Endurance: 100,000 Cycles (typical)".

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Daño en memoria flash
« Respuesta #3 en: 18 de Abril de 2017, 15:44:50 »
.

Con esa frecuencia de borrado es normal que ya te esté fallando, la memoria flash no está pensada para eso. Para esas tareas usa una eprom, que también las tienes con acceso por SPI.


Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Daño en memoria flash
« Respuesta #4 en: 18 de Abril de 2017, 16:24:29 »
100K ciclos es bastante optimista: ¿tienes ECC?
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Daño en memoria flash
« Respuesta #5 en: 18 de Abril de 2017, 16:28:47 »
100K ciclos es bastante optimista: ¿tienes ECC?

Segun lo que dice el datasheet  :D

No tengo ECC.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Daño en memoria flash
« Respuesta #6 en: 18 de Abril de 2017, 16:31:28 »
Entonces quítale un cero, suerte que te quede alguna celda viva  :D :D :D
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Daño en memoria flash
« Respuesta #7 en: 18 de Abril de 2017, 16:43:51 »
A ver a ver. Que la calculadora sirve para algo.

2 meses = 60 días = 1440 horas = 86400 minutos = 86400 escrituras.
Ya llevas más de 2 meses y solo aguanta 100000 escrituras.
Pues eso.

Método de los SSD: escribe cada día en un sector diferente hasta que llenes toda la memoria y al final vuelves a comenzar desde el inicio.

Si tienes 1Mbyte de datos y la memoria tiene 100Mbytes, puedes hacer durar a la flash 100 veces más (17 años)

Un saludo.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Daño en memoria flash
« Respuesta #8 en: 18 de Abril de 2017, 16:54:58 »
Método de los SSD: escribe cada día en un sector diferente hasta que llenes toda la memoria y al final vuelves a comenzar desde el inicio.

Si tienes 1Mbyte de datos y la memoria tiene 100Mbytes, puedes hacer durar a la flash 100 veces más (17 años)

En esta parte no entiendo algo, cada escritura es un ciclo, eso es lo que me imagino, pero si escribo en sectores distintos, igual seria un ciclo gastado, así que no aumentaría el tiempo de vida, a menos de que lo de los ciclos sea por sector.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:Daño en memoria flash
« Respuesta #9 en: 18 de Abril de 2017, 17:01:21 »
IngRandall: 100K ciclos por sector. Por eso mismo o "revientas" un sector y pasas al siguiente o vas "dando vueltas" como comenta Picuino.
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Daño en memoria flash
« Respuesta #10 en: 18 de Abril de 2017, 17:03:42 »
Los ciclos van por sector (lee el datasheet para saber más).
Lo mejor es que almacenes en RAM y escribas todo un sector a la vez cada menos tiempo.
Con una pequeña batería o un supercapacitor puedes mantener alimentación hasta escribir los últimos datos en flash.
Alterna los sectores para que todos se escriban y repartes así el desgaste.
Un saludo.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Daño en memoria flash
« Respuesta #11 en: 18 de Abril de 2017, 17:32:21 »
La verdad, he leído el datasheet, y no he visto eso que me dice que es por sector o no lo he entendido,

http://ww1.microchip.com/downloads/en/DeviceDoc/25036B.pdf

Lo otro que no entiendo es que se habla en el datasheet que uno borra sectores de 4kb, 32kb o 64kb, pero para escribir, se hace de 256 en 256, yo pensé que se escribía en los mismo sectores de 4kb.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Daño en memoria flash
« Respuesta #12 en: 18 de Abril de 2017, 17:47:37 »
Citar
Lo mejor es que almacenes en RAM y escribas todo un sector a la vez cada menos tiempo.

Por que?

Lo mejor para mi es que cree una especie de buffer circular con los datos, pero no veo sentido grabar toda el bloque a la ves. Pienso que es lo mismo grabar 10 bytes seguidos versus 1 byte cada 1 segundo por 10 segundos. Aunque algunas flash especifican la cantidad de veces de escritura a respetar, pero que su datasheet no dice nada. Casi siempre excede la cantidad maxima de escritura, es decir si el sector posee 256 bytes y programa de a bytes deberia superar esto. Podria tener una mayor consideracion grabando de a 2 numeros por si las dudas. Por ejemplo este micro:

http://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.0.pdf

En la Flash dice:

nWRITE,BLOCK :  Amount of writes allowed in a block between erase - 181
Y para grabar un bloque necesita 128 escrituras ( porque los bloques son de 512 bytes y debe grabar de a 4 bytes )

Lo que si gasta la flash es el ciclo de borrado, eso lo tengo seguro. Y lo anterior en caso de que no se tenga en cuenta.

---------

De todas formas pienso igual que todos, una Flash no deberia ser considerada para esta operacion. Usualmente son de 10k ciclos minimos como dice manwewe. Por ahi pense en decir una NVRAM pero luego vi lo que costaban y me quede llorando en una esquina.

Citar
La verdad, he leído el datasheet, y no he visto eso que me dice que es por sector o no lo he entendido,

En realidad tenes que pensar que cada lugar tiene 10k ciclos de borrado/escritura ( el combo de borrado y luego de esctitura), como tenes que borrarlo para escribirlo y no creo que escribas 2 veces sobre el mismo valor, se podria decir que por cada byte tenes 1 ciclo para cambiarlo (que el influyente es el borrado), pero como borras por "sector", estas borrando todo el sector completo (bytes que tal ves no usas), por ende cuando borras consumis un ciclo para todo el sector a pesar que no le escribas nada.

Citar
Lo otro que no entiendo es que se habla en el datasheet que uno borra sectores de 4kb, 32kb o 64kb, pero para escribir, se hace de 256 en 256, yo pensé que se escribía en los mismo sectores de 4kb.

Eso depende de la construccion interna de la Flash, al menos por lo que parece, solo hicieron para un maximo de 256 bytes la instruccion, pero podes escribir 1 byte a 256bytes si queres. Un pequeño resumen antes de seguir: Es para economizar en el circuito de control.
Me explico un poco mas ahora, si ellos querian podrian haber creado un "registro" para incrementar internamente mas grande y asi poder grabar mas bytes con una sola instruccion, pero decidieron hacerlo de 8 bits maximo, Vos le das la direccion inicial y a grabar. Como el circuito de incremento interno solo maneja 8bits lo que pasa es que si das una direccion de memoria que no sea 0 los 8bits de menor peso y luego tratas de escribir por demas, lo unico que logras es un wrap a la "pagina" ( a los limites dados por esos 8bits).

Suponete la direccion:

1101 1111 0000 0000 1111 1111

Donde no pusimos A7-A0 en 0, el circuito interno solo puede incrementar de 1 pero solo los ultimos 8 bits,  los demas A24-A8 son "fijos" desde que se los diste con esa instruccion.
El primer dato se graba en esa direccion, si queres grabar un byte no hay problema, al incrementar no incrementa todo la direccion ( para disminuir el circuito interno de suma y limitarlo a 8bits y no 24 por ejemplo), sino que incrementa los ultimos 8, asi que el proximo dato es en:

1101 1111 0000 0000 0000 0000
« Última modificación: 18 de Abril de 2017, 17:54:35 por KILLERJC »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Daño en memoria flash
« Respuesta #13 en: 18 de Abril de 2017, 17:58:48 »
Table 14: Reliability Characteristics
Parameter Minimum Specification Units Test Method
Endurance 10,000 Cycles    JEDEC Standard A117

Page-Program
– 256 Bytes per page

Flexible Erase Capability
– Uniform 4 KByte sectors

Este es el tamaño mínimo de página que se va a ver afectado por un borrado antes de volver a escribir.

Un saludo.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re:Daño en memoria flash
« Respuesta #14 en: 19 de Abril de 2017, 10:05:06 »
Después de mirar varias opciones, creo que cambiare la memoria por esta:

https://www.digikey.com/product-detail/en/toshiba-semiconductor-and-storage/TC58BVG0S3HTAI0/TC58BVG0S3HTAI0-ND/5226304

Una EEPROM de 1Gbit, necesito en realidad 3MBytes, y lo mas cercano a esto es esta memoria, también mire las SRAM pero era mucho mas cara y si la apago se pierde todo, así que creo que la mejor opción es esta.

Lo que no he visto es el numero de veces que puedo escribir en ella.