Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB 2.0 устройство на USB 3.0 хосте
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
loginser
Имеется USB 2.0 устройство на CY7C68013a с собственным драйвером. Работает с USB 2.0 хостом прекрасно, но с контроллером USB 3.0 (NEC) работать корректно отказывается, суть в следующем: устройство настроено на один конфигурационный дескриптор (Configuration Descriptor), один интерфейс и 4 Alternate Settings. При задании Alternate Settings #0 и #1 все проходит нормально(устройство подключено через анализатор USB), но при #2 и #3 драйвер возвращиется с ошибкой 0x57(ERROR_INVALID_PARAMETER). Ограничения на количество Alternate Settings в документации к USB 3.0 и 2.0 я не нашел. Это баг нового 3.0 стека или все же есть ограничения? Спасибо
-Al-
Странно это. USB3.0 это физически другой интерфейс (дополнительно две пары контактов). И пока их нет работать все должно по старому. Может все-таки в драйвере проблема?
loginser
Проблему я нашел. Я использую BULK пакеты размером 1024 и на USB 2.0(всех) контроллерах мое устройство работает отлично, но похоже что драйвер контроллера USB 3.0 жестко проверяет это условие и возврашиет ERROR_INVALID_PARAMETER. Как решить подобную проблему я незнаю к сожалению. -Al- спасибо за ответ.
AndreyS
Цитата(loginser @ Jun 22 2011, 13:23) *
Проблему я нашел. Я использую BULK пакеты размером 1024 и на USB 2.0(всех) контроллерах мое устройство работает отлично, но похоже что драйвер контроллера USB 3.0 жестко проверяет это условие и возврашиет ERROR_INVALID_PARAMETER. Как решить подобную проблему я незнаю к сожалению. -Al- спасибо за ответ.


Добрый день.

Видимо все это проверялось под ОС Винда. Очень хотелось бы услышать результаты таких исследований под любой другой ОС.

У меня есть подозрение что это шалит драйвер usbd.sys под виндой.

Потому как обнаружили в своей системе следующую проблему.
При некоторых обстоятельствах (одно из них, 100% приводящее к этой проблеме, это огромная помеха по шине USB соответственно ведущая к потери пакетов) происходит как бы зависание USB устройства в операционной системе (физически же само исполнительное устройство device продолжает нормальное функционирование, подвисает USB шина). Это подвисание может быть кратковременным, а может быть длительным. В таком случае спасает reset_port с abort_pipe. Но вот в этот момент подвисания любой запрос к драйверу usbd.sys (посредством драйвера ezusb.sys) не приводит в появлению данных на самой шине. Производили сканирование аппаратным анализатором и обнаружили эту проблему. На шине кроме SOF пакетов ничего больше нет. А в диспетчере устройств оно доступно. Происходит это редко (при длительной эксплуатации USB шины в течении нескольких суток), но может залипнуть так, что спасает только перезагрузка. Причем вылезла эта проблема в лабораторных условиях, т.е. помех по USB шине небыло, сканер их не показал.

Рысканье по инету привело к тому что в разных виндах требования на максимальный объем запрашиваемой информации в драйвере usbd.sys разный. В нашем случае мы удовлетворяем этому требованию под винду ХП, 2000 и 7 с вистой. Но само это наводит на мысль возможных глюках в работе usbd.sys под виндой.
loginser
AndreyS Microsoft резко заявили, что они тут не причем и чтобы я обращался к производителю контроллера(так как они пишут свои дрова и проблема якобы на их стороне). По вашей проблеме ничего сказать не могу, так как изначально я написал свой драйвер и подобных проблем ни на одной ОС пока к счастью не наблюдалось, устройство работает сутками безперебойно (45 МБ в секунду загрузка). Может обратить внимание на Управление питанием в ОС и обработку состояний устройства? Я в своем устройстве вообще запретил STANDBY состояние.
leva87
Проблема решается очень легко, по спецификации в BULK максимальный размер пакета 512 байт, почему-то USb 2.0 хосты этот параметр проглатывают и не пищат об ошибке. Однако хост USB 3.0 более строг к параметрам и такое не пропускает.

Вам достаточно изменить размер пакета на 512 байт во всех BULK endpoints

Однако еще обнаружил, что при работе через порт USB 3.0 у меня упала пропускная способность, приблизительно на 10-15%. С чем это связано понять пока не смог.
loginser
leva87 Как раз уменьшение размера пакета невозможно, так как у нас не будет обратной совместимости с устройствами и софтвером что мы уже продали. Да и 1024 было введено как раз для скорости.
vladisslav
Цитата(AndreyS @ Jun 22 2011, 20:52) *
Видимо все это проверялось под ОС Винда. Очень хотелось бы услышать результаты таких исследований под любой другой ОС.

Проверил под linux (Linux lucid 3.0.0-19-generic-pae #32~lucid1-Ubuntu SMP Mon Apr 9 18:03:59 UTC 2012 i686 GNU/Linux)
Кроме косяка с буфером (я пытался послать 2048 URB за один вызов) и ругани на bInterval==0 в дескрипторе (поставил 1, так странно округлялось до 32768 и тормозило) никаких проблем не обнаружено.
Linux ругается на hi-speed устройство с размером bulk endpoint 1024, подключенное к super speed контроллеру так же как и при подключении к hi-speed контроллеру:
CODE
[ 1959.091020] usb 3-1: new high speed USB device number 12 using xhci_hcd
[ 1959.107170] usb 3-1: config 1 interface 0 altsetting 0 bulk endpoint 0x2 has invalid maxpacket 1024
[ 1959.107176] usb 3-1: config 1 interface 0 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 1024
.....
[ 2058.739558] usb 1-1.1.3: new high speed USB device number 10 using ehci_hcd
[ 2058.831708] usb 1-1.1.3: config 1 interface 0 altsetting 0 bulk endpoint 0x2 has invalid maxpacket 1024
[ 2058.831713] usb 1-1.1.3: config 1 interface 0 altsetting 0 bulk endpoint 0x86 has invalid maxpacket 1024

Скорость при подключении к hi-speed и увеличении размера bulk endpoint с 512 до 1024 растет с 42.05 Мб/с до 45.99 Мб/с.
При подключении к super speed и увеличении размера bulk endpoint с 512 до 1024 скорость увеличивается меньше с 42.52 Мб/с до 44.23 Мб/с.
Подключение к hi-speed контроллеру через китайский хаб и длинный удлинитель.
Подключение к super speed контроллеру через длинный удлинитель (3 метра).

Super speed контроллер ASmedia, VID:PID 1b21:1042.
Hi-speed контроллер интегрированный в чипсет Intel Corporation Cougar Point USB Enhanced Host Controller (rev 05).
Sergey_Bekrenyov
Я только начинаю работать с USB3 ...

А разве проблематично анализировать какое подключение USB2 или USB3 и соответственно менять размер пакета? Скорость скоростью, но работоспособность дороже.
Можно конечно как в GigE Vision рекомендовать ставить только Intel Pro ...
loginser
К сожалению для некоторых устройств как раз важна скорость. В нашем случае еще каждый пакет несет заголовки к данным, что увеличивает оверхэд.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.