Повторный NAK, кажется, перезаписывает полезную нагрузку - PullRequest
1 голос
/ 29 марта 2012

Я новичок в программировании драйверов в целом, а также в USB. Однако мне удалось написать драйвер для Windows CE (6.0), и у меня также был доступ к USB-Sniffer для чтения всего трафика между хостом и устройством.

Проблема теперь возникает на некоторых платах (2 из 3, которые у меня есть): Если на устройстве нет данных для отправки, и я запускаю прерывание при передаче, устройство отправляет ACK.

Пока это ожидается. Однако что-то (я полагаю, либо USB-контроллер, либо WinCE), кажется, автоматически выдает больше IN-Transfers (3 на одной плате, 4 на другой), и я получаю последующее подтверждение. Это пока не проблема.

Но следующий IN-Transfer также приведет к ACK, независимо от того, есть ли данные для отправки или нет, я получаю ноль байтов в драйвере.

Тем не менее, когда я смотрю на USB-Sniffer, была отправлена ​​правильная телеграмма, однако автоматически отправляются еще 2 IN-трансфера, которые отвечают ACK. Похоже, данные перезаписываются ACK.

Я перепробовал все, что приходило мне в голову: перезагрузить канал, закрыть и снова открыть соединение, но, похоже, ничего не получилось. Перезагрузка трубы решает проблему примерно в половине случаев. У меня действительно закончились идеи для решения проблемы.

Есть ли способ указать USB-контроллеру (или WinCE или тому, что вызывает такое поведение) всегда выполнять только одну передачу?

EDIT

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

...