Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/96: Рейтинг темы: голосов - 96, средняя оценка - 4.78
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
#1

STM32 F105/107 USB host работает не со всеми устройствами

05.09.2013, 03:58. Просмотров 17321. Ответов 16
Метки нет (Все метки)

Раскуриваю работу с USB хостом. Столкнулся с проблемой, что не все юсб-устройства отвечают на первичный SITUP реквест. Причем, не отвечают именно флешки. Мыши, клавы - поголовно всё ОК, мобила HTC - ок, 3G модем от мегафона - ок. А из имеющихся флешек заработала только одна. На остальных получаю прерывание TXERR в ответ на попытку послать самый первый SITUP реквест на чтение divice дескриптора.

Собственно, TXERR может быть в следующих случаях (по реф. ману):
CRC check failure
Timeout
Byt stuff error
False EOP

Ошибка CRC отпадает, т.к. homdshake-пакеты чексумму не содержат
Byt stuff error тоже отпадает, т.к. homdshake-пакеты не могут содержать 7 двоичных единиц подряд и посему не нуждаются в бит-стаффинге
Остается таймаут и левый EOP. Сниффинг шины показал, что подключенные устройства тупо не отвечают, т.е. получаем таймаут.

Пробовал варьировать время ресета, ставил задержку до и/или после ресета, игрался со значением TOCAL в регистре GUSBCFG, подавал питание выше 5 вольт (изначально у меня около 4.8 было) - всё без толку. Те устройства, которые работают, - работают стабильно, а те, что не работают, те не работают. Т.е. проблема не плавает при подключении одного и того же устройства. Может флешки тупо не поддерживают работу в режиме FS??? Хотя по стандарту обязаны поддерживать. Может кто сталкивался с этим?? А то я уже весь лоб расшиб....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 03:58
Ответы с готовыми решениями:

STM32 Использование 3G USB модемов (USB Host)
Никому не случалось использовать 3G модемы с библиотекой USB от STM ? С этими...

STM32F427 USB Host
Доброго времени суток. Пытаюсь сделать usb host, использую библиотеку...

STM32L100RC + USB Host
Добрый день, имеется отладочная плата с процом STM32T100RC. Возможно ли к...

USB-host <-> Ethernet
Всем доброго вечера! Коллеги, подскажите, на чем можно собрать конструкцию...

Поддержка USB Host
Добрый день. Передо мной стал вопрос: как определить наличие USB Host в том...

16
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
05.09.2013, 13:01 #2
Цитата Сообщение от phomtom tord
Byt stuff error тоже отпадает, т.к. homdshake-пакеты не могут содержать 7 двоичных единиц подряд и посему не нуждаются в бит-стаффинге
Между прочим, бит-стаффинг делается после шести единиц, а не семи. Это что-то меняет?

Цитата Сообщение от phomtom tord
подавал питание выше 5 вольт (изначально у меня около 4.8 было) - всё без толку.
Играть с 5V imho бесполезно, все части флэшки питаются от 3.3V. Поступающие из Vusb пять вольт контроллер флэшки первым делом превращает в 3.3V (у контроллера есть внутренний линейный стабилизатор).
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
05.09.2013, 13:29 #3
Цитата Сообщение от OtyxPM
Между прочим, бит-стаффинг делается после шести единиц, а не семи. Это что-то меняет?
Ничего не меняет, т.к. устройства вообще ничего не отвечают.

Цитата Сообщение от OtyxPM
Играть с 5V imho бесполезно, все части флэшки питаются от 3.3V. Поступающие из Vusb пять вольт контроллер флэшки первым делом превращает в 3.3V (у контроллера есть внутренний линейный стабилизатор).
Ну бесполезность я уже и так понял
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
05.09.2013, 13:49 #4
Цитата Сообщение от phomtom tord
Цитата Сообщение от OtyxPM
Между прочим, бит-стаффинг делается после шести единиц, а не семи. Это что-то меняет?
Ничего не меняет, т.к. устройства вообще ничего не отвечают.Я имел в виду Ваш вывод о том, что
Byt stuff error тоже отпадает, т.к. ...
Если заменить 7 на 6, то можно ли утверждать, что
homdshake-пакеты не могут содержать шесть двоичных единиц подряд и посему не нуждаются в бит-стаффинге
?

