天天看点

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

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

2011-12-08 19:08:24

标签:S3C6410 架构分析 WinCE6.0 USB驱动

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jazka.blog.51cto.com/809003/737486

学习WinCE下的USB驱动几天了,有了一个整体的了解,这里对网上的资料和个人的理解做一个总结。软件平台是WinCE6.0,硬件平台是S3C6410。

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的驱动架构如下图所示,包含了它的三种角色。

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

3、WinCE6.0中的USB目录结构

WinCE6.0中对USB已经有了很好的支持,下面看看微软已经做了哪些工作。

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

从上面的目录结构可以看出,微软提供的USB驱动是根据三种不同角色来划分的。USB对应着USB Host的功能,USBFN对应着USB Function功能,USBOTG对应着USB OTG功能。

(1)WINCE600\PUBLIC\COMMON\OAK\DRIVERS\USB的下层目录如下:

WinCE6.0+S3C6410 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的下层目录如下:

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

结合架构图,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的下层目录如下:

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

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

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

设备驱动层的定制在Catalog Items View中的”Device Drivers”->”USB Function”->”USB Function Clients”,如图:

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

参考资料:

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

本文出自 “飞雪待剑” 博客,请务必保留此出处http://jazka.blog.51cto.com/809003/737486