Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB device class посоветуйте
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
gladov
Добрый день!

Хочу сделать USB-device на 7-ом АРМе. Задача классическая: с хоста (Win >= XP) отображаем состояние железяки и гоняем туда/обратно пачки данных (до 500КБит/с). Но я НЕ ХОЧУ делать виртуальный СОМ-порт! Надо сделать так, чтобы:
1) При подключении устройства у юзера в трее появилось сообщение о проприетарном устр-ве, а не "USB<->Serial" или как-то еще.
2) Юзер не должен в нашем управляющем софте выбирать из списка устройств "СОМ51" или "Съемный диск Q:" чтобы подключиться к устр-ву. Софт сам должен определить, что устройсво подключено и коннектиться к нему.
Короче, надо сделать вполне презентабельную "собственную" железку.
Отсюда вопрос: какой выбрать device class чтобы разработка дров под винду не вылилась в долгие месяцы/годы? И что использовать под винды в качестве стартового SDK/DDK?
Ozelot
Я у себя в устройстве имитировал FTDI-устройство. Программа в компе ищет его по строковым дескрипторам и ей не надо указывать номер компорта. Драйвера FTDI D2XX
Xenia
Цитата(gladov @ Jan 12 2011, 14:39) *
Но я НЕ ХОЧУ делать виртуальный СОМ-порт!

Виртуальный СОМ-порт не так плох. Перечисляемые вами недостатки - это не его недостатки, а программного обеспечения.

Цитата(gladov @ Jan 12 2011, 14:39) *
1) При подключении устройства у юзера в трее появилось сообщение о проприетарном устр-ве, а не "USB<->Serial" или как-то еще.

Это как назовете, так оно и представится. Думаете, это Windows сама придумывает названия типа "USB<->Serial"? Нет! Такое имя ей сообщает внешнее USB-устройство. У него есть строковые дескрипторы, и оно может там заказать для себя любое имя. Однако в скобочках номер порта Windows все-таки допишет. Будет выглядеть типа "Мой прибамбас (COM7)". Но это не страшно.

Цитата(gladov @ Jan 12 2011, 14:39) *
2) Юзер не должен в нашем управляющем софте выбирать из списка устройств "СОМ51" или "Съемный диск Q:" чтобы подключиться к устр-ву. Софт сам должен определить, что устройсво подключено и коннектиться к нему.

Ну как пусть софт и определяет! В чем тут вина виртуального СОМ-порта, если вы софт писать не умеете? Обратитесь к программисту. Найти номер COM-порта, у которого имя "Мой прибамбас" не так уж и сложно.

Таким образом, оба перечисленных вами недостака являются не недостатками виртуального СОМ-порта, а недостатками софта: 1-ый - недостатком прошивки USB-устройства, а 2-ой - недостатком приложения, с ним работающим.
DmitryM
Цитата(gladov @ Jan 12 2011, 14:39) *
Добрый день!

Хочу сделать USB-device на 7-ом АРМе. Задача классическая: с хоста (Win >= XP) отображаем состояние железяки и гоняем туда/обратно пачки данных (до 500КБит/с). Но я НЕ ХОЧУ делать виртуальный СОМ-порт! Надо сделать так, чтобы:
1) При подключении устройства у юзера в трее появилось сообщение о проприетарном устр-ве, а не "USB<->Serial" или как-то еще.
2) Юзер не должен в нашем управляющем софте выбирать из списка устройств "СОМ51" или "Съемный диск Q:" чтобы подключиться к устр-ву. Софт сам должен определить, что устройсво подключено и коннектиться к нему.
Короче, надо сделать вполне презентабельную "собственную" железку.
Отсюда вопрос: какой выбрать device class чтобы разработка дров под винду не вылилась в долгие месяцы/годы? И что использовать под винды в качестве стартового SDK/DDK?


HID не подойдет??
gladov
Цитата(DmitryM @ Jan 12 2011, 21:51) *
HID не подойдет??


Может и подойдет, его и рассматриваю. Но вообще-то мне кажется что при моих скоростях мне наиболее подходит Bulk EP, а в HIDe его по-моему нет. Поправьте, если не прав.

Цитата


А неужели так сложно сделать свой, "нативный" драйвер? Дело в том, что лично для меня если в диспетчере устройств появляется виртуальный ком-порт, это попахивает радилюбительской поделухой. Да, для себя самое оно. Но я работаю в серьезной компании, которая хочет начать производство своего USB утройства. Для меня вариант эмуляции кома выглядит несолидно.
Хочу чтобы было, например, как известный многим отладчик от Segger, он же MT-Link: воткнул, система опознала, добавила в USB устройства и работает.
Почему-то в рунете практически не нахожу упоминаний о разработке УСБ-девайса чтобы он был не ХИД и не СОМ. Люди, кто пробовал, поделитесь мнением: это настолько сложно?
vmp
Цитата(gladov @ Jan 13 2011, 08:35) *
Но я работаю в серьезной компании, которая хочет начать производство своего USB утройства.

Для начала выбейте от руководства серьезной компании $4000 на членство в USB Implementers Forum или хотя бы $2000 на покупку Vendor ID.
Рекомендую еще заказать книжки USB System Architecture и USB Complete.
gladov
Цитата(vmp @ Jan 13 2011, 09:12) *
Для начала выбейте от руководства серьезной компании $4000 на членство в USB Implementers Forum или хотя бы $2000 на покупку Vendor ID.
Рекомендую еще заказать книжки USB System Architecture и USB Complete.


