Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Virtual Com Port - Размер Пакета.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Usatyj
Прошу помощи.
Ситуация следующая.
Уже давно борюсь с VCP, который наотрез отказывался подключаться в составе комплексного устройства черз IAD или union functional дескрипторы. Вообщем, подключил я VCP с его CDC классом, не как описано в большинстве примеров - через два интерфейса (булк и interrupt) а через один, содержащий 3 end points.
Всё вродебы работает отлично, устройство определяется, данные передаются, - но вот не задача:
при определенных условиях пакет теряется. А именно. Если устройство передаёт один пает длинной 64 байта, то на Virtual COM он не приходит. При иных параметрах, если пакет 63 байта, он приходит, если устройство посылает несколько 64-ёх байтных пакетов, они доходят. Но если послан только один 64 байтный пакет ни COM порт, ни usb снифер по имени "Usb Monitor" его не видят, а в это время прерывание Correct Transfer рапортует об удачной отправке.
Думаю что сниферу особо доверять нельзя, т.к. он наверное просто недостаточно близко к аппаратуре сидит, есть ощущение что драйвер usbser.sys чтото с буферированием тупит.

Ответье ели вы сталкивались или слышали о чем то таком.

Мне нужно хотябы объяснение почему не работает, пусть даже не заработает.
---------------
P.S. В сторону устройства всё передается нормально
prottoss
Цитата(Usatyj @ Aug 5 2008, 14:30) *
Мне нужно хотябы объяснение почему не работает, пусть даже не заработает.
Пакеты с размером данных, равных размеру буфера конечной точки нужно завершать нулевым пакетом. Т.е. после того как получили сигнал о том, что 64-байт пакет уехал, посылаете пакет с нулевой длиной. Это сигнал хосту о завершении передачи данных
Usatyj
Огромное спасибо, я очень долго провозился с этой проблемой, Вы мне очень помогли.
Alechek
Цитата(Usatyj @ Aug 5 2008, 11:30) *
Думаю что сниферу особо доверять нельзя, т.к. он наверное просто недостаточно близко к аппаратуре сидит, есть ощущение что драйвер usbser.sys чтото с буферированием тупит.

P.S. В сторону устройства всё передается нормально

Хорошо что в сторону устройства все нормально. Позволю заметить, что баги в usbser.sys все же есть. Описаны и исправлены в KB943198.
Только вот после этих исправлений внесен еще один баг, на который я напоролся после установки SP3 - устройство переставало принимать данные.
Баг, конечно, был и у меня, но Microsoft тоже к этому причастно - при отсылке данных (WriteFile) размером кратным 8 (размер EP - 64!), посылается еще одна булка, только размером 0 !
На ней то мой драйвер и стопорился.

Цитата
Вообщем, подключил я VCP с его CDC классом, не как описано в большинстве примеров - через два интерфейса (булк и interrupt) а через один, содержащий 3 end points.

А можно попродробнее с этого места? Т.е. возможно сделать реализовать VCP и MSD на одном устройстве?
sergeeff
Возможно. Я устройство с тремя интерфейсами реализовал. Но самая большая глючность usbser.sys - отсутствие нормального pnp - насколько мне известно, так и не решена.
Alechek
Цитата(sergeeff @ Aug 7 2008, 15:09) *
Возможно. Я устройство с тремя интерфейсами реализовал. Но самая большая глючность usbser.sys - отсутствие нормального pnp - насколько мне известно, так и не решена.

С несколькими интерфейсами - это понятно.
Насколько я помню, usbser цепляется именно к устройству. а usbstor - к интерфейсу.
sergeeff
Насколько я в курсе, до Vist'ы, Microsoft multidevice устройства не поддерживала. Только multiinterface.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.