分享

USB Composite实现一个USB接口上多个设备

 rookie 2015-02-25
【误区】
很多人认为一个USB接口上实现多个设备指复合设备,其实,这个是一个误区。
在一个USB接口上实现多个设备有2中方法,一种是Compound Device,就是复合设备;另一种是Composite Device,就是组合设备。
在USB2.0的标准协议中,定义如下:
When multiple functions are combined with a hub in a single package, they are referred to as a compound device.

A device that has multiple interfaces controlled independently of each other is referred to as a
composite device.
所以,复合设备其实就是几个设备通过一个USB Hub形成的单一设备;组合设备也就是具有多个接口的设备,每个接口代表一个独立的设备。
显然,如果是想同样的功能的话,组合设备的方法要简单很多(可以去看一下USB2.0协议中,USB2.0 Hub的复杂度)。

【目标与实现方法】
给Versaloon模拟的JTAGICE mkII增加一个CDC串口。由于标准的CDC串口需要2个接口,所以用组合设备比较难以实现(因为组合设备要求每个接口对应一个独立的设备)。还好,Windows是一向不按照标准来的,Windows的usbser.sys支持一种只有一个接口的CDC设备。实现方法是:不需要数据类接口,而是把原先数据类接口上的2个Bulk端口,放在通信类接口上即可。

【结果】
知道方法了,相信不用我多少,熟悉USB设备编程的人就可以马上自己搞定了。
这里给个图,JTAGICE mkII就是模拟的设备,CDConJTAGICE mkII就是增加的一个CDC串口。
这下,Versaloon就可以直接支持那些串口编程的芯片了。


【问题】
1.WinXP SP2需要安装usbser的一个多设备补丁,不过M$不让下载,我声请了下载,但一直没有发给我。这样SP2下会提示那个CDC串口无法启动(JTAGICE mkII还是可以正常使用);SP3下没有问题。
2.驱动的安装,增加了CDC口后,JTAGICE mkII就不是原来标准的Atmel的驱动认识的JTAGICE mkII了,所以,驱动无法自动安装上。需要自己手动选择安装这个驱动(Windows会提示警告)。CDC的驱动当然本来就也只能手动安装。

目前测试下来,原来的功能都可以正常使用。等以后有时间的话,再测试这个CDC串口。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多