hd44780 0 21 января, 2013 Опубликовано 21 января, 2013 · Жалоба Собственно тема. Примеров именно под 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 нет вообще (разъём коряво припаяли, они всё время замкнуты на корпусе ). Соответственно от проца они отключены и не опрашиваются. Опрос: // 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 21 января, 2013 Опубликовано 21 января, 2013 · Жалоба Ещё непонятно, что такое #define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80) Видимо регистр SDIO_FIFO, описанный п в 26.9.15 SDIO data FIFO register. Тогда чего адрес фиксированый? Отчего же ему не быть фиксированным, если он - регистр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 22 января, 2013 Опубликовано 22 января, 2013 · Жалоба Про SDIO_FIFO понятно, спасибо. Поправил там одну ошибочку, ошибки CRC никуда не делись, но размер карты считывается верно (если не проверять код завершения). Завтра попробую читать сектора. Где-то на буржуйских сайтах читал, что там длина проводов влияет. На выходных мож перепаяю, проверю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба Заработало всё. Виной всему оказались длинные интерфейсные провода. Перепаял на короткие (до 4 см) - работает нормально. Правы были буржуи ... И про pull-upы наа всех ногах карты, кроме CLK не забыть. Прилагаю подправленный код драйвера SD карты. Из 1-го поста не брать, там ошибка. sdio_sd.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flopix 0 29 августа, 2013 Опубликовано 29 августа, 2013 (изменено) · Жалоба По поводу длины проводов. Сейчас тоже мучаю micro SD карту с STM32 в режиме SDIO. Длина проводов 20 см. Но для теста установил: #define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x76) При этом SDIO Data Transfer Frequency = 400Khz. Неужели и при такой частоте будет влиять длина проводов или косяк в проекте? Хотя там где я его взял сказали что он полностью рабочий. Схема подключения: Тестовый проект во вложении. sdio.zip Изменено 29 августа, 2013 пользователем flopix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flopix 0 31 августа, 2013 Опубликовано 31 августа, 2013 · Жалоба Уменьшил длину проводов до 5 см. Стало еще хуже. Если при SDIO_TRANSFER_CLK_DIV = 4 раньше зависало на n ом блоке, то сейчас зависает уже при попытке открыть файл. При больших значениях делителя работает со сбоями как и раньше. Наверно все таки какой то косяк в железной части. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flopix 0 31 августа, 2013 Опубликовано 31 августа, 2013 · Жалоба В режиме SDIO 1 бит читает без сбоев на максимальной скорости. Значит все таки проблема в проводах. При этом файл размером 20 мбайт читает при размере блока чтения 512 42c 1024 21c 2048 13c 4096 11c 8192 9c 16384 9c 32768 8c При этом скорость чтения получается около 2,5МБайта в секунду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться