Jump to content

    
Sign in to follow this  
loginser

USB 2.0 устройство на USB 3.0 хосте

Recommended Posts

Имеется 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 стека или все же есть ограничения? Спасибо

Share this post


Link to post
Share on other sites

Странно это. USB3.0 это физически другой интерфейс (дополнительно две пары контактов). И пока их нет работать все должно по старому. Может все-таки в драйвере проблема?

Share this post


Link to post
Share on other sites

Проблему я нашел. Я использую BULK пакеты размером 1024 и на USB 2.0(всех) контроллерах мое устройство работает отлично, но похоже что драйвер контроллера USB 3.0 жестко проверяет это условие и возврашиет ERROR_INVALID_PARAMETER. Как решить подобную проблему я незнаю к сожалению. -Al- спасибо за ответ.

Share this post


Link to post
Share on other sites
Проблему я нашел. Я использую 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 под виндой.

Share this post


Link to post
Share on other sites

AndreyS Microsoft резко заявили, что они тут не причем и чтобы я обращался к производителю контроллера(так как они пишут свои дрова и проблема якобы на их стороне). По вашей проблеме ничего сказать не могу, так как изначально я написал свой драйвер и подобных проблем ни на одной ОС пока к счастью не наблюдалось, устройство работает сутками безперебойно (45 МБ в секунду загрузка). Может обратить внимание на Управление питанием в ОС и обработку состояний устройства? Я в своем устройстве вообще запретил STANDBY состояние.

Edited by loginser

Share this post


Link to post
Share on other sites

Проблема решается очень легко, по спецификации в BULK максимальный размер пакета 512 байт, почему-то USb 2.0 хосты этот параметр проглатывают и не пищат об ошибке. Однако хост USB 3.0 более строг к параметрам и такое не пропускает.

 

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

 

Однако еще обнаружил, что при работе через порт USB 3.0 у меня упала пропускная способность, приблизительно на 10-15%. С чем это связано понять пока не смог.

Share this post


Link to post
Share on other sites

leva87 Как раз уменьшение размера пакета невозможно, так как у нас не будет обратной совместимости с устройствами и софтвером что мы уже продали. Да и 1024 было введено как раз для скорости.

 

Share this post


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

Проверил под 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 контроллеру:

[ 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).

Share this post


Link to post
Share on other sites

Я только начинаю работать с USB3 ...

 

А разве проблематично анализировать какое подключение USB2 или USB3 и соответственно менять размер пакета? Скорость скоростью, но работоспособность дороже.

Можно конечно как в GigE Vision рекомендовать ставить только Intel Pro ...

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this