Я пишу простое устройство виртуального последовательного порта, чтобы сообщить о старом последовательном порту. К этому моменту я могу перечислить устройства и отправить / получить символы.
После различного количества массовых передач от хоста к устройству конечная точка, похоже, отказывается и прекращает передачу данных. На стороне ПК я получаю ошибку записи, и, судя по трассировке USBlyzer, музыка останавливается (USBD_STATUS_STALL_PID). Однако мой код никогда намеренно не выдает состояние STALL для этой конечной точки, а флаг состояния для его создания никогда не устанавливается.
Учитывая небольшой промежуток времени, прошедший (‹300 мкс) между выдачей запроса и STALL, это может показаться неким недопустимым ответом, а не тайм-аутом. На стороне устройства конечная точка вывода готова к работе с данными в буфере и надлежащей синхронизацией DATA0 / 1, но больше ничего не происходит.
Обратите внимание, что устройство работает нормально даже в течение длительного времени, пока я не начну отправлять «большие» объемы данных. Насколько я могу судить, перечисление / конфигурация устройств также успешно завершается. Да, и после этого конечная точка массового ввода продолжает нормально работать.
Для записи я использую стандартный драйвер Windows usbser.sys и микропроцессор XMega128A4U. Я также наблюдаю такое же поведение на нескольких машинах с Windows Vista и 7.
Есть идеи, что я делаю неправильно или какие дополнительные тесты я могу провести, чтобы сузить круг вопросов?