Как я могу создать пользовательское устройство USB в Windows в качестве COM-порта?

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

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

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

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

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

Спасибо

Ответ 1

В 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-идентификатор вендора в своем продукте! Вы должны получить свой собственный.

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

Ответ 2

Если вы используете 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.