USB混合设备 USB虚拟多串口

时间:2021-03-26 16:14:32
比如我们的手机以modem方式插入电脑后,会虚拟出很多个串口。

其中包括一般的串口和modem串口。
这是怎么实现的呢,大概原理是什么。

我的理解是:一个USB设备包含多个端点(Endpoint),一般是4个,每个端点用作不同的功能,因此当插入USB主机后,可以虚拟出多个串口,打开不同的串口时,每个被打开串口能够访问的是其中一个端点。

不知道这样的理解是否正确。

请大家指点一下,谢谢

15 个解决方案

#1


这个还不怎么清楚,但是帮顶一下

#2


up,mark

#3


不了解,顶

#4


应该是复合设备才对!

其实就是一个USB Modem
怎么实现的,原理

#5


不知道是不是你想要的,
一般的端口读写,其实就是读写一个端口文件。然后用文件共享的方式读写就可以了。

#6


只做过虚拟成一个的

#7


引用 5 楼 jzhang19820329 的回复:
不知道是不是你想要的,
一般的端口读写,其实就是读写一个端口文件。然后用文件共享的方式读写就可以了。


有参考的源代码吗??、
谢谢

#8


关注新技术.

#9


这个不算什么新技术吧,很多人都会了,只是我还不懂而已
呵呵

#11


标题有误,
刚刚了解到,USB设备分复合设备和组合设备

我正在开发的驱动应该是属于组合设备得驱动。

设备描述如下:


Device Descriptor:
bcdUSB:             0x0110
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64) //最大包大小
idVendor:           0xXXXX //生产商ID
idProduct:          0xXXXX //产品ID
bcdDevice:          0x0000
iManufacturer:        0x01
iProduct:             0x02
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x01 //设备地址,随机
Open Pipes:              9 //端点数量

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:   Interrupt
wMaxPacketSize:     0x0010 (16)
bInterval:            0x80

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x02
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x84
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x04
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x87
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x07
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x88
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x08
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

#12


搞定
3G\CDMA\EVDO驱动开发完成,成功虚拟多个串口

#13


是否一对IN/OUT对应一个COM口,虚拟成4个串口 吗?你的注册表是怎么写的,如何加载驱动的?

#14


晕,分不够呢

#15


先做虚拟一个串口的, 然后修改inf 文件, 虚拟出4个串口.
qq: 1226815109

#1


这个还不怎么清楚,但是帮顶一下

#2


up,mark

#3


不了解,顶

#4


应该是复合设备才对!

其实就是一个USB Modem
怎么实现的,原理

#5


不知道是不是你想要的,
一般的端口读写,其实就是读写一个端口文件。然后用文件共享的方式读写就可以了。

#6


只做过虚拟成一个的

#7


引用 5 楼 jzhang19820329 的回复:
不知道是不是你想要的,
一般的端口读写,其实就是读写一个端口文件。然后用文件共享的方式读写就可以了。


有参考的源代码吗??、
谢谢

#8


关注新技术.

#9


这个不算什么新技术吧,很多人都会了,只是我还不懂而已
呵呵

#10


#11


标题有误,
刚刚了解到,USB设备分复合设备和组合设备

我正在开发的驱动应该是属于组合设备得驱动。

设备描述如下:


Device Descriptor:
bcdUSB:             0x0110
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64) //最大包大小
idVendor:           0xXXXX //生产商ID
idProduct:          0xXXXX //产品ID
bcdDevice:          0x0000
iManufacturer:        0x01
iProduct:             0x02
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x01 //设备地址,随机
Open Pipes:              9 //端点数量

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:   Interrupt
wMaxPacketSize:     0x0010 (16)
bInterval:            0x80

Endpoint Descriptor:
bEndpointAddress:     0x82
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x02
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x84
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x04
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x87
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x07
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x88
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x08
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

#12


搞定
3G\CDMA\EVDO驱动开发完成,成功虚拟多个串口

#13


是否一对IN/OUT对应一个COM口,虚拟成4个串口 吗?你的注册表是怎么写的,如何加载驱动的?

#14


晕,分不够呢

#15


先做虚拟一个串口的, 然后修改inf 文件, 虚拟出4个串口.
qq: 1226815109