Перейти к содержанию
    

STM32F4Discovery + SD карта через SDIO

Собственно тема.

 

Примеров именно под Discovery я не нашёл, пришлось выдирать и переправлять из примеров к плате STM3240G-EVAL.

Получившийся код прилагаю.

 

Сама карта подключена проводками к соответствующим ногам проца:

PC8 - DAT0

PC9 - DAT1

PC10 - DAT2

PC11 - DAT3

PC12 - CLK

PD2 - CMD

 

На всех ногах, кроме CLK стоят pull-upы 47к на +3в. Как собственно нарисовано в схеме STM3240G-EVAL :rolleyes: .

Выключателей CardDetect и ReadOnly нет вообще (разъём коряво припаяли, они всё время замкнуты на корпусе :biggrin: ). Соответственно от проца они отключены и не опрашиваются.

 

Опрос:

      // Init SD card
      sdErr = SD_Init ( );
      
      if ( sdErr == SD_OK )
      { // Карта инициализирована
        isSdPresent = true;
        STM_EVAL_LEDOn ( LED_GREEN );       // Светодиодик

        strcpy ( buffer, "Card init OK\r\n" );
      } // if
      else
      {
        isSdPresent = false;
        STM_EVAL_LEDOn ( LED_RED );         // Ошибка инициализации карты

        sprintf ( buffer, "Card init FAIL, code = %d\r\n", (int)sdErr );
      } // if

 

Результат - код ошибки 2 - CRC Error. buffer выводится на комп через виртуальный USB COM-порт.

Пытался регулируовать скорость макросом SDIO_TRANSFER_CLK_DIV - вообще виснет.

Сама карта (даже 2) рабочая. В картридерах работают и по SPI (на проце AT91SAM7S256) тоже.

 

Помогите, кто может.

 

Ещё непонятно, что такое

#define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80)

 

Буфер обмена с картой? Тогда чего адрес фиксированый? Может не туда улетает?

 

Спасибо.

sdio_sd.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё непонятно, что такое

#define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80)

Видимо регистр SDIO_FIFO, описанный п в 26.9.15 SDIO data FIFO register.

 

Тогда чего адрес фиксированый?

Отчего же ему не быть фиксированным, если он - регистр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про SDIO_FIFO понятно, спасибо.

 

Поправил там одну ошибочку, ошибки CRC никуда не делись, но размер карты считывается верно (если не проверять код завершения).

Завтра попробую читать сектора.

 

Где-то на буржуйских сайтах читал, что там длина проводов влияет. На выходных мож перепаяю, проверю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заработало всё. Виной всему оказались длинные интерфейсные провода.

Перепаял на короткие (до 4 см) - работает нормально.

Правы были буржуи ... И про pull-upы наа всех ногах карты, кроме CLK не забыть.

 

Прилагаю подправленный код драйвера SD карты. Из 1-го поста не брать, там ошибка.

sdio_sd.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу длины проводов. Сейчас тоже мучаю micro SD карту с STM32 в режиме SDIO. Длина проводов 20 см.

Но для теста установил: #define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x76)

При этом SDIO Data Transfer Frequency = 400Khz. Неужели и при такой частоте будет влиять длина проводов или косяк в проекте? Хотя там где я его взял сказали что он полностью рабочий.

 

Схема подключения:

Podklyuchenie-kartyi-pamyati.png

SD-karta.png

 

 

Тестовый проект во вложении.

sdio.zip

Изменено пользователем flopix

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уменьшил длину проводов до 5 см. Стало еще хуже.

Если при SDIO_TRANSFER_CLK_DIV = 4 раньше зависало на n ом блоке, то сейчас зависает уже при попытке открыть файл.

 

При больших значениях делителя работает со сбоями как и раньше.

 

Наверно все таки какой то косяк в железной части.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В режиме SDIO 1 бит читает без сбоев на максимальной скорости. Значит все таки проблема в проводах.

 

При этом файл размером 20 мбайт читает при размере блока чтения

512 42c

1024 21c

2048 13c

4096 11c

8192 9c

16384 9c

32768 8c

 

При этом скорость чтения получается около 2,5МБайта в секунду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...