Wince下usb驱动详细总结(史无前例的详细)

0,前言:

        1, 本篇文章只讲wince下的usb host驱动,并深入解析HID驱动。本博客的目的并不是只是为了讲怎么写驱动, 更重要的是:

                   1,了解wince驱动的架构。

                   2,学习微软的写作方法,如何去架构一个非常复杂的程序(USB驱动的确是有点复杂,但是微软的代码写的非常的具有条理,是不可多得的学习资料微笑)。

        2,学习wince usb驱动,必须对usb的协议有一定了解,可以看看《USB2.0 硬件设计(第2版)》

1,USB驱动的总体结构

        这个方面的资料很多,其实也很简单,其实从总体来看,不管细节,USB驱动就那么三层架构而已。如下图:

         由于我们只专注于usb host端的驱动,所以只要看左边就可以了,最底层是硬件,硬件上面的第一层是HCD驱动,第二层是USBD,再上面就对应不同的usb设备来,print对应usb打印机,Mass Storage对应U盘,HID对应USB鼠标,USB键盘和其他符合HID设备,HID并不是一个驱动,而是一个类别,所以USB鼠标,USB键盘都要单独的驱动。

         下面我们从最底层往上来学习USB驱动。


2,USB Host Controller Hardware (HC 硬件)

       就如同串口一样,USB需要有硬件来支持,串口有RS232,RS485……,USB host controller 有OHCI,UHCI……,这个没什么好说的,到底不同那个的硬件有什么不同的特性,这里就不讨论了。赶紧看 下一小节。


3,USB  Host Controller Driver(HCD驱动)

       前面说了USB接口需要硬件,那么不同的硬件驱动方式肯定有所以不同,这点不像串口。如果你用的是OHCI,那么你必须有针对OHCI的驱动。
       我们以OHCI为例,来看看这一层的驱动如何架构。

       1.打开目录WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USB\HCD,可以看到:

打开common中的source文件,可以看到里面的程序编译成hcdlib,打开OHC中的cource文件,可以看到里面的程序编译成ohci_lib,打开OHCD2中的source文件,可以看到里面的程序编译成ohcdmdd2。
        
       2.在D:\WINCE600\public\common\CESYSGEN\makefile中可以看到:



       从这里已经很明白了,上面的三个文件夹,再加上ceddk就能够编译出ohci2,这个就是OHCI对应的HCD层的驱动了。

       3.到这里已经讲完了HCD层,当然里面代码也是值得我们学习的,但是对我们写驱动却没有太多的帮助。我们来看看HCD层提供一些什么样的接口函数吧!
           1) 打开 D:\WINCE600\PUBLIC\COMMON\OAK\INC\hcdi.h 可以看到下面的函数。这几个函数是USBD层必须要实现的,你会在hcd层发现系统加载USBD.dll,然后调用上面这些函数,具体得代码,这里就不照抄了,参考D:\WINCE600\public\common\oak\drivers\usb\hcd\common\cdevice.cpp。

       BOOL HcdAttach(LPVOID lpvHcd, LPCHCD_FUNCS lpHcdFuncs, LPLPVOID lppvContext);
       BOOL HcdDetach(LPVOID lpvContext);
       BOOL HcdDeviceAttached(LPVOID lpvContext, UINT iDevice, UINT iEndpointZero,
       LPCUSB_DEVICE lpDeviceInfo, LPLPVOID lppvDeviceDetach);
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值