Как я могу создать пользовательское устройство 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.