Estoy utilizando la placa STM32F4DISCOVERY y estoy tratando de leer un archivo de una tarjeta micro SD y tratar los datos. Estoy usando las siguientes funciones
int main(void)
{
int i = 0;
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_SDIO_SD_Init();
MX_TIM10_Init();
MX_FATFS_Init();
MX_USART2_UART_Init();
create_filter_bank();
ret = f_mount(&filesystem, buff_mount, 1);
ret = f_open(&file, WANTED, FA_READ);
ret = f_read(&file, header, 78, &br);
ret = acquire_voice_from_file(&file);
f_sync(&file);
f_close(&file);
// Some other code
}
FRESULT acquire_voice_from_file(FIL* file){
file_pointer = HEADER_WAV_SIZE;
acquired_frames = 0;
FRESULT read_res;
while(acquired_frames < NUM_ACQUIRE_FRAMES){
file_pointer += FFT_SIGNAL_BYTES/2; // Need a correlation between frames
read_res = read_frame_from_file(file);
acquired_frames++;
// Some Other Code
}
return read_res;
}
FRESULT read_frame_from_file(FIL* file){
int i = 0;
FRESULT res;
res = f_lseek(file, file_pointer);
res = f_read(file, bytes, FFT_SIGNAL_BYTES, &br);
if(res != FR_OK){
return res;
}
for(i = 0; i < FFT_SIGNAL_LENGTH; i++){
curr_frame[i] = (bytes[2*i+1] << 8) + bytes[2*i];
// Multiplying by Hamming window
curr_frame[i] *= (0.54 - 0.46*cos(2*PI*i/((float)FFT_SIGNAL_LENGTH)));
}
return res;
}
Todos los valores constantes, como WANTED, FFT_SIGNAL_BYTES, etc., se declaran correctamente en el archivo de encabezado. En la función principal, f_mount, f_open y f_read, devuelve el resultado FR_OK y los datos se leen correctamente. Pero luego, en la función "adquirir_voice_from_file", se leen con éxito uno o dos cuadros, y luego obtengo el valor FR_DISK_ERR de la función f_read en la función "read_frame_from_file". Supongo que mi configuración de hardware es correcta ya que los primeros bytes se leen correctamente, pero no logro resolver el problema y leer correctamente los siguientes marcos. El tamaño del marco que intento leer es de 2048 bytes (FFT_SIGNAL_BYTES = 2048). ¿Hay algún problema para leer archivos grandes con FATFS? Y si es así, ¿hay alguna solución? Muchas gracias por tu ayuda.