Peripecias con memorias Flash

La gente que me conoce de cerca sabe que he estado dando jugo con este tema producto de un pequeño traspié en el trabajo, prometo que esta será la última vez que mencione el tema :-P. Lo que pasa es que muchas veces uno se encuentra con esas cosas que “todos saben” y por lo tanto nadie explicita, provocando grandes dolores de cabeza que en realidad eran muy simples de solucionar.

Sin más rodeos, estaba trabajando hace unas semanas en la interfaz en Verilog para una memoria flash serial (Spansion S25FL256SAGNFI001), la cual tiene la importante misión de guardar los datos de configuración de un par de FPGAs, por lo tanto el arranque de las mismas y el funcionamiento del equipo depende de escribir y leer esa memoria. Poco a poco fuí haciendo cada uno de los bloques necesarios, un software para el PC que me permitiera cargar un archivo binario a la FPGA que maneja la flash, un core en verilog que recibiera los datos, un core de administración de “alto nivel” (entre muchas comillas) de la flash y el que maneja físicamente la interfaz SPI que finalmente llega a los pines de la dichosa memoria.

Luego de varias semanas de pruebas, correcciones y el típico proceso iterativo de estas cosas, llegué a un punto en que estaba generando correctamente las secuencias de escritura y lectura de la flash, pero sólo leía basura. Estuve cerca de una semana completa frustrado probando mil cosas mirando el analizador lógico hasta que probé escribir en otra dirección. Voilá! ahora los datos que leía estaban correctos!

Con una sonrisa en mi rostro volví a probar la escritura, esta vez con otros datos para poder observar el patrón en el analizador lógico. Cuando ejecuté nuevamente el comando de lectura para ver orgulloso mi obra terminada, nuevamente el terror volvió a mi rostro: otra vez basura.

Y así pasaron un par de días en los que no sabía si correr en círculos o rodar en el suelo, hasta que un día temprano todo tuvo sentido: La memoria flash traía puros 1s cuando estaba nueva, el comando de borrado lo que hace es restaurar los bits a 1, entonces eso quiere decir que cuando escribo paso los 1s a 0s donde corresponda… 1+1.. IDIOTA!!!!! Todo el tiempo estuvo funcionando y yo no sabía que tenía que borrar el sector antes de escribirlo!!!!

Protesto, nadie me lo dijo, no lo decía la hoja de datos, no estaba en ninguna parte esa restricción porque es “obvio” que uno tiene que borrar las memorias antes de escribirlas o no? con mi pendrive es más fácil!

Analizador Lógico
El analizador lógico muestra los comandos de escritura, primero el Write Enable, luego el Read Status para verificar que puedo escribir y finalmente el comando de escritura seguido por la dirección y los datos que en este caso son todos 0

2 Comentario a “Peripecias con memorias Flash”

  • creo que lo que nadie te dijo va implícito en la tecnología de la memoria

    • En efecto, es una característica propia de las memorias flash… Por eso es bueno saber y entender con qué está lidiando uno…

      Más de un año después y todavía me siento un tonto por no haberlo sabido pero bueh…

      Que no le pase a usted!! :P

Agregar comentario

Categorías

Enlaces

Estadísticas


eXTReMe Tracker