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) '?