подозреваю что может быть результатом не совсем верной аппаратной реализации.
For a high-speed bulk endpoint, USBD_STATUS_XACT_ERROR indicates that the
host controller has set the "Transaction Error (XactErr)" bit in the
transfer descriptor's status field. The EHCI spec indicates that this bit
is set when it encounters a CRC error, a timeout, an invalid PID, babble,
or a buffer error (under/overrun). Refer to section 4.15.1.1 of the EHCI
spec for specific details on what conditions will cause this error to be
returned. The spec can be found at the following URL:
http://www.intel.com/technology/usb/ehcispec.htmЯ в своей практике точно ловил USBD_STATUS_BABBLE_DETECTED на предельных для 2.0 скоростях обмена, при ошибках в реализации аппаратного интерфейса с готовым контроллером от Cypress FX2LP.
насчет XACT - уже не помню, но у меня в коде при его обнаружении у стоит такая же обработка как и на USBD_STATUS_BABBLE_DETECTED и USBD_STATUS_STALL_PID. когда их ловлю - отменяю IoCancelIrp все URB в очереди запросов, как только они все завершатся - вызываю URB_FUNCTION_SYNC_CLEAR_STALL и заполняю очередь URB запросов заново.
почему у меня такое решение - к сожалению уже не помню. но вроде на ошибки обмена никто не жаловался, сейчас FX3 практически на том же коде тоже работает на 350Мбайт/с.