Independientemente de cómo intente proceder desde allí, su primer paso es claro: debe realizar una función que lea un bloque (512 bytes) de datos de la tarjeta SD. Para hacerlo, deberá emitir comandos SD (o MMC) para inicializar y seleccionar la tarjeta. Estos implican comandos como IR A IDLE ESTADO, IR A NO IDLE ESTADO, ENVIAR CONDICIONES DE OPERACIÓN. Luego lea el registro de OCR para ver si se trata de una tarjeta de alta capacidad o no (estas direcciones se tratan de manera diferente, para la tarjeta antigua una dirección es un byte; para la tarjeta HC una dirección es un número de bloque (LBA)), y configure la longitud de bloque de 512 bytes. Luego, puede dar el comando READ_BLOCK para obtener datos reales del disco. Esto parece complicado (y lo es) pero puede buscar en Google con los nombres de los comandos para encontrar un montón de código que inicializa las tarjetas SD.
Primero lea el bloque 0 (primeros 512 bytes) de la tarjeta SD; termina con 0x55aa. Entonces continúa desde allí. Me han dicho que una biblioteca de código llamada fatfs puede hacer el trabajo de manejar discos FAT bastante bien, pero solo para leer archivos, el código para encontrar y leer archivos de un sistema de archivos FAT no es tan complejo. Pero echa un vistazo a fatfs: me han dicho que solo debes proporcionarle las funciones de bloque de lectura + escritura y se encargará del resto.