Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: stm32f407 + uSD (SDIO) + FAT
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
rav38
Здравствуйте все!

Осваиваю работу stm32f4 с uSD, используя STM32F4-DISCOVERY (stm32f407vgt6) + плата STM32F4DIS-BB

Проект собрал, взяв библиотеки из STM32Cube_FW_F4_V1.14.0 и оттуда же из примеров вытащил библиотеки FatFs.

Используется работа в полинге.
Из примеров оставил main, где сначала форматируется карта, а потом идет запись текстового файла.

В процессе форматирования на n-ном блоке происходит вылет по флагу SDIO_FLAG_TXUNDERR.

Если поставить паузы между блоками по 1 мс, вылетов нет, но после завершения работы программы карта при подключении к винде требует форматирования.

Если убрать вызов ф-ции f_mkfs на уже отформатированной карте успешно создается текстовый файл.

Добавил проверку флага ReadyForData перед каждой записью блока (не нашел к ф-циях HAL такого) -ситуация не изменилась.
Выкинул FreeRTOS, оставил только инициализацию контроллера, проблема осталась.

В настройках SDIO:
SDIO_CLOCK_BYPASS_DISABLE
SDIO_HARDWARE_FLOW_CONTROL_DISABLE

Что не так делаю?
Ruslan1
насколько я помню свою битву с подключением SD карточки к SDIO шине в F407, исходники от ST содержат ошибки и их нужно править. Попробуйте в интернете поискать и тут на Электрониксе тоже.
Но было это много лет назад, может уже и поправили.
rav38
Продолжил возьню с картой.
Перевел обмен на DMA, вылет по флагу исчез. Программа вроде бы как полностью отрабатывает - форматирует, записывает строку на карту, что-то там считывает и говорит ОК.
На это хорошее заканчивается, начинается интересное

При проверки карты виндой требуется форматирование. Если карту вставить сразу форматированной и писать на нее строку все норм.

Под отладчиком обратил внимание на особенность с количеством блоков, записываемых функцией mkfs. Их количество неуклонно растет, хотя вроде бы должно быть постоянным. Сейчас уже порядка 360 000, хотя при первых попытках было меньше 200 000. Сам процесс форматирования идет минут 20.

Скачал библиотеку от Чена, буду ее прикручивать.
rav38
Прикрутил, Новый год, новая библиотека - форматирование старое кривое.

Код проходит вроде без ошибок, но карта виндой по-прежнему не читается.
Форум смотрел, вроде все настройки DMA и SDIO вроде учел и надо ковырять файл stm32f4xx_hal_sd.c

Отсюда вопрос - ни у кого нет исправленной библиотеки или хотя бы подсказки что править?
Ruslan1
Форматирование- это самая сложная из возможных функций и, по-моему, самая редко применяемая. То есть мало кто использует и еще меньше кто расскажет о глюках если они не у каждого встречаются.

Начните с простого
0. Чтение служебной информации диска и файла
1. Чтение из файла
2. Создание файла
3. Добавление в файл
4. Удаление файла
(1-4) в произвольном порядке, несколько раз, ну скажем раз сто.

Работает стабильно? Теперь переходите к форматированию.

Для того чтобы понять что не так, советую поставить программу, которая показывает сектора и прочее, сырые данные диска, и стандартные структуры тоже. Мне WinHex нравится.
rav38
Цитата(Ruslan1 @ Jan 8 2017, 17:24) *
Форматирование- это самая сложная из возможных функций и, по-моему, самая редко применяемая. То есть мало кто использует и еще меньше кто расскажет о глюках если они не у каждого встречаются.

Начните с простого
0. Чтение служебной информации диска и файла
1. Чтение из файла
2. Создание файла
3. Добавление в файл
4. Удаление файла
(1-4) в произвольном порядке, несколько раз, ну скажем раз сто.

Работает стабильно? Теперь переходите к форматированию.

Для того чтобы понять что не так, советую поставить программу, которая показывает сектора и прочее, сырые данные диска, и стандартные структуры тоже. Мне WinHex нравится.


Огромное спасибо! Вопрос решился.
Посыпаю голову пеплом. Была ошибка в портировании библиотек в части определения размера карточки. Карточка считывалась верно, но была лишняя локальная переменная в SD_ioctl, из которой подставлялось мусорное значение емкости карты.

В любом случае было даже полезно - изучил досконально интерфейс и библиотеки)))
Ruslan1
Цитата(rav38 @ Jan 10 2017, 09:15) *
Огромное спасибо! Вопрос решился.

sm.gif
Кстати, в FatFs нужно внимательно смотреть, чтобы версия документации и сорцов совпадали
Конкретно у меня это был флаг FA_OPEN_APPEND, который был уже описан, но еще не обрабатывался в коде.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.