以前看USB协议2.0的时候,有个认识上的误区,认为所谓的复合设备,必须是两个物理上相独立的USB设备(两个USB Device,两个USB地址,只是在同一条USB总线而已)。最近在开发.Net Micro Framewok的USB双接口功能时,才明白复合设备原来也可以是这样实现!
1为什么要实现双接口
有在.Net Micro Framework调试SideShow经验的用户,就会有特别深的感触,因为SideShow通信是基于USB,而大部分.Net Micro Framework调试口也是基于USB,由于只有一个接口,所以PC端要么安装SideShow驱动,要么安装.Net Micro Frame USB设备驱动,二者不能共存(当然让两个驱动共存,也可以设置不同的PID和VID,但是这样就需要在.Net Micro Frame开发板上进行相应的配置了),别说在线调试了,光编译下载,就不知道要折腾好几回。
所以对只有一个USB Debug口的开发板,要调试USB相关例程是非常痛苦的。
而USB双接口的方案就是为解决该问题而生。同时有两个USB接口,即可以安装两个不同的驱动,也可以在线调试USB例程。这是多么一个令人神往的特性,尤为可喜的是这已经不仅仅是个意境,现如今已成为现实。目前我们已经测试通过的有:Debug+Mass Storage(U盘),Debug+HID(鼠标),Debug+Application(应用口)。当然也可以根据需要配置成三个、四个设置或多个你任意想要的接口。
2 支持双接口,需要做些什么
.Net Micro Framework USB接口模型
第一、修改.Net Micro Framework的USB接口配置,把一个接口修改成两个接口;
第二、修改.Net Micro Framework的USB接口驱动,以前仅支持端点1和端点2,目前增加对端点3和端点4的支持。逻辑上接口1包括端点1和端点2,接口2包括端点3和端点4;
第三、修改PAL层接口,增加端点3和端点4的读写接口函数;
第四、编写P/Invoke接口,让C#程序也可以读写端点3和端点4的数据(端点1和端点2默认供调试程序读写用);
第五、修改.Net Micro Frame USB Windows驱动,让其支持双接口。(当然如果你的接口配置为HID或Mass Storage,那就不需要开发专门的驱动了);
第六、剩下的就是测试再测试了。