STM32F7 + FatFs = FR_NOT_READY

Сейчас я использую CubeMx 4.23.0 и пакет FW для STM32F7 1.8.0. MCU - STM32F746 на плате Core746i. Все создается CubeMx автоматически.

main.c:

    SCB_EnableICache();
    SCB_EnableDCache();
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_SDMMC1_SD_Init();
    MX_USB_DEVICE_Init();
    MX_FATFS_Init();

    HAL_Delay(3000);
    DebugString("start OK");

    uint8_t res = 0;
    FATFS SDFatFs;  
    FIL MyFile;     /* File object */
    char SD_Path[4]; 

    res = f_mount(&SDFatFs, (TCHAR const*)SD_Path, 0);
    sprintf(DebugStr, "f_mount = 0x%02X", res);
    DebugString(DebugStr);

    res = f_open(&MyFile, "test.txt", FA_READ);
    sprintf(DebugStr, "f_open = 0x%02X", res);
    DebugString(DebugStr);

sdmmc.c:

void MX_SDMMC1_SD_Init(void)
    {

      hsd1.Instance = SDMMC1;
      hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
      hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
      hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
      hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B;
      hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
      hsd1.Init.ClockDiv = 7;

   //HAL_SD_Init(&hsd1);
   // ^^^^^ I also tried this here
   //HAL_SD_ConfigWideBusOperation(&hsd1, SDMMC_BUS_WIDE_4B)
   //^^^^ and this
            }

В случае f_mount (& SDFatFs, (TCHAR const *) SD_Path, 0) ‹- здесь 1 (принудительное монтирование), вывод будет:

  1. f_mount = 0x03
  2. f_open = 0x01

С 0 (не монтировать сейчас) вывод:

  1. f_mount = 0x00
  2. f_open = 0x03

Значение 0x03 - FR_NOT_READY, но официальная информация об этом довольно расплывчата

Вещи, которые я пробовал:

  1. Добавление HAL_SD_Init (& hsd1) в MX_SDMMC1_SD_Init (), так как я не нашел, где происходит инициализация GPIO SD-карты.
  2. SD-карта noname на 2 ГБ, карта Transcend 1 ГБ.
  3. Разные hsd1.Init.ClockDiv от 3 до 255.
  4. Перепаял все полностью.
  5. Переключение на 4-битную шину с помощью HAL_SD_ConfigWideBusOperation (& hsd1, SDMMC_BUS_WIDE_4B);
  6. Включение и выключение подтягиваний.

Но карта по-прежнему не монтируется. Он отформатирован в FAT, работает на ПК, файлы, которые я пытался открыть, существуют, но пусты.

Как заставить его смонтировать? Заранее спасибо!


person ub0baa    schedule 23.07.2018    source источник
comment
Файлы, которые вы пытались открыть, существуют? Test.txt существует? Даже если крепление вышло из строя? Вы получаете FR_NOT_READY, потому что 1. На аппаратном уровне есть проблемы, проверьте, сопоставлены ли выводы FAT-FS 2. FAT не найден. Но вы говорите, что уже проверили это. Попробуйте смонтировать как f_mount (fs,, 0); т.е. смонтировать с путем в качестве корневого пути. Я не уверен, что вы передаете массив нулевых символов.   -  person clmno    schedule 25.07.2018
comment
Проверьте аппаратные карты в коде. Тест f_mount (fs`` 0); Если это тоже не удается, то с вашим оборудованием что-то не так.   -  person clmno    schedule 25.07.2018


Ответы (4)


возникла проблема с точной версией cubemx. помогло обновление stm32cubemx.

person ub0baa    schedule 12.09.2018

Можешь попробовать

`f_mount (0," путь ", 0);

`после вызова f_open. это может сработать. Если функция с принудительным монтированием завершилась неудачно с FR_NOT_READY, это означает, что объект файловой системы был успешно зарегистрирован, но

том в настоящее время не готов к работе

. Будет предпринята попытка монтирования тома для последующей функции file / directroy.

Если в реализации уровня дискового ввода-вывода отсутствует обнаружение асинхронного изменения носителя, прикладная программа должна выполнять функцию f_mount после каждого изменения носителя, чтобы принудительно очищать объект файловой системы.

person yagami    schedule 05.10.2018

Изменение всех выводов SDIO, кроме SDIO_CK, на подтягивание согласно Эта тема мне подходит

person Onur Öztürk    schedule 14.11.2019

Попробуйте комментировать MX_USB_DEVICE_Init(), посмотрите, что будет.

person El Taura    schedule 18.08.2018
comment
Вы можете уточнить? Почему это может решить проблему? - person CertainPerformance; 18.08.2018
comment
Как это решит проблему? USB и FATFS совершенно не связаны! Поскольку он был сгенерирован с использованием CubeMX OP, возможно, контакты SPI неправильно настроены. - person clmno; 04.09.2018