¿Es normal que una tarjeta micro SD tenga mayor velocidad de escritura para los primeros bloques?

Estoy usando una tarjeta micro SD de 4Gb de Kingston en un proyecto integrado y estoy accediendo a ella con un controlador SPI de bajo nivel.

Todo funciona bien, excepto por un comportamiento extraño: después de un bloque dado (alrededor de 16 Kb de la tarjeta), la velocidad de escritura cae a 1/3 de la velocidad del primer bloque .

¿Esto es normal? Tal vez los primeros bloques de una tarjeta SD sean de una memoria de mayor velocidad, no lo sé. ¿Alguien tiene información sobre esto?

Respuestas (2)

Sí, esto es normal. Muchas tarjetas SD tienen un búfer de escritura (piense en ello como un caché de disco). Si lee la hoja de datos del componente específico, debe detallar el tamaño de la memoria caché y las velocidades de acceso del dispositivo en general.

Si cree que la velocidad se basa en el bloque, la prueba es fácil: escriba en la tarjeta SD en algún desplazamiento más allá de donde cree que están los "bloques rápidos", deberían ser igual de rápidos para las primeras escrituras.

Una interfaz de SD a flash debe mantener un sector que se está escribiendo en la RAM hasta que se complete la escritura, para permitir la posibilidad de que el sector que se está escribiendo falle (lo que hace necesario almacenar los datos en otro lugar). Si ese fuera el único almacenamiento en búfer en el chip, entonces escribir datos continuos requeriría que el sistema alternara entre alimentar datos al chip (mientras la matriz de memoria flash está inactiva) y esperar a que se escriban los datos (lo que significa que el resto del sistema estaría inactivo). Agregar un segundo búfer y permitir que se escriba mientras los datos se almacenan en la memoria flash permitirá que los procesos se superpongan. Si el más lento de los dos procesos tomaría el tiempo t1 de forma aislada y el más rápido tomaría el tiempo t2, esto mejorará el tiempo para escribir cada sector de (t1+t2) a t1, un ahorro de t2/(t1+t2) .

Agregar almacenamiento en búfer adicional puede ser útil en algunos escenarios, pero rara vez ofrecerá algo cercano a la relación precio/rendimiento de ese segundo búfer. Ofrecerá un aumento de velocidad del 25 % o más si el tiempo para cargar los datos de un sector en el controlador está entre 1/3 y 3 veces el tiempo requerido para que el controlador los almacene en la matriz de memoria. Dado el costo relativamente pequeño de un búfer de ese tamaño, hay pocas razones para no agregarlo. Sin embargo, agregar almacenamiento en búfer adicional no ayudará mucho; si uno tiene memoria adicional disponible, puede utilizarse mejor para el almacenamiento en caché de direcciones parciales [una tarjeta SD de cualquier tamaño debe poder reasignar de forma independiente cada sector de 512 bytes, y una tarjeta de 32 GB tendrá 64 millones de esos sectores, también muchos para una única estructura de datos "plana"; aún,