FATFS возвращает FR_DISK_ERR при записи в разные периоды времени - PullRequest
0 голосов
/ 10 января 2019

Я работаю над проектом, в котором я записываю разные строки данных на 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, кажется, вызывает ошибку.

...