原创 IAD实现一个USB接口上多个设备 -- 偶最正统

2009-1-2 12:15 9979 8 8 分类: MCU/ 嵌入式

IAD是Interface Association Descriptor,功能是把多个接口定义为一个类设备。这个描述符是最新更新的,基本在书上是看不到的。

多说无益,自己看http://www.microsoft.com/whdc/archive/IAD.mspx。用起来非常简单的。

Windows下,IAD和Composite设备在设备管理器中没有什么区别,甚至使用的驱动也都是Composite驱动。
Linux下,确实能发现这个设备,不过我用IAD实现的CDC并没有自动装载到ttyACM0,这个就以后研究了。

【问题】
最近试了2种在一个USB接口上实现多个设备的方法,也成功的用这2种方式在偶的JTAGICE mkII上增加了一个CDC串口。
偶的JTAGICE mkII还扩展了usb_to_xxx和vsllink的支持,usb_to_xxx和vsllink的USB底层是libusb。
驱动安装完后,CDC串口和JTAGICE mkII(上位机用AVRStudio)都可以正常工作。
但如果使用libusb的话,可能有一个问题,当调用usb_set_configuration时,libusb会阻塞,直到拔除USB设备后,才会返回。
虽然AVRStudio可以正常操作,但avrdude却会出问题,同样在基于libusb的usb_to_xxx和vsllink上,也出同样的问题。

【解决方法】
发现在Windows的设备管理器中,禁用或者卸载这个CDC串口的话,就一切正常了。看来一山不容二虎,使用libusb的时候,就禁用CDC串口。使用CDC串口的时候,再使能。
这个是由于Windows下的CDC设备,无法使用libusb操作,除非不使用usbser驱动,而是使用libusb驱动。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条