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

 
 
 
Reply to this topicStart new topic
> STM32F207. Mass-Storage на основе библиотеки от ST, Зависание при чтении данных с диска
kovigor
сообщение Sep 22 2011, 07:33
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Добрый день !

Проблема: при чтении данных с диска (в его качестве используется SD CARD) проект подвисает, Может подвиснуть сразу же после начала чтения, а может и не сразу, а прочитав пару сотен MBytes. Если же в функции, читающей данные с карточки и инициирующей передачу по USB, выключить чтение с карточки и вместо данных с нее писать в буфер конечной точки, например, 0, 1, 2, 3, 4 и т.п., то все работает идеально.
И вот еще что. Ясно, что при чтении данных с диска система может запрашивать блоки разной длины. Проект разбивает такие запросы на блоки длиной <= 4096 байт и по мере поступления IN - пакетов от машины подчитывает эти блоки с карточки. Так вот, замечено, что если эти, всегда разной длины, запросы игнорировать, а вместо этого читать с карточки всегда одно и то же кол-во байтов (т.е., секторов; я проходил все значения, от 1 до 8 секторов) то проект тоже работает отлично. Естественно, с диска читается полная околесица, но это не важно - мне лишь бы с него что-то читалось, для проверки.

И вот я думаю, это проблема проекта или моей самодельной платки с USB HS на борту ? Из того, что я описал, выходит, что дело все-таки в проекте. Кто-нибудь пробовал этот проект в работе ?

Вот он:
http://www.st.com/internet/com/SOFTWARE_RE...-device_lib.zip

Внутри:
\usb_device_examples\msc\mdk_arm
Go to the top of the page
 
+Quote Post
kovigor
сообщение Sep 22 2011, 10:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(kovigor @ Sep 22 2011, 10:33) *
И вот я думаю, это проблема проекта или моей самодельной платки с USB HS на борту ?


Доказано, что дело в платке, а точнее, похоже, в трассировке и проч. Сбои зависят не от длин читаемых с карточки блоков, а от их содержимого. Для эксперимента на карточку во все сектора был записан код-заполнитель: 0, 1, 2, 3, ... 255, 0, 1, ... и т.д. Это тот самый код, который я, отключая чтение с карточки, писал в буфер конечной точки, и который сбоев никогда не вызывал. Потом я включил чтение с карточки, и оно отлично заработало. Естественно, на ней записан мой код-заполнитель, его я и читаю. Но если на ту же карточку записать реальные данные, начинаются сбои. Вывод: дело в самой платке. и неудивительно: платка высокочастотная, но собрана в кустарных условиях. USB HS PHY и сама карточка подключаются к МК пучками проводничков, так что все вполне закономерно. Остается покупать заводской DevKit или переразводить платку по всем правилам и заказывать ее на заводе ...

P.S. Еще замечено, что сбои почти всегда происходят при чтении одних и тех же файлов. Так что все ясно ...

Сообщение отредактировал kovigor - Sep 22 2011, 10:28
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 22:22
Рейтинг@Mail.ru


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