Estoy leyendo un archivo de la Flash SPI con FATFS sistema de archivos, en STM32F103 de la plataforma de ejecución de FreeRTOS. Puedo leer correctamente Archivo de tamaño menor que el 2048, pero si se lee un archivo de mayor tamaño de 2048, (Como estoy leyendo en bloques de 128 bytes) solo lee hasta 2048 bytes y f_read devuelve 'FR_INT_ERR' error al puntero de Archivo mover a la ubicación por encima de 2048 bytes.
A continuación en mi código para Leer la prueba de escritura. f_size es mostrar el tamaño de archivo correcto. Pero cuando he leído, da error, Si me focefully ejecutar el bucle hasta el final del archivo para lectura de datos siempre devuelve el último fragmento antes de 2048 bytes de nuevo y de nuevo.
FRESULT xRes;
FIL xFile;
const char cWBuffer[] = "Hello FAT World! 0123456789abcdef";
char cRBuffer[128]
xRes = f_mount(0, &s_xVolume);
printf("\r\n mount result %d successful!",xRes);
#ifdef FAT_MAKEFS_TEST
// this delay is to prevent the FAT corruption after a systenm reset.
Delay_us( 200 );
printf("\r\n MAKE FS Test");
printf("\r\n format the ext FLASH");
printf("\r\n please wait...");
xRes = f_mkfs(0, SFD_FORMAT, 4096 *10 );
printf("\r\n Format result : %d ",xRes);
assert(xRes == FR_OK);
#endif
#ifdef FAT_WRITE_TEST
Delay_us( 1000 );
printf("\r\n WRITE Test");
printf("\r\n open file: W+CA");
xRes = f_open(&xFile, filename, FA_WRITE|FA_CREATE_ALWAYS);
printf("\r\n Open result : %d ",xRes);
assert(xRes == FR_OK);
printf("\r\n write file");
for(i=0;i<1024;i++)
{
xRes = f_write(&xFile, cWBuffer, strlen(cWBuffer), &n);
//printf("\r\n Write result : %d, bytes = %d ",xRes,n);
assert(xRes == FR_OK);
//assert(n == strlen(cWBuffer));
}
printf("\r\n close file");
xRes = f_close(&xFile);
assert(xRes == FR_OK);
#endif
#ifdef FAT_READ_TEST
Delay_us( 100 );
printf("\r\n READ Test");
printf("\r\n open file: R+OE");
xRes = f_open(&xFile, filename, FA_READ|FA_OPEN_EXISTING);
printf("\r\n Open result : %d ",xRes);
assert(xRes == FR_OK);
fs = f_size(&xFile);
printf("\r\n read file size = %d",fs);
i=0;
fs = f_size(&xFile);
while(i<fs)
{
xRes = f_read(&xFile, cRBuffer, sizeof(cRBuffer), &m);
printf("\r\n Read result : %d, bytes read = %d, i =%d ",xRes,m,tread);
tread += m;
assert(xRes == FR_OK);
//assert(m == strlen(cWBuffer));
}
printf("\r\n Total bytes read = %d",tread);
printf("\r\n close file");
printf("\r\n file content:");
printf("%s :\n",cRBuffer);
xRes = f_close(&xFile);
assert(xRes == FR_OK);
#endif
printf("\r\n test success!!!");