реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> stm32f407 + uSD (SDIO) + FAT, Вылет по флагу SDIO_FLAG_TXUNDERR
rav38
сообщение Jan 5 2017, 14:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



Здравствуйте все!

Осваиваю работу 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

Что не так делаю?
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 6 2017, 09:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



насколько я помню свою битву с подключением SD карточки к SDIO шине в F407, исходники от ST содержат ошибки и их нужно править. Попробуйте в интернете поискать и тут на Электрониксе тоже.
Но было это много лет назад, может уже и поправили.
Go to the top of the page
 
+Quote Post
rav38
сообщение Jan 7 2017, 15:35
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



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

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

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

Скачал библиотеку от Чена, буду ее прикручивать.
Go to the top of the page
 
+Quote Post
rav38
сообщение Jan 8 2017, 12:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



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

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

Отсюда вопрос - ни у кого нет исправленной библиотеки или хотя бы подсказки что править?
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 8 2017, 13:24
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



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

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

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

Для того чтобы понять что не так, советую поставить программу, которая показывает сектора и прочее, сырые данные диска, и стандартные структуры тоже. Мне WinHex нравится.
Go to the top of the page
 
+Quote Post
rav38
сообщение Jan 10 2017, 07:15
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 12-06-12
Из: Москва
Пользователь №: 72 275



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

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

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

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


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

В любом случае было даже полезно - изучил досконально интерфейс и библиотеки)))
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jan 10 2017, 11:21
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(rav38 @ Jan 10 2017, 09:15) *
Огромное спасибо! Вопрос решился.

sm.gif
Кстати, в FatFs нужно внимательно смотреть, чтобы версия документации и сорцов совпадали
Конкретно у меня это был флаг FA_OPEN_APPEND, который был уже описан, но еще не обрабатывался в коде.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 11:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016