реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Что важнее дескриптор или idVendor ?, SAM7A3
Толик
сообщение Feb 26 2007, 19:51
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687



Мною были сделаны неоднократные попытки подключения SAM7A3 через USB, да так чтобы он определялся как виртуальный COM порт.

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

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

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

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

Озадачил? unsure.gif
Go to the top of the page
 
+Quote Post
Толик
сообщение Mar 2 2007, 10:02
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687



Интересно......... почему-то все молчат...

Может вопрос неправильно поставил?
А может я вообще ничего не понимаю?
Дела-а. sad.gif
Go to the top of the page
 
+Quote Post
Димыч
сообщение Mar 2 2007, 11:50
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 1-02-05
Из: the Earth
Пользователь №: 2 331



Цитата(Толик @ Mar 2 2007, 10:02) *
Интересно......... почему-то все молчат...

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


Да нет не озадачил smile.gif
В общем, дела глубоко-виндовые.
Если хост-контроллер обнаружил подключение устройства, заводится его экземпляр в ОС и первоначально поля VID PID инициированы нулями. Когда дескриптор устройства содержит нули в этих поях, то и ОС "не знает" что собственно искать как драйвер.
Пишите эти ..ID какие хотите (условно говоря) - лишь бы они отличались от нуля, не совпадали с зарегистрированными в базе драйверов ОС и совпадали с прописанными в INF.
Общих V(P)ID для CDC не должно быть - ведь это не определяет класс.
Go to the top of the page
 
+Quote Post
-=Sergei=-
сообщение Mar 2 2007, 12:34
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Цитата(Толик @ 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 и если под них у него есть драйвера начинает работать через них.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Mar 3 2007, 13:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Толик @ Mar 2 2007, 10:02) *
Интересно......... почему-то все молчат...

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


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

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

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

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

Как было сказано выше, поставьте VID какой-нибудь не выданный, ближе к концу (я ставлю FFFF) и все будет хорошо.
Go to the top of the page
 
+Quote Post
Толик
сообщение Mar 3 2007, 21:06
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687



Цитата(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) и нумерация дальше не шла.


Никто не хочет прокомментировать мои жалкие попытки распутать этот узел?
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Mar 4 2007, 02:58
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Алгоритм поиска драйверов для устройства такой:
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% всех вопросов снимаются сами собою.
Вы поймите, я убил реально неделю на то, чтобы вкурить, как винда ищет драйвера. А потом оказалось, что это - первая ссылка в гугле по грамотно построеному вопросу.

Сообщение отредактировал Kitsok - Mar 4 2007, 03:07
Go to the top of the page
 
+Quote Post
Толик
сообщение Mar 6 2007, 21:31
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 687



мда-а-уж.....дела-а. Даже и возразить нечего. unsure.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 17:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016