学习 WinCE 下的 USB 驱动几天了,有了一个整体的了解,这里对网上的资料和个人的理解做一个总结。软件平台是 WinCE6.0 ,硬件平台是 S 3C 6410
       1 WinCE 设备的三种角色
    USB 是主从结构,分为主端和从端。一般主端称为 Host ,从端称为 Client ,但是在 WinCE 系统中有些不同,主端称为 Host ,从端称为 Function
     对于 USB 而言,搭载 WinCE 系统的嵌入式设备可以扮演三种不同的角色,即三种不同的功能: Host Function 以及 OTG
    WinCE 设备经常会外接各种 USB 设备,如 RNDIS Print Mass Storage HID 设备等,此时作为主端使用,实现的是 Host 功能。
     WinCE 设备连接 PC 机时,便是作为从端使用,实现的是 Function 的功能。但此时 WinCE 设备可以表现为多种形式,有 Mass Storage RNDIS 或者串口设备。比如 WinCE 设备连接 PC 进行同步时表现为串口设备。
     WinCE 设备实现 OTG 功能时,既可以作为主端使用,也可以做为从端使用。
       2 WinCE6.0 中的 USB 驱动框架
       USB 的驱动架构如下图所示,包含了它的三种角色。
3 WinCE6.0 中的 USB 目录结构
       WinCE6.0 中对 USB 已经有了很好的支持,下面看看微软已经做了哪些工作。
    从上面的目录结构可以看出,微软提供的 USB 驱动是根据三种不同角色来划分的。 USB 对应着 USB Host 的功能, USBFN 对应着 USB Function 功能, USBOTG 对应着 USB OTG 功能。
      1 WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USB 的下层目录如下:
    结合架构图理解, CLASS 文件夹对应 USB Host Client Driver 部分,是上层的应用协议,各个文件夹对应有 HID 设备、打印机、大容量存储器、 USB 串口等应用。 CLIENTCMN COMMON 两个文件夹是各种应用的公用代码。
    HCD 文件夹实现的是控制器驱动程序模块,为 USBD 模块提供底层支持。 HCD 模块主要提供对各个协议的支持,包括 OHCI(open host controller inferface) UHCI (universal host controller interface) 以及 EHCI (enhanced host controller interface) 。具体的关于这几个协议的介绍请查看后面的链接资料。
    USBD 文件夹是通用串行总线驱动程序模块,利用 HCD 模块的支持,实现各种接口函数提供给上层,使得上层能够与外围设备进行通信。
    COMMON INC 文件夹实现的是锁功能,包含 lock.h lock.cpp
      2 WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USBFN 的下层目录如下:
    结合架构图, CLASS 文件夹对应 USB Function Client Driver 部分,下面的各个文件夹对应着 WinCE 设备的表现形态,常用的有三大类: RNDIS SERIAL STORAGE 。这些和 USB Host 驱动中的不同,那些指的是外围设备,这里指的是 WinCE 设备本身。文件夹 COMPOSITEFN UFNPRN 是共用的代码。
    CONSTROLLER 文件夹实现了底层控制器的驱动。当 WinCE 设备跟 PC USB 线连接时,表现为多种形式:大容量存储器( Mass Storage )、一个网卡( RNDIS )或者一个串口设备( Serial Class) 等,所以需要一个控制系统,把这部分分离了出来做成一层驱动,叫做 Controller (控制器),由该层驱动来控制 WinCE 设备到底表现成一种什么形式,包括卸载旧的 Client ,加载新的 Client MDD 文件夹实现的是该部分驱动的 MDD 部分, PDD 部分的硬件是 NET2280 控制器,在文件夹 NET2280 中实现。
    UFNCLIENTLIB 是该驱动的基础公共代码。
      3 WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USBOTG 的下层目录如下:
    USB OTG 结构比较简单,驱动实现按照标准的流接口形式,分为 MDD PDD 两部分, MDD 部分对应上面的文件夹, PDD 部分的硬件采用的是 ISP1301 收发器,在 TRANS 文件夹中实现。
     4 WinCE6.0 系统的 USB 功能定制
    WinCE6.0 USB 相关的定制包含两部分:内核服务层和设备驱动层。
       内核服务层的定制在 Catalog Items View 中的” Core OS -> CEBASE -> Core OS Services -> USB Host Support ”,如图:
        设备驱动层的定制在 Catalog Items View 中的” Device Drivers -> USB Function -> USB Function Clients ”,如图:

参考资料:
http://hi.baidu.com/donghaozheng/blog/item/3b2806faf2afc99058ee903b.htm
有关 OHCI UHCI EHCI 的知识
http://zhuairlunjj.blog.163.com/blog/static/8005094520107203058470/
WinCE 系统 USB 功能定制
http://blog.csdn.net/nanjianhui/article/details/4438599