Уже выбил и уже читаю. А по теме можно ответить?
vmp
Цитата(gladov @ Jan 13 2011, 09:36) *
Уже выбил и уже читаю. А по теме можно ответить?

О! Поздравляю! Значит действительно серьезная компания.
По теме - на мой взгляд стандартный класс предпочтительнее. В этом случае не нужно заниматься написанием и сертификацией в Микрософт собственного драйвера, а можно воспользоваться готовым, встроенным в Windows: Drivers for the Supported USB Device Classes.
Исходя из вышеизложенных требований, я бы тоже посоветовал HID. Единственное сомнение - даст ли он требуемую скорость передачи.
galjoen
Цитата(vmp @ Jan 13 2011, 09:45) *
Исходя из вышеизложенных требований, я бы тоже посоветовал HID. Единственное сомнение - даст ли он требуемую скорость передачи.

HID всем хорош. К тому выбивание не нужно, т.к. он не требует членства в USB или покупки VID, т.к. будет работать при VID=PID=0. И 512 кбит/сек туда и сюда обеспечивает. HID это 1000 пакетов по 64 байта в секунду с каждую сторону. Если не хватает, то можно сделать составное устройство в котором будут 2 или больше HID-а. В общем столько, сколько EP у железа имеется.
редактор
Делал HID устройство, которое работало через BUKL EP.
Из винды работал через через libusb-win32.
Но есть и буржуйские девайсы, которые работают через BULK EP, правда со своим драйвером (подглядел конфигурацию).
Так что больших проблем, думаю, нет.

galjoen
Цитата(редактор @ Jan 13 2011, 18:48) *
Делал HID устройство, которое работало через BUKL EP.

Как это??? Можно дескрипторы посмотреть?
segment
С HID непонятки.. Ну к примеру в контроллере накопилось много данных в буфере, то толку что скорость HID 64кбит/с (и откуда взяли 512кбит/c?) - всеравно следующая передача 64 байт будет через 1мс, и буфер переполнится. Или я не прав?
galjoen
Цитата(Сега @ Jan 13 2011, 21:44) *
С HID непонятки.. Ну к примеру в контроллере накопилось много данных в буфере, то толку что скорость HID 64кбит/с (и откуда взяли 512кбит/c?) - всеравно следующая передача 64 байт будет через 1мс, и буфер переполнится. Или я не прав?

1000(пакетов в секунду)*64(байта в пакете)*8(бит в байте)=512000(бит за секунду)=512кбит/с
А без буфера достаточной величины в любом случае делать нечего...
Konst_777
Цитата(gladov @ Jan 12 2011, 14:39) *
...
Хочу сделать USB-device на 7-ом АРМе...Но я НЕ ХОЧУ делать виртуальный СОМ-порт!...

Цитата(редактор @ Jan 13 2011, 18:48) *
...Из винды работал через через libusb-win32...

То есть, изучаете использование libusb-win32 или libusbdotnet (попутно WinUSB) и получаете все, что Вы хотите. Если будете использовать libusbdotnet/WinUSB, то не будет проблем с подписыванием драйвера под Win7 x64.
gladov
Цитата(galjoen @ Jan 13 2011, 18:58) *
Цитата
Делал HID устройство, которое работало через BUKL EP.

Как это??? Можно дескрипторы посмотреть?


Присоединюсь к просьбе. Если и правда получится к HID прикрутить bulk то это для меня будет самым правильным решением.

Цитата
То есть, изучаете использование libusb-win32 или libusbdotnet (попутно WinUSB) и получаете все, что Вы хотите. Если будете использовать libusbdotnet/WinUSB, то не будет проблем с подписыванием драйвера под Win7 x64.


Всем спасибо! В голове начало проясняться sm.gif
редактор
Наверное все сделал по незнанию rolleyes.gif
Начал разбираться с USB
Взял пример HID от SiLabs 320 и стал его переделывать под миландр 1986 (ARM)
На каком то этапе заменил в дескрипторе для конечной точки значение с INTERRUPT на BULK
ПереЗацепил устройство через libUsb_Win и приложение заработало. biggrin.gif
Дескрипторы буржуйского девайса подсмотрел через USBVIEW (скачивал кажется с usb.org)
Нажмите для просмотра прикрепленного файла

свои дескррипторы
Нажмите для просмотра прикрепленного файла

Проблема была следующая. Сперва работал через INTERRUPT, все было нормально.
Потом добавил в интерфейс EP BULK. Начались глюки.
Убрал INTERRUPT, оставил только BULK, все опять стало нормально.
Konst_777
Погорячился я со своим заявлением:
Цитата(Konst_777 @ Jan 13 2011, 23:25) *
...Если будете использовать libusbdotnet/WinUSB, то не будет проблем с подписыванием драйвера под Win7 x64.

Утилита "USB InfWizard" (\LibUsbDotNet\InfWizard.exe) из LibUsbDotNet создает файл каталога (*.cat) для файлов драйвера, но не подписывает *.cat файл sad.gif
редактор
С буржуйским устройством наврал, он не HID wacko.gif
Но свое работает. Система видит его как HID и общается через BULK.
А usbview - утилита от Микрософта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.