打印
[USB接口]

好象USB可以枚举成两个VID/PID啊?

[复制链接]
7902|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcdzxh|  楼主 | 2017-8-23 10:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
john_lee| | 2017-8-23 12:45 | 只看该作者
USB 复合设备(compound device),就是内部实现了一个 USB Hub 逻辑,然后其它设备功能逻辑后通过这个 Hub 逻辑与 USB host 通信。对 USB host 而言,USB compound device 就是个 Hub 带了一堆 USB device 而已。

使用特权

评论回复
板凳
darlin2014| | 2017-8-23 15:43 | 只看该作者
只做了一个鼠标+音频的复合设备,共用VID/PID

Audio-Mouse.png (22.83 KB )

Audio-Mouse.png

使用特权

评论回复
地板
jcdzxh|  楼主 | 2017-8-24 11:43 | 只看该作者
顶一下,哪位讲讲怎么枚举2个VID?

使用特权

评论回复
5
WCHCN| | 2017-8-24 14:34 | 只看该作者
为什么需要枚举成两组PID/VID啊?

使用特权

评论回复
6
zhs2007| | 2017-8-24 15:48 | 只看该作者
首选像说明一下,USB复合设备,是指一个配置Configuration下,通过多个接口Interface实现多个独立设备协议,PC端识别为多个独立设备,这些设备PID/VID相同。
1. 复合设备与HUB没关系。
2. 一个USB设备,只有一个PID、VID,一个设备可以设计成多个配置Configuration,每个配置下可以有多个接口,一个时刻只能有一个“配置”有效。
3. 一个协议由一个或多个接口实现。
4. 一个接口可以包含0个或多个端点。
5. 一个配置下,可以通过多个接口实现多个协议,在电脑上被识别为多个独立虚拟设备。
6. 主机通过GetDescriptor (Device)获取到设备的PID、VID、以及配置个数,设备描述符最后一个字节bNumConfigurations
7. 主机通过GetDescriptor (Configuration)可以获取每个配置的信息,SETUP请求中wValue字段就是本次要获取的配置序号,配置描述符中,设备告诉主机,本配置下有几个接口,实现了哪几种协议。
8. 主机通过SetConfiguration ()命令,选择一个配置,此后,设备称为配置态。

使用特权

评论回复
7
zhs2007| | 2017-8-24 15:53 | 只看该作者
楼主的“好象”一词用的很是“精妙”啊!

使用特权

评论回复
8
jcdzxh|  楼主 | 2017-8-24 22:08 | 只看该作者
搞混复合设备和组合设备了吧,600多页的协议里有拓扑图,device可以枚举成hub,上面还可以插死,不能拔下的不同设备

使用特权

评论回复
9
jcdzxh|  楼主 | 2017-8-25 11:27 | 只看该作者
已经在STM32上做出HUB了,更下来试试看能不能在上面同时“插”1个“CH340G”和1个“FT232”。



使用特权

评论回复
10
2584063385| | 2017-8-25 13:05 | 只看该作者
做成hub以后,下级的设备好枚举么?还是说由软件实现?

使用特权

评论回复
11
jcdzxh|  楼主 | 2017-8-25 14:04 | 只看该作者
2584063385 发表于 2017-8-25 13:05
做成hub以后,下级的设备好枚举么?还是说由软件实现?

没有下级设备一说,逻辑上的hub和下级设备, 都是stm32在忽悠主机

使用特权

评论回复
12
jcdzxh|  楼主 | 2017-8-25 14:09 | 只看该作者
插的是啥?
HUB!
几个口哦?
8个!
1口?
没插!
2口?
有!
...........
差不多就这样的会话流程,只是不同于真的HUB+设备,STM32是在表演单口相声

使用特权

评论回复
13
2584063385| | 2017-8-25 17:14 | 只看该作者
jcdzxh 发表于 2017-8-25 14:09
插的是啥?
HUB!
几个口哦?

理论上是这样,纯靠stm32表演。但是这个要怎么表演是有点烧脑的

