Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем loginser

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Проверил под 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).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...