Как сделать так, чтобы пользовательское USB-устройство отображалось в Windows как COM-порт? - PullRequest
10 голосов
/ 23 августа 2011

Я разработал USB-устройство, которое взаимодействует с Linux через простой, но собственный интерфейс и некоторые пользовательские драйверы для Linux.Моя цель - перенести это на Windows без написания драйверов для Windows.Что я хотел бы сделать, так это найти драйвер с открытым исходным кодом или встроенный драйвер класса для Windows, который будет выглядеть как COM-порт в Windows.Затем я настроил бы встроенное программное обеспечение так, чтобы оно соответствовало всем протоколам и дескрипторам, которые виртуальный COM-порт ожидает увидеть.

Идея состояла бы в том, что я мог бы подключить свое устройство к машине с Windows, и появился бы относительно высокоскоростной COM-порт без необходимости разрабатывать драйверы для Windows.

Я просматривал документацию по USB CDC (класс устройств связи), и она выглядит многообещающе, но я не знаю, какой подчиненный интерфейс лучше использовать, чтобы он отображался как COM-порт.

Кто-нибудь здесь делал какую-либо работу, подобную этой, или мог бы дать некоторое представление?В частности:

  1. Есть ли в Windows "встроенные" виртуальные драйверы COM или мне нужен драйвер стороннего производителя.
  2. Какой подкласс CDC следует использовать для простой эмуляции RS232 (Нетнеобходимость в AT-командах модема и т. д.)
  3. Есть ли лучший вариант для выполнения того, что я пытаюсь сделать.

Спасибо

Ответы [ 2 ]

10 голосов
/ 23 августа 2011

В Windows есть встроенный драйвер USB-to-serial, который будет делать то, что вы хотите.Он называется usbser.sys:

http://support.microsoft.com/kb/837637

Вам придется написать INF-файл и распространить его среди своих пользователей, но это не будет слишком сложно, потому что это всего лишь несколькокилобайт текста, и вы можете найти примеры в Интернете.

Мне не известно о какой-либо замечательной документации для этого драйвера от Microsoft, поэтому я бы посоветовал найти какое-то другое устройство, которое его использует, например Pololu Wixel и скопируйте то, что они сделали.

Вот дескрипторы устройства, которые мы использовали, и специальные управляющие передачи, которые нам пришлось реализовать: https://github.com/pololu/wixel-sdk/blob/master/libraries/src/usb_cdc_acm/usb_cdc_acm.c

Вы можете увидеть наш INF-файл, wixel_serial.inf, загрузив программное обеспечение и заглянув в папку драйверов: http://www.pololu.com/docs/0J46/3.a (там есть и другие файлы, которые вам не нужны.)

Вы также можете посмотреть на Arduino.Uno, потому что они используют один и тот же драйвер.

Что бы вы ни делали, пожалуйста, не используйте наш USB Vendor ID в вашем продукте!Вам нужно получить свой собственный.

Обновление: В Windows 10 вам больше не нужен INF-файл из-за нового драйвера usbser.inf, который поставляется с Windows.

1 голос
/ 24 августа 2011

Если вы используете UART, вы можете легко подключить его к USB-чипу FTDI, например http://www.ftdichip.com/Products/ICs/FT232R.htm или к Prolific, например http://www.prolific.com.tw/eng/products.asp?id=59

.

Для разработки, создания прототипа и тестирования у меня есть полдюжины таких закладок около http://www.pololu.com/catalog/product/391

Я подключаю его напрямую к контактам UART AVR и 8051 micros.

...