Cómo escribir en una tarjeta SD más pequeña que el tamaño de sector (512 bytes)

1

Estoy escribiendo una biblioteca para la gestión del sistema de archivos FAT en STM32 para fines de aprendizaje. Quiero usar una tarjeta SD / MMC conectada a través del bus SPI.

Hago algunas pruebas con una imagen de disco en la PC (emulo disk_read (), disk_write () con fseek (), fread (), fwrite ()) para entender los principios de FAT.

Acabo de terminar la implementación del protocolo SD / MMC y me doy cuenta de que no podía leer / escribir bloques más pequeños que un sector (512 bytes) Para que la operación de lectura no sea un problema, puedo ignorar los bytes no utilizados (concepto de ventana), pero para escribir parece más complicado ...

Escuché sobre el principio de 'leer-modificar-escribir', así que si comprendo necesito leer todo el sector que quiero modificar. Por ejemplo, si escribo en un archivo, en el peor de los casos, necesito:

  • Lea, modifique y escriba el sector en la tabla de asignación de archivos para actualizar los índices de clúster.
  • Lea, modifique y escriba el sector en el archivo del nuevo clúster asignado.
  • Lea, modifique y escriba el sector donde reside la entrada del archivo.

Entonces, en este caso, necesito 3 lecturas y 3 escrituras, suena como una pérdida de tiempo, ¿confirma esto?

Esto también implica que para escribir necesito un búfer de al menos 512 bytes, ¿confirma esto?

(Intento leer el código fuente de FatFs pero es complicado, pero es complicado. Me pregunto cómo se las arregla para escribir con un búfer de menos de 512 bytes. ¿Puedes explicarlo?)

Creo que con un mecanismo de caché puedo limitar el número de lecturas (antes de modificar-escribir), pero esto implica aumentar la cantidad de RAM utilizada.

¿Puede ayudarme a verlo más claramente en esta "barrera de sector de escritura (lectura-modificación-escritura) '?

    
pregunta rom1nux

1 respuesta

1
  

Lea, modifique y escriba el sector en la tabla de asignación de archivos para actualizar los índices de clúster.

Debe hacerlo solo cuando cambie el número de clusters para un archivo. Un tamaño de clúster habitual es de 32 KB.

  

Lea, modifique y escriba el sector en el archivo del nuevo clúster asignado.

No, solo tienes que escribir los sectores de datos modificados. Puede omitir el ciclo de lectura cuando escribe los datos en la tarjeta en pasos de 512 bytes.

  

Lea, modifique y escriba el sector donde reside la entrada del archivo.

La mayoría de las implementaciones de FAT escriben esto una vez en la creación del archivo y una vez en el cierre del archivo (para actualizar el tamaño cuando se escribe).     

respondido por el Turbo J

Lea otras preguntas en las etiquetas