使用特权

评论回复
14
sjhuang527| | 2017-11-26 11:38 | 只看该作者
一般情况下 USB 只有一个 PID/VID ,表面这个哪个厂家的哪款产品。
但是USB device也是编码实现的。其device  descripter PID/VID 也是可以设置的,具体要看 device 固件怎么做。

我曾经发现一款 U disk 里面的 nand init fail,其 PID 会设置为一个特定的值。
所以类似 U disk 量产工具,当发现这个 PID 后,可以尝试用工具低格一下其内部的 nand,对 U 盘进行修复。

使用特权

评论回复
15
一骑红尘追梦中| | 2017-12-15 09:58 | 只看该作者
john_lee 发表于 2017-8-23 12:45
USB 复合设备(compound device),就是内部实现了一个 USB Hub 逻辑,然后其它设备功能逻辑后通过这个 Hub ...

您好!我现在也在做一个需要实现USB多接口复合设备的实验,其中,在应用程序中注册的是CDC_ACM类,并且定义了设备框架高速描述符结构体、设备框架全速结构体以及字符串框架,字符串参数框架中包含制造商字符串描述符、产品字符串描述符和序列号字符串描述符。。。做的这个USB是在BP上开发,上接跑安卓系统的AP,USB接口用来AP-BP通信,所以想请教该如何去实现USB的复合设备呢?谢谢

使用特权

评论回复
16
john_lee| | 2017-12-15 13:00 | 只看该作者
一骑红尘追梦中 发表于 2017-12-15 09:58
您好!我现在也在做一个需要实现USB多接口复合设备的实验,其中,在应用程序中注册的是CDC_ACM类,并且定 ...

device中只有ACM?

使用特权

评论回复
17
一骑红尘追梦中| | 2017-12-15 14:12 | 只看该作者
本帖最后由 一骑红尘追梦中 于 2017-12-19 17:28 编辑

因为没有Windows驱动,所以都是上接Linux主机,通过dmesg查看,只生成一个设备文件ttyACM0。接入后信息如下:
[  409.972173] usb 2-4: new high-speed USB device number 5 using ehci-pci
[  410.105181] usb 2-4: config 1 interface 0 altsetting 0 endpoint 0x84 has an invalid bInterval 255, changing to 11
[  410.105195] usb 2-4: config 1 interface 1 altsetting 0 bulk endpoint 0x1 has invalid maxpacket 64
[  410.105204] usb 2-4: config 1 interface 1 altsetting 0 bulk endpoint 0x82 has invalid maxpacket 64
[  410.106414] usb 2-4: New USB device found, idVendor=xxxx, idProduct=xxxx
[  410.106422] usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  410.106428] usb 2-4: Product: EL Composite device
[  410.106434] usb 2-4: Manufacturer: Expres Logic
[  410.106441] usb 2-4: SerialNumber: 0001
[  410.140701] cdc_acm 2-4:1.0: ttyACM0: USB ACM device
[  410.141131] usbcore: registered new interface driver cdc_acm
[  410.141134] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

使用特权

评论回复
18
john_lee| | 2017-12-15 17:27 | 只看该作者
你的设备只有一个ACM interface,不需要做成复合设备。

使用特权

评论回复
19
一骑红尘追梦中| | 2017-12-15 17:45 | 只看该作者
john_lee 发表于 2017-12-15 17:27
你的设备只有一个ACM interface,不需要做成复合设备。

现在需要将其做成复合设备,因为AP与BP之间的通信数据有音频数据、网络数据等等,考虑到传输时尽量互不干扰,所以对USB的类驱动添加多路复用的功能,所以考虑到复合设备...这样应该没问题吧,您有什么建议吗?

使用特权

评论回复
20
john_lee| | 2017-12-15 18:24 | 只看该作者
如果没有特殊需求,比如多个PID/VID之类,一般不建议做成compound,而应该做成composite,用device中的各种interface来实现各种相应的功能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

302

帖子

4

粉丝