FATFS возвращает FR_DISK_ERR при записи в разные периоды времени
Я работаю над проектом, в котором я записываю разные строки данных на SD-карту. Я программирую плату Arduino Uno, используя AVR с Atmel ICE. Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что я не могу писать с разными интервалами.
У меня есть функция обратного вызова, которая вызывает 2 флага с интервалом 5 мс и 10 мс. Они называются flagSD и flagEEPROM. Для тестирования я написал 2 простые функции.
while(1)
{
if(flagSD)
{
flagSD = false;
fr = f_open(&File, file_name, FA_OPEN_APPEND | FA_WRITE);
if(fr == FR_OK)
{
f_printf(&File,"Hi\r\n");
}
else if(fr = FR_DISK_ERR)
{
PORTD |= (1 << 6);
}
f_close(&File);
}
if(flagEEPROM)
{
flagEEPROM = false;
fr = f_open(&File, file_name, FA_OPEN_APPEND | FA_WRITE);
if(fr == FR_OK)
{
f_printf(&File,"Bye\r\n");
}
f_close(&File);
}
}
Я создаю новый файл до начала цикла while. В результате я получаю файл.txt со следующими данными:
Hi
Bye
Bye
После этого вывод 6 на порту D имеет высокий уровень, что означает, что инструкция по открытию файла вернула FR_DISK_ERR. Я уже сделал сообщение об этом, но я думаю, что проблема была недостаточно ясна, вот ссылка: FATFS возвращает FR_DISK_ERR во второй раз, когда я использую идентичную строку кода
Когда я удаляю флаги и просто использую цикл while, данные записываются постоянно. Результатом является бесконечный список Hi, сопровождаемый Bye.
Я уже попробовал несколько способов найти обходной путь. Я пытался не закрывать файл - это привело к тому, что вообще не записывал никаких данных. Я попытался открыть файл в начале цикла while и закрыть его в конце - данные записываются, но только пока. Он больше не пишет "Привет", но PORT D остается низким, поэтому FR_DISK_ERR отсутствует, но данные не записываются.
Я хочу, чтобы все данные были записаны без появления сообщения об ошибке. FATFS не совсем ясно об ошибке на своем веб-сайте, но функция DISK_READ, кажется, вызывает ошибку.