Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что важнее дескриптор или idVendor ?
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Толик
Мною были сделаны неоднократные попытки подключения SAM7A3 через USB, да так чтобы он определялся как виртуальный COM порт.

Так вот... пока я не ввел в поля idVendor и idProduct (вместо 0) дескриптора устройства конкретного производителя (ATMEL 5131) ничего не происходило (т.е. он не находил нужного драйвера и не хотел запрашивать дескрипторы). Вопрос состоит в том : драйвер подбирается по id, а не по дескриптору интерфейса (поля класс, подкласс...)?(если не затруднит: Почему?)

Если использовать id ATMEL 5131 (кажется idVendor=03EB и idProduct=2009) SAM7A3 корректно заработает?

Есть ли общие ID для CDC класса?

Можно ли обойтись без INF-файла?

Озадачил? unsure.gif
Толик
Интересно......... почему-то все молчат...

Может вопрос неправильно поставил?
А может я вообще ничего не понимаю?
Дела-а. sad.gif
Димыч
Цитата(Толик @ Mar 2 2007, 10:02) *
Интересно......... почему-то все молчат...

Может вопрос неправильно поставил?
А может я вообще ничего не понимаю?
Дела-а. sad.gif


Да нет не озадачил smile.gif
В общем, дела глубоко-виндовые.
Если хост-контроллер обнаружил подключение устройства, заводится его экземпляр в ОС и первоначально поля VID PID инициированы нулями. Когда дескриптор устройства содержит нули в этих поях, то и ОС "не знает" что собственно искать как драйвер.
Пишите эти ..ID какие хотите (условно говоря) - лишь бы они отличались от нуля, не совпадали с зарегистрированными в базе драйверов ОС и совпадали с прописанными в INF.
Общих V(P)ID для CDC не должно быть - ведь это не определяет класс.
-=Sergei=-
Цитата(Толик @ Feb 26 2007, 19:51) *
Мною были сделаны неоднократные попытки подключения SAM7A3 через USB, да так чтобы он определялся как виртуальный COM порт.

Так вот... пока я не ввел в поля idVendor и idProduct (вместо 0) дескриптора устройства конкретного производителя (ATMEL 5131) ничего не происходило (т.е. он не находил нужного драйвера и не хотел запрашивать дескрипторы). Вопрос состоит в том : драйвер подбирается по id, а не по дескриптору интерфейса (поля класс, подкласс...)?(если не затруднит: Почему?)

Если использовать id ATMEL 5131 (кажется idVendor=03EB и idProduct=2009) SAM7A3 корректно заработает?

Есть ли общие ID для CDC класса?

Можно ли обойтись без INF-файла?

Озадачил? unsure.gif


Возможно ошибусь но алгоритм примерно следующий.
ОС по классу/подклассу определяет - может ли это устройтсво работать с его встроенными драйверами и если да, то начинает работу не особо смотря на Vendor. Если эе нет, то начинает анализировать Vendor, Product и если под них у него есть драйвера начинает работать через них.
Kitsok
Цитата(Толик @ Mar 2 2007, 10:02) *
Интересно......... почему-то все молчат...

Может вопрос неправильно поставил?
А может я вообще ничего не понимаю?
Дела-а. sad.gif


Скорее, второе wink.gif

В документации (как в спецификации USB, так и в документации от Мелкософта) ясно и прямо написано, что VID=0 - prohibited. Т.е. не может быть устройства с VID=0.

Смысл поля Класс и VID принципиально разные. VID идентифицирует производителя, PID - конкретное изделие этого производителя, Class - класс устройства, если устройство "классовое".

Вначале запрашивается дескриптор устройства, и в нем передается VID/PID, дескриптор конфигурации запрашивается после. Поэтому винда обнаруживает, что подключили непойми что и останавливает энумерацию.

Как было сказано выше, поставьте VID какой-нибудь не выданный, ближе к концу (я ставлю FFFF) и все будет хорошо.
Толик
Цитата(Kitsok @ Mar 3 2007, 13:11) *
Смысл поля Класс и VID принципиально разные. VID идентифицирует производителя, PID - конкретное изделие этого производителя, Class - класс устройства, если устройство "классовое".


Так если pID - конкретное устройство, то не значит ли это, что Windows уже по pIDу должен знать class, Subclass,....., количество конечных точек.....
Я понимаю словосочетание "конкретное устройство", как устройство в котором уже нельзя изменить вышеуказанные свойства.

Цитата(Kitsok @ Mar 3 2007, 13:11) *
Как было сказано выше, поставьте VID какой-нибудь не выданный, ближе к концу (я ставлю FFFF) и все будет хорошо.


Когда я ставил FFFF нумерация, как я припоминаю, устанавливалась как и для 0000.(Хотя я уже забыл, а перепроверить не скоро смогу)
Но что я помню точно, так это то, что когда vID =2009 (т.е. ATMEL) а pID = 0000 Wind'а просила указать нахождение драйвера (ну как и для vID =0, pID=0) и нумерация дальше не шла.


Никто не хочет прокомментировать мои жалкие попытки распутать этот узел?
Kitsok
Алгоритм поиска драйверов для устройства такой:
1. Поискать по классу. Если нашли, то грузим драйвер.
2. Если не удалось по классу, то ищем драйвер по VID/PID.
3. Если не удалось по VID/PID, то вываливаем юзеру предложение воткнуть дискету.

К процессу энумерации все вышесказанное отношения не имеет. Энумерация с VID=0&PID=0 не пройдет.
Узла никакого нет, распутывать нечего. Ставьте VID=0xffff, PID=0xdead (или любой другой) и смотрИте. А пока смОтрите, почитайте стандарт.

Я понимаю степень вашего негодования полным безразличием общества. Я собственно так-же негодовал. А потом был благодарен за молчание в этой ветке, бо проблема была в моем личном непонимании сути USB. После прочтения примерно с третьего-пятого раза стандарта, HID Class devices и всяких там USB Device By Example & USB complete все вопросы отпали сами собой.

Нам не впадлу ответить, нам просто лень объяснять, что ничего не получится без прочтения базовых документов. А после прочтения 99% всех вопросов снимаются сами собою.
Вы поймите, я убил реально неделю на то, чтобы вкурить, как винда ищет драйвера. А потом оказалось, что это - первая ссылка в гугле по грамотно построеному вопросу.
Толик
мда-а-уж.....дела-а. Даже и возразить нечего. unsure.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.