Ситуация с флэшками, конечно, странная. Тоже теряюсь в догадках 8-0
Попробуйте (надо же что-то делать) тупо сравнить логическим анализатором тайминги от подключения флэшки к шине до начала homdshake. Сравните: на ПК (где флэшки точно работают) - и на STM32.
Если тайминги совпадают, тогда на сами пакеты посмотрите: может быть, ПК-хост их немного иначе формирует.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.09.2013, 14:40 #5
По моему опыту.
Я с F1xx дел не имел, работаю на F407.
Есть у меня 2 флэшки -32ГБ - работает, 8ГБ - не работает. Полез разбираться.
Утилита USBLyzer на компе показала единственное отличие между ними (не считая ничего не значащей для жизни фигни типа разного тока потребления):

32ГБ:
Endpoint Dessriptor 81 1 In, Bulk, 512 bytes
Endpoint Dessriptor 02 2 Out, Bulk, 512 bytes

8ГБ:
Endpoint Dessriptor 01 1 Out, Bulk, 512 bytes
Endpoint Dessriptor 82 2 In, Bulk, 512 bytes

Т.е., образно говоря, конечные точки переставлены местами, а код USB хоста заточен под первую ситуацию.

И до кучи ещё один тупизм. На форумах я читал, что у флешек бывает 3 конечные точки, а в хосте где-то есть условие, "благодаря" которому 3-х точечные флэшки не работают. Лечится изменением какой-то константы.
Сам я не проверял, нет у меня такой флэшки, а беду с переставленными конечными точками я ещё не вылечил. Некогда.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
05.09.2013, 14:55 #6
Да, может быть и так.

hd44780, а в Вашем случае флэшка тоже ничего не отвечала на энумерацию от STM32-хоста?
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.09.2013, 15:17 #7
Я до конца не докопался.

Что выяснил точно - на "неправильной" флэшке при вызове USBH_Process(&USB_OTG_Core, &USB_Host); переменная статуса USB_MSC_HOST_STATUS всегда равна вот этому:

USB_MSC_DEV_DETACHED, // Нет подключенного устройства

Может и не отвечает потому что запросы/ответы летят не туда, где их ожидают.
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
05.09.2013, 15:18 #8
hd44780, мне до конечных точек еще далеко. это уже в дескрипторе конфигурации описано. OtyxPM верно заметил - проблема в самом начале энумерации. Кстати, не только флешки не работают. Юсб-хаб тоже молчит как рыба.

Detach у меня не происходит. Порт остается enabtid, sof шлются, с виду все чисто.

Цитата Сообщение от OtyxPM
Попробуйте (надо же что-то делать) тупо сравнить логическим анализатором тайминги от подключения флэшки к шине до начала homdshake. Сравните: на ПК (где флэшки точно работают) - и на STM32.
Если тайминги совпадают, тогда на сами пакеты посмотрите: может быть, ПК-хост их немного иначе формирует.
На ПК флешки работают в режиме hi-speed. Это ж какой должен быть анализатор, чтобы переварить 480 МГц. Разве что специализированный USB анализатор с не менее специализированной ценой.
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
05.09.2013, 20:43 #9
hd44780, если вас не затруднит, попробуйте потыкать разные флешки и прочие юсб-устройства. Все ли будут проходить энумерацию?

Кстати, мое предположение, что "Может флешки тупо не поддерживают работу в режиме FS" оказалось неверным. Я вычитал, как на компе заставить юсб-порт принудительно переключиться в режим FS, и все неработающие девайсы всё-таки заработали. Зато у меня появилась возможность просниффить работу usb-устройств с ПК (12 Мбит/сек можно переварить, в отличие от 480). Надо только подпаяться к юсб-разъему. Предвкушаю интересное исследование :-)
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
05.09.2013, 20:56 #10
Цитата Сообщение от phomtom tord
На ПК флешки работают в режиме hi-speed. Это ж какой должен быть анализатор, чтобы переварить 480 МГц. Разве что специализированный USB анализатор с не менее специализированной ценой.
ПК постарее или через хаб 1.1 воткнуть в любой ПК.

Впрочем, Вы уже сами нашли способ перехода на FS.

