62 votos

¿Es cierto que una tarjeta SD/MMC hace la nivelación de desgaste con su propio controlador?

No encuentro ninguna información fiable al respecto. No tengo la especificación completa del hardware de la tarjeta SD/MMC.

¿Es cierto? ¿Mi aplicación de alto nivel no necesita preocuparse por el nivel de desgaste cuando trabaja con estas tarjetas?

EDITAR

¿Podría alguien confirmar que nivelación del desgaste ¿está garantizado por la especificación SD? Quiero estar seguro, porque parece que la mayoría de los vendedores lo hacen, pero la especificación no lo exige.

49voto

raldi Puntos 5114

Trabajo para una empresa que solía ser miembro de la asociación SD, estamos familiarizados con la especificación 2.0 (SDHC). La especificación de la tarjeta SD NO tiene ninguna entrada para la nivelación del desgaste. Eso depende completamente del fabricante de la SD para manejarlo si así lo decide. Hemos visto que algunos probablemente lo hacen, mientras que otros no lo hacen (cuidado con las tarjetas SD de imitación súper baratas). Es posible que la SDXC haya cambiado eso para incluir la nivelación del desgaste, pero no estoy seguro de ello. Desgraciadamente, la única manera de demostrarlo es conseguir la especificación oficial. Lo más probable es que se pueda encontrar en línea, pero la asociación SD quiere que pagues por ella.

Como nota al margen, tomar una tarjeta de 2GB y escribirla de principio a fin una y otra vez da un promedio de 10TB antes de que la tarjeta esté muerta y ya no sea escribible. Además, las tarjetas SD no te avisan cuando los datos están mal, es decir, no devuelven un error de E/S como lo hace un disco duro de PC. Esto podría no ser un problema para los diseños embebidos, ya que 10TB es un montón de datos, pero podría ser un factor para alguien.

25voto

Ron Harlev Puntos 4923

Es cierto. Las tarjetas MicroSD contienen un chip NAND flash unido a un microcontrolador (ARM) encapsulado en un plástico negro. http://www.bunniestudios.com/blog/?p=898 explica.

Al final del post de seguimiento http://www.bunniestudios.com/blog/?p=918 Bunnie plantea que integrar el controlador probablemente cueste menos que probar el flash por adelantado.

Citando el manual de producto de la tarjeta SD de SanDisk: "1.9 Nivelación del desgaste. La nivelación de desgaste es una parte intrínseca de la funcionalidad de borrado de la tarjeta SD, que utiliza la memoria NAND". Puede leerlo entero en el ficha técnica de una tarjeta de la marca SanDisk .

20voto

kyle Puntos 274

Sí, las tarjetas SD/MMC tienen controladores que hacen la nivelación del desgaste. Si no lo tuvieran, podrías destruir una en cuestión de minutos con los patrones de escritura equivocados.

De hecho, eso es un problema para algunos proyectos integrados. No hay absolutamente ninguna manera (aparentemente) de saber qué sectores podrían estar desgastados en cualquier momento, por lo que un ciclo de energía en el momento equivocado puede destruir los datos en cualquier lugar de la tarjeta, sin importar dónde CREES que estás escribiendo. (no preguntes cómo lo sé :) )

Las tarjetas SD deben utilizarse con un sistema que garantice un cierre limpio del sistema (o al menos que se permita completar las escrituras), o se producirá (eventualmente) una pérdida de datos.

EDITAR

El problema es que el proceso de nivelación del desgaste está totalmente oculto. Cualquier sector del disco podría ser movido en cualquier momento (intercambiado con la página escrita), y si la energía fallara en medio de ese proceso ese sector aleatorio podría corromperse.

Aunque hay formas razonablemente seguras de implementar este movimiento, no está en ninguna especificación, así que no puedes confiar en que la tarjeta lo haga. Podrías probar una tarjeta, hacer que funcione, luego el fabricante podría cambiar la implementación sin cambiar el número de pieza y estarías jodido.

De las pruebas realizadas, el controlador de mis tarjetas SD NO hace esto de forma segura en absoluto.

Puede que busque una tarjeta SD de "alta fiabilidad" que vi anunciada específicamente para la tolerancia a los fallos de alimentación... pero entonces hay que confiar en que el fabricante lo haga correctamente, y yo no lo hago. Realmente quiero un control directo sobre los borrados de página. Todavía estoy tratando de entender esto.

12voto

Alex Andronov Puntos 178

Cualquier tipo de tarjeta SD que utilice cualquier tipo de memoria flash NAND convencional va a tener que utilizar algún tipo de virtualización de sectores, ya que ningún dispositivo flash NAND convencional puede soportar el borrado de sectores individuales de 512 bytes, y ningún dispositivo flash NAND convencional de tamaño significativo sería capaz de producir un rendimiento que estuviera dentro de un orden de magnitud de ser incluso marginalmente aceptable si cada intento de escribir un sector requiriera que el dispositivo copiara todos los sectores en el bloque de borrado de ese sector (incluso a la RAM), luego borrara el bloque y escribiera todos los sectores de nuevo. La mayoría de las técnicas de virtualización de sectores son intrínsecamente un poco de desgaste. Supongo que el mayor problema de variación entre los dispositivos de calidad y las imitaciones será el grado en que un dispositivo intente activamente nivelar los bloques, en lugar de utilizar simplemente una asignación de bloques pseudoaleatoria y esperar que eso produzca resultados aceptablemente cercanos a la uniformidad. En la práctica, creo que incluso la asignación aleatoria/esperada sería adecuada en la mayoría de los casos.

9voto

Mukesh Puntos 21

Sandisk tiene un papel blanco que explica la lógica de nivelación del desgaste en sus tarjetas, y continúa dando estimaciones de la vida de la tarjeta en una serie de escenarios. Resumen ejecutivo: a menos que se machaque la tarjeta sin parar, durará décadas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X