Dandula 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба Всем доброго дня! Пытаюсь соединить STM32F407 и SD-карту для работы с файловой системой посредством интерфейса SDIO. Подключение стандартное. Detect пин на PH13. На всех пинах, кроме PC12 (SDIO_CK) включена встроенная подтяжка к питанию. Работу с файловой системой должна взять на себя FatFs. С SDIO работаю вручную в 4-битном режиме (до инициализации в 1-битном). Пробую записать файл: файловую систему библиотека определяет, файл создается, но информация в него не записывается. Если сделать точку останова в функции записи блока (перед возвратом из функции), то информация все-таки записывается, но не более 1023 байт. Размер блока - 512 байт. Если попытаться таким способом записать 1024 байта, то программа виснет на функции f_closе() и файл остается пустым. Переделанный файл diskio.c в аттаче. Запускаю так (main.c): #include "stm32f4xx.h" #include "main.h" #include "ff.h" #include "ffconf.h" static inline void Init_All(void); char buf[1024]; int main() { for (int i = 0; i < 1024;) { buf[i++] = '1'; buf[i++] = '2'; buf[i++] = '3'; buf[i++] = '4'; } Init_All(); FATFS FATFS_Obj; FIL file; UINT nWritten; volatile FRESULT res; res = f_mount(&FATFS_Obj, "0:", 1); res = f_open(&file, "Имя файла.txt", FA_CREATE_ALWAYS | FA_WRITE); res = f_write(&file, buf, 1023, &nWritten); res = f_close(&file); res = f_mount(NULL, "0:", 1); for (;;) { Background(); } } static inline void Init_All(void) { SysTick_Config(SystemCoreClock / 1000); } inline void Background(void) { return; } void SysTick_Handler(void) { extern void disk_timerproc(void); static uint8_t tick10 = 0; if (++tick10 == 10) { disk_timerproc(); tick10 = 0; } } Буду благодарен за любую помощь! :rolleyes: diskio.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 27 ноября, 2015 Опубликовано 27 ноября, 2015 · Жалоба Всем доброго дня! Пытаюсь соединить STM32F407 и SD-карту для работы с файловой системой посредством интерфейса SDIO. Подключение стандартное. Detect пин на PH13. На всех пинах, кроме PC12 (SDIO_CK) включена встроенная подтяжка к питанию. Работу с файловой системой должна взять на себя FatFs. С SDIO работаю вручную в 4-битном режиме (до инициализации в 1-битном). Пробую записать файл: файловую систему библиотека определяет, файл создается, но информация в него не записывается. Если сделать точку останова в функции записи блока (перед возвратом из функции), то информация все-таки записывается, но не более 1023 байт. Размер блока - 512 байт. Если попытаться таким способом записать 1024 байта, то программа виснет на функции f_closе() и файл остается пустым. Переделанный файл diskio.c в аттаче. Я посмотрел ваш код в аттаче. могу сказать следующее-вы просто запихнули данные в карту,а ведь надо карте еще и запрограммировать данные,поэтому нужно еще читать статус карты(cmd13 если мне память не изменяет)...более того,согласно описанию спецификации на карту,перед всеми операциями необходимо дождаться,пока карта не встанет в режим "transition state" еще нюанс-проверьте частоту тактирования,можно даже начать работать на частоте инициализации карты,потом с каждой новой компиляцией увеличивать ее до максимально возможного и еще нюанс-используйте DMA,причем не советую,а рекомендую это сделать. У STM несколько своеобразная периферия(касаемо не только SDIO),и когда я отлаживал пошагово свой проект,у меня постоянно было то rxoverrun,то txunderrun error.Аж до психов порой доходило..Сел,разобрался,пристегнул DMA,проблема исчезла...здесь у меня в аттаче немного проекта (keil 4.73)и спецификация на карту и программулина на винду,которя посекторно оперирует с дисками и покажет вам,что вы там туда понаписалиV6.ZIP если есть вопросы то email [email protected] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 ноября, 2015 Опубликовано 28 ноября, 2015 · Жалоба Еще раз посоветую посмотреть как я сделал - работающий проект тут https://188.134.5.254/browser/hfreceiver/trunk/sdcard.c - недостающее рядом в hardware.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 23 апреля, 2017 Опубликовано 23 апреля, 2017 · Жалоба Всем доброго дня!! Народ, делал ли кто нибудь подключение нескольких SD-карт на одну шину? Если да,то можно ли ногу CMD в контроллере SDIO STM32 сконфигурировать как OPEN_DRAIN (по типу I2C) или все-таки надо ставить внешний демультиплексор для "chip select"? ответы в стиле "возьми SSD+cortex A7" неприемлемы из-за технико-финансовых ограничений проекта...проект-типа многоканальный аудиорегистратор с хранением фраз в течении года Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 24 апреля, 2017 Опубликовано 24 апреля, 2017 · Жалоба SDIO STM32 сконфигурировать как OPEN_DRAIN (по типу I2C) или все-таки надо ставить внешний демультиплексор для "chip select" Зачем? Повесить на SPI и CS-ов - вагон без всяких open drain. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romas2010 1 24 апреля, 2017 Опубликовано 24 апреля, 2017 · Жалоба Зачем? Повесить на SPI и CS-ов - вагон без всяких open drain. Тоже склоняюсь к этому мнению....Хоть и некоторым образом некошерно,но надежно...спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться