Вопрос

Я разрабатываю драйвер CDC для USB-устройства и сталкиваюсь с какой-то проблемой. Драйвер, который я использую на стороне Windows, использует Clear endpoint Feature в качестве некоторого механизма flish или для получения правильных данных. Это вызывает у меня много шума, потому что я не могу заставить его работать. Я думаю, что переключение данных не согласовано, и я пропускаю некоторые важные передачи данных, даже не получая связанного прерывания с этой конечной точкой из-за неправильного переключения данных. Я сбрасываю данные с переключателем на 0 при установленном интерфейсе и отключаю функцию, как указано в стандарте USB. Есть ли еще ситуации, когда я должен это сделать? Или есть простой способ обработки ошибок при неверном переключении данных.

Спасибо за ответ. У меня есть USB-анализатор, но я не делаю мне ничего хорошего. Из того, что мне удалось собрать и я думаю, что происходит. Я установил бит datatoggle в hardvare после функции Clear (как и должно быть) для соответствующей конечной точки. Отправить некоторые данные, он получен на ПК. Я знаю этот USB-анализатор формы и отследил свой драйвер Vcom с монитором портов. Затем я жду некоторые данные, так как все настроено (перечислено устройство и т. Д.), Первоначальный вопрос задан, но следующий - нет, после того, как ясная конечная точка завершена, сторона ПК снова задает вопрос. Это должно инициировать прерывание UBS для конечной точки, отвечающей за ядро, но это не происходит, опять же через некоторое время появляется явная функция конечной точки и тот же пакет, и на этот раз он получает ответ, и снова на протоколе связи возникает молчание. Я посчитал запрошенный трансфер против пропущенных прерываний, и соотношение составляет ровно 2: 1, поэтому я думаю, что переключение данных установлено неправильно в половине случаев, но как это может произойти, если я устанавливаю бит переключения данных каждый раз, когда получаю четкую функцию конечной точки.

Надеюсь, я четко сформулировал проблему, для гарварской стороны я думаю, что единственная важная вещь - это бит, который я устанавливаю. В нем указано «Записать 1 в этот бит, чтобы сбросить данные конечной точки, переключающиеся в 0.» Хорошо, я думаю (надеюсь), что я решил проблему с очисткой конечной точки, другие ошибки были вызваны другими вещами, и накопительную проблему было трудно уловить. <Ч>

Хорошо, я исправил проблему некоторое время назад, теперь я даже не помню, в чем причина, но как обычно - это было что-то другое. Всем, кто привязан к ответу, спасибо.

Это было полезно?

Решение

Помните, что в некоторых версиях usbser.sys Windows неправильно очищает канал после передачи точного кратного 64 байтам. Мне не совсем понятно из вашего вопроса, является ли это поведение, которое вы видите, но USB-анализатор должен помочь вам определить, так ли это. Если вы используете XP SP2, обновитесь до SP3.

Другие советы

Я предлагаю использовать usb snoopy (программный анализатор usb), чтобы понять, что вы делать неправильно. Если у вас есть какой-либо бюджет, вам лучше приобрести аппаратный USB-анализатор, такой как мы Lecroy или Ellisys . Или получить коммерческий драйвер CDC, есть много доступных только для драйвера CDC Google. Описание вашей проблемы носит очень общий характер и может быть адресовано напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top