indlejret - Hvordan kan jeg lave en brugerdefineret USB-enhed i Windows som en COM-port?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har udviklet en USB-enhed, der kommunikerer med Linux over en enkel men proprietær grænseflade og nogle brugerdefinerede Linux-drivere. Mit mål er at sende dette til Windows uden at skrive Windows-drivere. Hvad jeg gerne vil gøre, er at finde en åben kilde eller indbygget klassedriver til Windows, der ligner en COM-port i Windows. Så ville jeg skræddersy den integrerede software til at matche hvad nogensinde protokol og beskrivere den virtuelle COM-port forventer at se.


Ideen ville være, at jeg kunne tilslutte min enhed til en Windows-maskine, og en relativt høj hastighed COM-port ville fremstå uden at jeg skulle udvikle Windows-drivere til det.


Jeg har kigget på dokumentationen til USB CDC (Communications Device Class), og det ser lovende ud, men jeg ved ikke, hvilken undergrænseflade der er bedst at bruge, så den vises som en COM-port.


Har nogen her gjort noget arbejde som dette før eller kunne give noget indsigt?
Konkret:



  1. Er der virtuelle COM-drivere, der er indbygget i Windows, eller vil jeg have brug for en tredjepartsdriver.

  2. Hvilken CDC-underklasse skal jeg bruge til simpel RS232-emulering (Intet behov for modem AT-kommandoer osv.)

  3. Er der en bedre mulighed for at gøre, hvad jeg forsøger at gøre.



Tak

Bedste reference


Der er en USB-til-seriel driver indbygget i Windows, der vil gøre, hvad du vil. Det hedder usbser.sys:


http://support.microsoft.com/kb/837637[1]


Du skal skrive en INF-fil og distribuere det til dine brugere, men det bliver ikke for svært, fordi det kun er få kilobytes tekst, og du kan finde eksempler online.


Jeg er ikke opmærksom på nogen stor dokumentation for denne driver af Microsoft, så mit råd ville være at finde en anden enhed, der bruger den, såsom Pololu Wixel, og kopiere, hvad de gjorde. [2]


Her er de enhedsbeskrivelser, vi brugte, og de specielle kontroloverskridelser, vi måtte implementere:
https://github.com/pololu/wixel-sdk/blob/master/libraries/src/usb\_cdc\_acm/usb\_cdc\_acm.c[3]


Du kan se vores INF-fil, wixel\_serial.inf, ved at downloade softwaren og kigge i driverens mappe:
http://www.pololu.com/docs/0J46/3.a
(Der er andre filer derinde, der ikke er nødvendige for dig.) [4]


Du kan også se på Arduino Uno fordi de bruger den samme driver.


Uanset hvad du gør, skal du ikke bruge vores USB-leverandør-id i dit produkt! Du skal have dit eget.


Opdatering: I Windows 10 behøver du ikke en INF-fil længere på grund af den nye usbser.inf driver, der følger med Windows.

Andre referencer 1


Hvis du bruger en UART, kan du nemt grænseflade den til en FTDI USB chip som http://www.ftdichip.com/Products/ICs/FT232R.htm eller en Prolific som http://www.prolific.com.tw/dan/products.asp? id=59 [5] [6]


Til udvikling, prototype og testning har jeg halvt dusin af disse omkring http://www.pololu.com/catalog/product/391[7]


Jeg forbinder det direkte til UART-stifterne på AVR og 8051 mikro.