Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как бороться с зависанием usb interrupt трансфера при помехах ?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
_3m
Обнаружилась очередная гадость в usb.
Имеется HID совместимое устройство (на базе Microchip USB Firmware Framework v2.4a), в направлении device->PC используется interrupt передача (EP1 IN). Также реализована передача с помощью control transfer (Get/Set Feature)
Было замечено что после остановки и последующего запуска девайса отладчиком interrupt transfer прекращается навсегда. Ткнувшись осциллографом на usb шину увидел что хост сразу после останова девайса перестает выдавать in токен. В винде никакие ошибоки не возникают.
Control transfer при этом продолжает работать в обе стороны как будто ничего не произошло.
Изучение документации показало что так и должно быть: если хост не получает никакого ответа на in токен он делает 2 повтора и прекращает обмен с данным эндпойнтом.

Иного способа возобновить нормальную работу кроме аппаратного или программного передергивания устройства я не нашел.

Объясните мне, тупому валенку как же с этим жить а то я уже в полном ахуе от usb и его реализации в винде.
Konst_777
Цитата(_3m @ Aug 3 2009, 17:11) *
...
Изучение документации показало что так и должно быть: если хост не получает никакого ответа на in токен он делает 2 повтора и прекращает обмен с данным эндпойнтом.

То есть, прекращает обмен с данным эндпойнтом навсегда? Пожалуйста, подскажите, в какой документации (каких разделах) это написано.
_3m
Цитата(Konst_777 @ Aug 7 2009, 14:18) *
То есть, прекращает обмен с данным эндпойнтом навсегда? Пожалуйста, подскажите, в какой документации (каких разделах) это написано.

* USB Complete: The Developer’s Guide, Fourth Edition by Jan Axelson - p.79
в третьем издании кстати про ошибки очень мало.
* Universal Serial Bus Specification Revision 2.0 - 10.2.6 Transmission Error Handling

И стати не только я заинтересовался данной проблемой.
вот пара топиков на форуме усб дот орг:
Host controller stops polling on Interrupt Endpoint
Windows stopped catching In-Reports from our device
Konst_777
Спасибо за ссылки. Теперь буду знать о неприятных особенностях реализации обмена с HID USB устройствами в Windows. sad.gif
Благодаря Вам узнал, что уже вышло 4-е издание "USB Complete" от Jan Axelson. a14.gif
galjoen
Цитата(_3m @ Aug 3 2009, 18:11) *
Обнаружилась очередная гадость в usb.
....
Объясните мне, тупому валенку как же с этим жить а то я уже в полном ахуе от usb и его реализации в винде.

1. EP будет отключена только если не ответит на маркер IN (данными или NAK) 3 раза подряд. В реальности я такого ни разу не встречал. Для этого нужно запретить данную EP в девайсе, иначе она пошлёт NAK-и автоматически.
2. С EP 0 (контрольный канал - Get/Set Feature) та-же история, но там предпринимаются меры по восстановлению связи.
3. Я стараюсь использовать HID без Interrupt In EP (вообще её не объявляю), а пользоваться только Get/Set Feature репортами. А устроиство объявить составным - HID+MassStorage, и данные слать через Bulk EP (съэкономленная EP тут как-раз пригодится). А вот драйвер MassStorage в винде очень хорош, это надо признать. В такой ситуации, как описана про HID, он предпримет множество различных попыток восстановления. Это (2 интерфейса) к тому же позволяет партизанским путём обойти ограничения в Linux...
galjoen
Что-то странно. Сейчас вспомнил. У меня при принудительном запрете HID-овской Interrupt In EP приходил SETUP-ный пакет CLEAR_FEATURE к данной EP. По идее и в вашем случае такой пакет должен прийти, м.б. вы просто не обрабатываете такой SETUP?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.