Обнаружилась очередная гадость в 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 и его реализации в винде.
|