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

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

05.09.2013, 03:58. Показов 18364. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2013, 03:58
Ответы с готовыми решениями:

Arduino как host usb, написание своего драйвера для обмена информацией с stm32 по usb
Доброго дня Всем, интересует вопрос как написать свой драйвер на ардуино мега чтобы можно было общаться с стм32 по протоколу usb. Пробовал...

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

Stm32 USB host Mass Storage
Приветствую. Столкнулся с проблемой. Пытаюсь заюзать STM32f207 как хост. Сгенерировал проект в CUBE MX v4.27.0, где стмка будет в роли...

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

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

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

Ситуация с флэшками, конечно, странная. Тоже теряюсь в догадках 8-0
Попробуйте (надо же что-то делать) тупо сравнить логическим анализатором тайминги от подключения флэшки к шине до начала homdshake. Сравните: на ПК (где флэшки точно работают) - и на STM32.
Если тайминги совпадают, тогда на сами пакеты посмотрите: может быть, ПК-хост их немного иначе формирует.
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
05.09.2013, 14:40
По моему опыту.
Я с 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
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
05.09.2013, 14:55
Да, может быть и так.

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

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

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

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

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

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

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

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

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

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

STM32 USB Host Custom Class (PL2303)
Добрый день, уважаемые форумчане. Столкнулся со следующей проблемой. Работаю на плате STM32F207IGH6, к разъему USB (FS) подключаю...

STM32: FatFS & USB Host & Flash - проблемы с чтением/записью
Уважаемые гуру! Ломаю голову, но найти разумное объяснение симптомам не могу. Есть stm32f407. В Кубе создается проект с USB Host...

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

PHP + USB. Управление USB-устройствами через веб-интерфейс
Доброго времени суток, граждане девелоперы. Поддерживая тему "умных" домов, задался вопросом, возможно ли связать бэкенд веб-приложения с...

Написание драйверов (или программы работающие с USB устройствами) в Linux под USB устройство
Доброе времени суток, уважаемые форумчане!!! Подскажите пожалуйста литературу или куда копать, желательно с готовыми примерами! Вопрос в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru