WinCE6.0+S3C6410 USB驱动架构分析

    学习 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 ”,如图: