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

3

Estoy usando una tarjeta micro SD de 4Gb de Kingston en un proyecto integrado y accedo 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 . / p>

¿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?

    
pregunta ivarec

2 respuestas

5

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

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

    
respondido por el akohlsmith
0

Una interfaz 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 (por lo que es necesario almacenar los datos en otro lugar). Si ese fuera el único búfer en el chip, la escritura de datos continuos requeriría que el sistema alterne entre la alimentación de datos al chip (mientras la matriz de memoria flash esté inactiva) y esperar a que se escriban los datos (es decir, el resto del sistema). estaría inactivo). Agregar un segundo búfer, y permitir que se escriba mientras se almacenan los datos en flash, permitirá que los procesos se superpongan. Si el más lento de los dos procesos tomara el tiempo t1 en forma aislada y el más rápido tomara el tiempo t2, esto mejorará el tiempo para escribir cada sector desde (t1 + t2) a t1, un ahorro de t2 / (t1 + t2) . Si los dos procesos toman aproximadamente la misma cantidad de tiempo, esto podría duplicar la velocidad.

Agregar un búfer adicional puede ser útil en algunos escenarios, pero rara vez ofrecerá algo cerca de 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 la cantidad de datos de un sector en el controlador es entre 1/3 y 3 veces el tiempo requerido para que el controlador la 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. Agregar un búfer adicional, sin embargo, no ayudará mucho a las cosas; si uno tiene memoria adicional disponible, se puede utilizar 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 sectores de este tipo también muchos para una sola estructura de datos "plana"; aún así, cuanta más información relacionada con el mapeo se pueda almacenar en la memoria RAM, menos tiempo habrá de gastar en leerlo desde flash.

    
respondido por el supercat

Lea otras preguntas en las etiquetas