Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4 - FatFS(R0.08a) - uSD, некоректная запись массива
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mad_mouse
Здравствуйте всем! На плате STM32F4Discovery с материнкой STM32F4DIS-BB пытаюсь запустить файловую систему FatFs (версия R0.08a)... вставляю микро-сд карту (SanDisk 4Gb 4 класс) и пытаюсь туда писать данные порциями по 1 килобайту за раз и так в цикле с интервалом 600мс. Так вот, ровно половина массива пишется корректно (символы s), а вторая половина массива вместо символов записываются нули. И так при каждой записи массива. (подобное поведение и при других, более крупных массивах) Кто может сталкивался с подобным... Как лечить? (использую исходный проект из комплекта поставки отладочной платы и экспериментирую с ним) Помогите! Никогда не сталкивался с файловыми системами и вот тут такой затык...
Вот проверочный код...

Код
    // открываем лог-файл...
    ret = f_open(&file, "system.log", FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
    if (ret)
        {fault_err(ret);}
    STM_EVAL_LEDInit(LED5);

    /* для теста */
    for(test_cnt = 0; test_cnt < ARRSIZE; test_cnt++)
        {
        test_arr[test_cnt] = 's';
        }
    while(1)
        {   STM_EVAL_LEDOn(LED5);

            f_lseek(&file, f_size(&file));
            f_write(&file, test_arr, ARRSIZE, &bw);
            f_sync(&file);

            STM_EVAL_LEDOff(LED5);

        vTaskDelay(600);
        }
Golikov A.
А половина ли или 512 байт?
Потому что если 512 байт - то это размер сектора СД карты. Вероятно есть какие-то ограничения то ли времяные, то ли на размер пакета для записи. Надо читать описание на файловую систему

вот из описания
The read/write pointer of the file object advances number of bytes written. After the function succeeded, *bw should be checked to detect the disk full. In case of *bw is less than btw, it means the volume got full during the write operation. The function can take a time when the volume is full or close to full.


то есть имеет смысл проверять что записалось сколько записывали. так же приписка The function can take a time when the volume is full or close to full, не понятно как этот тайм отслеживать...

и вот интересная картинка
http://elm-chan.org/fsw/ff/en/appnote.html#critical
раздел Using Mutiple-Sector Write

Есть подозрение что вы должны сами отслеживать границу секторов и выжидать паузы...
mad_mouse
Спасибо за ответ... но уже сам нащол. оказывается, в драйвере SDIO заботливо была вставлена пуля, которая не позволяла мультиблочную запись... как результат, писались всегда только первые 512 бай, а все остальные не писались (вернее оставались 0). щас вроде хаработало... тестирую
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.