Jump to content

    

Linux: время конфигурации usb-устройства

соединение: хост - хаб1 - хаб2 - 4устройства

 

хаб1 - встроенный хаб хоста

хаб2 - FSM-хаб на 4 порта TI TUSB2046B, без внешней настройки

устройство - плата с Atmel SAM7X на борту, HID-dev. Int-IN+Int-OUT EPs

 

Устройства имеют собственный источник питания, что указано в дескрипторе конфигурации в полях "Attributes"(0x40) и "MaxPower"(0x00). Каждое устройство инициализируется по 5сек, что достаточно некомфортно. Создается впечатление, что имеет место быть искуственный таймаут.

 

Вопрос: в чем может быть проблема столь долгой конфигурации и где можно подправить?

Share this post


Link to post
Share on other sites
Вопрос: в чем может быть проблема столь долгой конфигурации и где можно подправить?

А за процессом энумерации со стороны устройства проследить не пробовали? Должно стать понятно, куда копать.

Share this post


Link to post
Share on other sites
А за процессом энумерации со стороны устройства проследить не пробовали? Должно стать понятно, куда копать.

Пробовал, сократил время с 15 сек. до 5 сек. ;)

Share this post


Link to post
Share on other sites

Неужели ничего подозрительного не осталось? Проблема только под Linux'ом наблюдается?

Share this post


Link to post
Share on other sites
Неужели ничего подозрительного не осталось? Проблема только под Linux'ом наблюдается?

Продолжаю "ковырятся", но что самое интересное, под виндой не было ни 5, ни 15ти сек.

Share this post


Link to post
Share on other sites

для usb-storage есть искусственный timeout, сделан для комфортного старта usb-винтов, какой класс устройства ?

Share this post


Link to post
Share on other sites
для usb-storage есть искусственный timeout, сделан для комфортного старта usb-винтов, какой класс устройства ?

в том то и дело, что HID-устройство(я в описании указал: HID-dev. Int-IN+Int-OUT EPs)

Share this post


Link to post
Share on other sites

sorry, как всегда знака 40 не заметил ;) проверить просто - можно воткнуть любую usb мышку - у меня на ноуте старт меньше секунды. если глянуть в linux/drivers/hid/usbhid/hid-core.c то видно что retry_delay используется при логических ошибках в обмене. по идее можно какую-то отладку вставить

Share this post


Link to post
Share on other sites

Долго не занимался данным вопросом, сейчас нашлось время повозиться еще:

1) hid-core не используется, написан свой драйвер

2) Проблема не при подключении драйвера, а при опросе устройства по Ep0, конкретно при получении StringDescriptor и такое впечатление, что при кратности длины дескриптора 8ми байтам.

Share this post


Link to post
Share on other sites
Долго не занимался данным вопросом, сейчас нашлось время повозиться еще:

1) hid-core не используется, написан свой драйвер

2) Проблема не при подключении драйвера, а при опросе устройства по Ep0, конкретно при получении StringDescriptor и такое впечатление, что при кратности длины дескриптора 8ми байтам.

Если у SAM7X USB похож на SAM7S, то возможно Вы не пишете пакет нулевой длины в конце если размер дескриптора кратен размеру конечной точки.

Share this post


Link to post
Share on other sites
Если у SAM7X USB похож на SAM7S, то возможно Вы не пишете пакет нулевой длины в конце если размер дескриптора кратен размеру конечной точки.

"Шъерт побъери!" (с)

Меня подобная мысль посещала, а вы ее только подтвердили. Я наивно полагал, что контроллер это делает автоматически по "completed". Видать где-то пропустил.

 

Спасибо за подсказку.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this