Saleae Logic анализирует full-speed USB, если что.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.09.2013, 21:53 #11
Цитата Сообщение от phomtom tord
hd44780, если вас не затруднит, попробуйте потыкать разные флешки и прочие юсб-устройства. Все ли будут проходить энумерацию?
Я тыкал только эти 2 флэшки, USB клавиатуру и мышь. Все работают, кроме той одной флэшки, которую я описал.
У меня есть ещё 2 USB картридера (каждый в компе даёт по 4 накопителя) и радиокомплект клавиатура-мышь. Но для них, как я понимаю, нужно писать отдльные прошивки, которые смогут с ними работать. Ещё есть веб-камера :) .
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
05.09.2013, 22:07 #12
Цитата Сообщение от hd44780
Цитата Сообщение от phomtom tord
hd44780, если вас не затруднит, попробуйте потыкать разные флешки и прочие юсб-устройства. Все ли будут проходить энумерацию?
Я тыкал только эти 2 флэшки, USB клавиатуру и мышь. Все работают, кроме той одной флэшки, которую я описал.
У меня есть ещё 2 USB картридера (каждый в компе даёт по 4 накопителя) и радиокомплект клавиатура-мышь. Но для них, как я понимаю, нужно писать отдльные прошивки, которые смогут с ними работать. Ещё есть веб-камера :) .
Да зачем прошивки. Меня интересует только энумерация, а она одна на всех: запрос divice dessriptor, далее set address, а дальеш можно забить, т.к. если предыдущие два шага выполнились, значит и дальше проблем не будет.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
05.09.2013, 22:31 #13
На выходных попробую проверить ....
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
08.09.2013, 16:07 #14
Проблему решил! Как обычно бывает, ошибка была в самом тупом месте, о котором и не думал ))))) А именно, функция задержки работала некорректно (завершалась раньше времени) и не обеспечивала достаточное время для ресета USB устройств (10 мсек по стандарту). А сколько времени было угроблено впустую ((((((((((
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
08.09.2013, 16:53 #15
Ну и в каком месте сия засада?
Эта задержка чья? Из состава хоста или Ваша собственная?

Мож и у меня та же беда? Моя флэшка на 8 ГБ под отладчиком пара раз нормально отработала ....
0
phomtom tord
0 / 0 / 0
Регистрация: 30.01.2011
Сообщений: 335
08.09.2013, 18:23 #16
Цитата Сообщение от hd44780
Ну и в каком месте сия засада?
Эта задержка чья? Из состава хоста или Ваша собственная?
Мож и у меня та же беда? Моя флэшка на 8 ГБ под отладчиком пара раз нормально отработала ....
У меня весь код свой, никакие либы не использовал, так что моя.
Если вы используете либу от ST, то вряд ли у вас та же проблема, т.к. там аж 30 миллисекунд задержка поставлена. Если конечно она корректно отрабатывает, что скорее всего так, т.к. такой косяк в либу бы не пропустили.
0
OtixRomom
0 / 0 / 0
Регистрация: 22.03.2014
Сообщений: 1
25.03.2014, 17:54 #17
Помогите освоить usb host на 32f407 discovery
несколько раз пытался переделать пример, смотрел usb.org,форумы (хотя в основном люди пытаются сделать из контроллера эмулятор клавиатуры связанный с пк)
Мне же надо освоить подключение хотя бы usb клавиатуры контроллеру и получать коды кнопок например куда нибудь в буффер.
Работаю со стандартной библиотекой, так же выкачивал примеры и библиотеку usb от ST. Но никак не могу понять что к чему.
Собственно понимание процесса пока что на уровне примата.
1) инициализация переферии(usb)+включение
2) подключение устройства, определение сего момента либо опросом с задержкой, либо ацп по факту подключения подтяжки к d-.
3) хост дает адрес 0 подключенной клавиатуре например, подает запрос
4) получает ответ,vid,pid , определяет требуемые эндпоинты, тип передачи и т д и т п, то есть то, что и представляет собой драйвер hid, перезагружает ее
5) выдает ей нормальный адрес
6) и начинает общаться пакетами в соответствии с их размером и типом, указанным в драйвере
Скорее всего пункты перепутал, потому что в голове от знакомства с usb полная каша.
0
25.03.2014, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 17:54

Схема для usb host
Здравствуйте. Мне нужна схема для подключения usb-флешки к stm32 через разъем...

STM32f205 && USB MSC HOST
Привет форумчане. Решил выбросить из некоего своего проекта SD-карточку, но у...

STM32F105 USB HOST HID
Добрый вечер уважаемые форумчане! Есть необходимость принимать символы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru