реклама на сайте
подробности

 
 
> Как бороться с зависанием usb interrupt трансфера при помехах ?
_3m
сообщение Aug 3 2009, 14:11
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Обнаружилась очередная гадость в 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 и его реализации в винде.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
Konst_777
сообщение Aug 7 2009, 10:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



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

То есть, прекращает обмен с данным эндпойнтом навсегда? Пожалуйста, подскажите, в какой документации (каких разделах) это написано.
Go to the top of the page
 
+Quote Post
_3m
сообщение Aug 7 2009, 13:03
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(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
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Aug 9 2009, 08:26
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Спасибо за ссылки. Теперь буду знать о неприятных особенностях реализации обмена с HID USB устройствами в Windows. sad.gif
Благодаря Вам узнал, что уже вышло 4-е издание "USB Complete" от Jan Axelson. a14.gif
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 18 2009, 10:25
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(_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...
Go to the top of the page
 
+Quote Post
galjoen
сообщение Aug 21 2009, 12:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Что-то странно. Сейчас вспомнил. У меня при принудительном запрете HID-овской Interrupt In EP приходил SETUP-ный пакет CLEAR_FEATURE к данной EP. По идее и в вашем случае такой пакет должен прийти, м.б. вы просто не обрабатываете такой SETUP?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016