Hola! Creo que desde la versión 1.8 está disponible la función:
UINT8 FAT_OpenFileAndRead(UINT8 *NameShort,UINT16 NClusP, UINT8 Type, UINT8 *Buffer)Donde:
NameShort, sería el nombre corto del archivo;
NClusP, donde está ubicado el archivo (DIRECTORIO_RAIZ u otra carpeta);
Type, modo de acceso ('o' Abrir y leer, 'r' continuar lectura de archivo) y
Buffer, puntero al buffer donde guardar los 512 valores leídos. Tener en cuenta eso, va leyendo sectores. La función retorna, FAT_ERROR si ocurre cualquier problema, FAT_OK si leyó el sector correctamente y FAT_READ_COMPLETE si ya se termino de leer todo el archivo. Esta función la cree para leer archivos de audio, solo pensando en eso, pero puede modificarse si necesitan que la misma devuelva otros datos, como tamaño del archivo, etc.
Entonces se podría implementar:
UINT8 Status;
Status=FAT_OpenFileAndRead(Nombre,DirectorioRaiz,'o',&Buffer[0]);
// Envia El contenido de buffer
if(Status!=FAT_READ_COMPLETE){
do{
Status=FAT_OpenFileAndRead(Nombre,DirectorioRaiz,'r',&Buffer[0]);
// Envia El contenido de buffer
}while(Status!=FAT_READ_COMPLETE);
}
Después está la función:
BOOL FAT_OpenFile(UINT8 *NameShort,UINT16 NClusP)Esa función utiliza
BOOL FAT_GetFile(UINT16 NClus,UINT32 SizeFile,UINT32 *SizeRead ) para enviar todo el archivo, podes ver que hay un while:
do{
//#WARNNING **** En FAT_GetFile se envian datos leidos por RS232 ***
//printf("%c",BufferFAT[i]);
i++;
*SizeRead++;
}while((i<512)&&(*SizeRead!=SizeFile));
Respecto a USB vs RS232, sin dudas que utilizar RS232 es más sencillo.
Saludos!