Tamaño del sector de la tarjeta SD

1

Estoy trabajando con la tarjeta SD usando el microcontrolador AVR. Mi pregunta es, ¿podemos cambiar el tamaño del sector de las tarjetas SD o se han corregido 512 bytes en el caso de la tarjeta SD? ¿Qué cosas deberían tenerse en cuenta si deseo cambiar el tamaño de sector de la tarjeta SD con MCU?

Esperando sugerencia, gracias.

    
pregunta Sidk

3 respuestas

2

El tamaño de sector de una tarjeta SD es fijo, por lo que no puede cambiarlo. La mayoría de las tarjetas utilizan un tamaño de sector de 512 o 1024 bytes. Para obtener el mejor rendimiento de la tarjeta, debe intentar escribir en bloques del tamaño del sector (o múltiplos), ya que los sectores se escriben internamente en su totalidad.

    
respondido por el erebos
1

Recomiendo encarecidamente seguir el estándar tanto como sea posible, y no cambiar el tamaño del bloque de 512 bytes. Además, recomiendo emitir explícitamente el comando CMD16 con un tamaño de bloque de 512 bytes durante la inicialización de la tarjeta para garantizar la compatibilidad.

Las razones son las siguientes:

  • Varias (o quizás muchas) tarjetas rechazarán la configuración / uso de un tamaño de bloque distinto de 512 bytes. No creo que quiera enfrentarse al problema cuando está bloqueado a un fabricante específico o incluso a un modelo de la tarjeta debido a la limitación de bloque de 512 bytes que no establece;
  • los sistemas de archivos se utilizan de manera predeterminada para el tamaño de sector de 512 (no confundir con el tamaño del clúster), por lo que 512 bytes es realmente un tamaño muy conveniente desde la perspectiva del software;
  • probablemente no tiene sentido admitir operaciones de bloque parcial, agregará complejidad al código y dificultará la interoperabilidad;

Si realmente desea acceder a la tarjeta con transferencias de datos más grandes, use CMD18 / CMD25 (bloque de lectura / escritura múltiple) en su lugar. Aumentará el rendimiento, pero tendrá un poco más de complejidad al administrar correctamente el flujo de datos y detener la ejecución del comando.

    
respondido por el Anonymous
0

Es posible que pueda aumentar el tamaño del bloque de datos devuelto por la tarjeta SD cuando emite un comando SINGLE_BLOCK_READ (CMD17). Esto se hace con CMD16 y el tamaño de bloque máximo / mínimo permitido depende de la versión SD, así como si está utilizando una tarjeta SDSC, SDHC o SDXC. Por lo que recuerdo, las versiones posteriores de las tarjetas SDSC admiten una longitud de bloque de 1024 bytes y creo que SDHC y SDXC admiten hasta 4096 bytes de longitud de bloque (¡verifique!). Deberá leer las especificaciones de la SD para obtener más detalles.

Sin embargo, incluso si cambia la longitud del bloque, tendrá que tener esto en cuenta en su controlador FAT, suponiendo que la tarjeta tenga el formato FAT. El campo BYTES_PER_SEC del Bloque de parámetros de inicio generalmente está configurado en 512 bytes por la mayoría de los formateadores SD para una máxima compatibilidad con la mayoría de los lectores de tarjetas. Esto significa que un solo bloque lee == un solo sector FAT, para la mayoría de los lectores. Si incrementas el tuyo a, digamos, 1024, sin embargo, significa que un solo bloque lee == 2 sectores FAT, asumiendo que el sistema FAT utiliza sectores de 512 bytes y no estás formateando las tarjetas para tus necesidades específicas. Esto significa que si desea leer / modificar un solo sector, tiene que marcar 2 sectores - ineficiente. Sin embargo, puede formatear la tarjeta y cambiar BYTES_PER_SEC para que coincida con la longitud del bloque de 1024 bytes de la tarjeta (esto depende del tipo de FAT), aunque tendrá que tener cuidado para asegurarse de que los campos afectados se ajusten de manera similar.

Aumentar la longitud del bloque también significa aumentar el tamaño del búfer que utilizas para almacenar los bloques que has leído. En general, es mucho más seguro aumentar la longitud del bloque y tener en cuenta esto en su código que modificar los campos FAT y arriesgarse a que la tarjeta sea ilegible en algunos lectores de tarjetas (aunque los lectores de Microsoft siempre admitirán cualquier cosa dentro de las especificaciones FAT).

    
respondido por el TisteAndii

Lea otras preguntas en las etiquetas