学习
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
”,如图:
本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/737486,如需转载请自行联系原作者