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.pdfEn 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.
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.
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 1111Donde 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