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