打印

一个USB能同时认到HID和U盘这两种设备吗?

[复制链接]
5742|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ygx705|  楼主 | 2011-9-21 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Alex_rcpilot| | 2011-9-22 02:03 | 只看该作者
不知道你说的一个USB是一个什么样的USB,如果你说的是一个物理USB设备被主机识别为两个逻辑USB设备,答案是可以。方法有两种,一种是使用内置HUB芯片将主机上的一个口分成两个口,然后分别用一个负责HID的芯片和一个负责MSC的芯片连接在分出来的口上。这种做法叫做组合设备(Compound Device),粗笨不实用,几乎没人用它。另一种是只用一个USB芯片,定义两个端点描述符,分别标识为HID类和MSC类,实现纯软件的双设备。这种做法叫做复合设备(Composit Device),是主流做法。

使用特权

评论回复
板凳
ygx705|  楼主 | 2011-9-23 14:12 | 只看该作者
你好。我现在用的是LPC1758的芯片,内置USB接口,已经分别实现USBHID类和MSC类,然后我试图在设备描述符那里开了连个接口,分别是HID类的和MSC类的,但最终还是只能认到其一。你说的定义两个端点描述符,但是在设备的识别过程中,都是端点0在处理的,我用BUSHOUND捕获的过程中,HID的描述符并没有网上位机那里送,如果换种做法,只开一个接口,又该如何处理呢?

使用特权

评论回复
地板
Alex_rcpilot| | 2011-9-23 17:27 | 只看该作者
你的Device Descriptor怎么设置的class?正确的做法是设置成0x00,表示PC需要从interface descriptor里面找class的定义。

使用特权

评论回复
5
ygx705|  楼主 | 2011-9-23 18:05 | 只看该作者
没错啊,我是把Device  Descriptor设置成0x00了,但这是设备的类型参数,这个没有问题,在返回REQUEST_TO_DEVICE之后,接着就是接口描述符了,然后就是找不到PC机发送的接口描述符0x02的请求了,也就是HID中各描述符的返回。但没有把HID和MSC加在一块的时候是可以返回的。

使用特权

评论回复
6
Alex_rcpilot| | 2011-9-23 20:04 | 只看该作者
枚举的时候是提示几次找到新设备?

使用特权

评论回复
7
Alex_rcpilot| | 2011-9-23 20:05 | 只看该作者
不行的话把你的描述符定义发上来吧。

使用特权

评论回复
8
ygx705|  楼主 | 2011-9-26 13:24 | 只看该作者
第一个是NXP公司的HID和MSC类例程代码,第二个是我自己改的描述符C文件。里面的才是可以在例程那里找到对应的参数值。编译软件用的是KEIL。谢谢

LPC17xxSampleSoftware.101.zip

937.19 KB

usbdesc.zip

2.32 KB

使用特权

评论回复
9
softradio| | 2011-9-27 14:29 | 只看该作者
2# Alex_rcpilot
Compound Device没有想象的那么麻烦,对于楼主的应用来说实际上只是需要虚拟三个Device: Hub, HID, 以及MSC。实际上只需要一套USB外设,前提是USB的外设可以支持多地址访问,而不是使用单地址访问。这种好处是上位机的描述符比较简单,但是下位机的程序处理比较复杂。

虽然使用Composite Device下位机程序比较简单,但是对上位机的描述就不如Compound Device来的通用。如果上位机不是PC而是嵌入式系统,譬如STB,那么用户必须升级上位机的描述符来来支持Composite Device。

使用特权

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

本版积分规则

0

主题

5

帖子

1

粉丝