Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ищу рабочий пример FatFs SD STM32F103
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
misyachniy
Для проверки взял пример USB Mass Storage для STM32F103.
Выловил ошибку в схеме - не подтянутую линию CMD.
Пример компилируется и под Windows, успешно детектируется и SD читается/пишется.

Нашел пример
https://bitbucket.org/antlabs_dev/fatfs-sd-stm32f103/src

В примере в файле sdcard.c зависает функция переключения ширины шины: SD_EnableWideBusOperation(SDIO_BusWide_4b); точнее FindSCR(RCA, scr);

Карточка не выходит на готовность.

В примере USB Mass Storage переключение на 4 битную шину происходит в файле sd_card_mode.c
Код
  if(DiskMMC != _SdDskCtrlBlk.DiskType)
  {
    // Use wide bus for SD
    res = _CardRCA;
    if((_SdSendCmd(CMD55,&res) != SdOk) ||
       !(res & 0x100))
    {
      return(SdCardError);
    }
    // Set bus width 4bits
    res = 2;
    if(_SdSendCmd(ACMD6,&res) != SdOk)
    {
      return(SdCardError);
    }
    SDIO->CLKCR |= 1UL << 11;
  }


По отладчику видно что функция переключение происходит успешно.

Пробовал в примере от bitbucket убирать переключение на 4 битную шину.
DMA не завершает операцию.

Подтягивать все выводы интерфейса как-то не хочеться.
Ведь проект USB Mass Storage работает.

Может есть гдето заведомо рабочий проект под FatFs с SD для STM32F103?
kan35
Есть гарантированно рабочий пример в STM32СubeMX.
kleverd
Если есть сомнения в схемотехнике, подключения платы к USB можно проверить плату прошив бутлоадер, который прикидывается флешкой.
А обмен данными с SD картой можно проверить, прошив контроллер чем-нибудь типа Бутлоадера Maple - ардуиноподобной среды с кучей примеров работы с ФАТ.

И вообще складывается впечатление, что дело не в прошивке. Возможно помехи лезут.

Можно еще посмотреть здесь - _ttp://electronix.ru/forum/index.php?showtopic=103917
misyachniy
В схеме я оставил подтяжку только на линию CMD.

Чтение заработало. Использован файле cd_card_mode.c из проекта USB Mass Storage.

При пошаговом проходе было замечено, что монтирование fat, открытие файла и чтение из него происходит успешно.

Пришлось установить задержку short_delay(); //vovka, в функции
static inline SdState_t _SdRead(pInt8U pData, Int32U Add, Int32U Length)
Код
    // wait receive complete
    while (DMA_GetFlagStatus(DMA2_FLAG_GL4) == RESET)
    {
      StatusReg = SDIO->STA;
      if(StatusReg & (  SDIO_IT_DTIMEOUT
                      | SDIO_IT_STBITERR
                      | SDIO_IT_DCRCFAIL
                      | SDIO_IT_RXOVERR))
      {
        break;
      }
    }

    short_delay(); //vovka
      
    if(DMA_GetFlagStatus(DMA2_FLAG_TE4))
    {
      return(SdDmaError);
    }


Думал, когда разберусь с записью, то расскажу о результатах или весь проект выложу.
Но пока до этого не дошел.
Решал и решаю другие вопросы.
Запись отложена на будущее.
Как бы стек отложенных задач не переполнился ;-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.