Windows CE之USB驱动基本概念

USB驱动程序
USB是一种通信协议,它支持主系统和使用USB的外围设备之间的连续的数据传送。
USB系统由主计算机,一个或多个USB设备,物理总线组成。
主机又分两层:较高的包含USB设备驱动程序的软件层和主机控制器硬件层(适配层),主机的主要责任就是控制对USB设备的双向数据传输。
USB设备是使用电子和数据格式规则与主机进行通信的外围设备。
物理总线是一组USB电缆用来将控制器和外围设备连接起来。

USB的4种传输类型:
1.控制传输:控制传输是双向传输,被USB系统软件用来主要进行查询、配置和给USB设备发送通用的命令。控制传输方式可以包含8、16、32或64字节的数据,这依赖于设备和传输速度。控制传输典型地用于主计算机和USB设备的端点0之间的传输,但是指定供应商的控制传输可以使用其他端点。
2.同步传输:提供了确定的贷款和间隔时间。被用于时间严格并具有容错性的流数据传输,或用于要求恒定的数据传输率的即时应用中。对于同步传输来说,即时的数据传递比完美的精度和数据的完整性更重要。
3.中断驱动传输:主要用于定时查询设备是否有中断数据需要传送。设备的端点末时期的结构决定了它的查询频率,频率值可以从1到255毫秒。这种传输类型典型地用于少量分散的、不可预测的数据的传输。如键盘、操作杆、鼠标。
4.批量传输:适用于需要大批量的传送和接收数据的设备,同时在没有带宽和间隔时间要求的情况下,要求保证传输。如打印机、扫描仪。

USB主控制器(适配器):是包含在主计算机中的硬件层。主控制器用于将主计算机和USB之间的数据格式进行转换。只有实现使用USB的基于Windows CE的产品的OEM们需要编写针对USB主控制器的驱动程序。
USB设备:USB外围设备由一个或多个实现设备功能的物理元器件组成。这些元器件成为界面。每个界面统称提供一些有用的功能组,但是具体到组成界面的构成是一些实现细节。与每个界面相关的是一组端点。端点是通过总线所传递的数据的主要产生者和使用者。所有的USB设备都有一个成为端点0的特殊端点,改端点支持通用的USB状态和配置协议。
USB设备驱动程序建立了通往各种USB设备端点的逻辑的通讯通道,称为管道。管道将USB设备驱动程序和端点通过软件联系起来。
USB设备上的总线界面硬件负责传送和接收USB结构的数据。与物理USB设备对应的逻辑USB设备由USB的抽象实体组成,如设备端点和它们的相应管道。

USB系统软件由两层组成:较高的USB设备驱动程序层和较低的由Windows CE实现的USB函数层。
USB设备驱动程序是用USB函数来建立于它们所控制设备的连接并对这些设备进行配置和通信。

较低的USB函数层执行一些内部关联的任务:
管理所有的USB设备驱动程序和主机的内奸USB根计程器之间的通信。
在适当的时间加载和卸载USB设备驱动程序。
进行从数据到USB协议框架和打包格式的双向转换。
通过建立与所有USB设备上的通用端点的通信,执行一班的配置和与状态相关的任务。

较低的USB函数本身又由两部分组成:较高的通用串行总线驱动(USBD)模块和较低的主控制器驱动程序(HCD)模块。依据HCD模块提供的功能,USBD模块实现高层的USBD接口函数。USB设备驱动程序是用USBD接口函数与它们的外围设备进行通讯。

在数据传输过程中,操作流程统称按下列次序进行:
1.USB设备驱动程序进行数据传输的初始化,即通过是用USBD接口函数给USBD模块发送数据传输的请求。
2.基于有关总线的情况和与总线相连的USB设备的特性,USBD模块将该请求分成一些单独的事务。
3.HCD模块排好事务通过总线的次序。
4.主控制器硬件执行或完成这些事务。
所有的总线上的事务都是从主机一侧发出的,外围设备完全是依赖性的。

编写USB驱动程序的几种方式:
1.是用流接口函数:USBD可以呈现流接口函数。应用程序可以将外围设备作为文件并是用标准文件输入输出函数来与设备进行交互。然而,因为USBD得加载和卸载没有包括设备管理器,所以任何呈现流接口函数的USBD必须通过使用RegisterDevice和DeregisterDevice函数来手工的注册和退出注册它的特殊设备文件名。这些函数应该分别在USBD被加载和卸载时调用。
2.使用现有的Windows CE应用程序编程接口(API):如果Windows CE有适合于外围设备的现成的API,通过与Windows CE API的交互,USB设备驱动程序可以间接地给应用程序呈现一定的外围设备类型。比如,用于大数据量存储设备的USBD,如硬盘驱动和光驱,可以通过标准的可安装文件系统接口来呈现这些设备。样本USB鼠标驱动程序也使用这种方法。驱动程序不直接将鼠标设备呈现给应用程序,而是通过与现有的Windows CE API进行交互从而给系统提交正确的输入事件。因此,鼠标设备的USB性质对应用程序是透明的。
3.创建指定到特定USBD的用户定制的API:这种方法在USBD呈现设备时不需要任何限制。它允许你按照应用程序最期望的形式来创建设备的API。但是你必须给应用程序编写者提供完善的文档使他们可以使用该驱动程序。

USB设备驱动程序所要求的入口点:所有的USB设备驱动程序必须在它们的DLL库中呈现一定的入口点从而与USBD模块进行适当的交互。

USB设备驱动程序的注册键:注册键控制如何加载USB设备驱动程序。当附加USB设备时,基于设备的配置和接口描述器的信息,USBD模块加载合适的USBD来控制该设备。USBD模块通过是用一组跟踪驱动横须贺设备的注册键来定位正确的驱动程序。这些注册键被作为HKE_LOCAL_MACHINE/Drivers/USB/LoadClients/键的子键保存起来。
下面几种情况的实例可以导致加载特定的USB设备驱动程序:
匹配连在总线上的每个设备。
匹配指定供应商的标识。
控制特定设备类的设备。
控制设备上的各个接口。
每个驱动程序的子键具有Group1_ID/Group2_ID/Group3_ID/DriverName的格式。如果保留的组标识子键名字与USB设备匹配,就可以将每个组标识子键命名为Default来表示应该加载的USBD模块。否则,组标识子键的名字有供应商、设备类和协议信息通过下划线连接而成。该县西来自USB设备描述器。

USB设备驱动程序加载过程:
1. USBD模块搜索名字为Default/Default/Default的子键。如果存在,模块加载在子键Default/Default/Default/DriverName/DLL下列出的驱动程序。针对所有连接到系统中的USB设备都可以加载以这种方式注册的驱动程序。
2. USBD模块搜索指定供应商的驱动程序。可以通过搜索最通用的匹配设备描述信息的Group1_ID子键来识别指定供应商的驱动程序。匹配包含最简单允许格式的Croup1_ID并且Croup2_ID和Group3_ID为Default的子键是最通用的子键。如果找到了匹配子键,模块加载在子键的DriverName/DLL子键下列出的驱动程序。
3. USB模块搜索指定设备类的驱动程序。可以通过搜索最通用的Group2_ID子键来识别指定类的驱动程序。如果找到了匹配子键,模块加载在子键的DriverName/DLL子键下列出的驱动程序。
从步骤1到步骤3的搜索不可能覆盖对所有控制设备的USBD的匹配;也就是说,设备可能有多个借口,但是经过步骤1到步骤3的驱动程序不可能匹配设备所有的接口。如果这样,USBD通过搜索最通用的Group3_ID子键来搜索与设备现有的每个接口匹配的驱动程序。如果找到了匹配子键,模块加载在子键的DriverName/DLL子键下列出的驱动程序。
最后,如果没有定位到合适的USBD,USBD模块提示用户输入包含正确的驱动程序DLL的名字。然后USBD模块加载该驱动程序并调用驱动程序的USBInstallDriver函数。
USBInstallDriver应该通过调用RegisterClientSetings函数来为去顶程序创建适当的子键,这样,当下次附件USB设备时,USBD模块不需要用户的输入也能定位正确的驱动程序。
由高到低的优先级排列次序如下:
1. Group1_ID/Default/Default
2. Group1_ID/Group2_ID/Default
3. Default/Group2_ID/Default
4. Group1_ID/Group2_ID/Group3_ID
5. Group1_ID/Default/Group3_ID
6. Default/Group2_ID/Group3_ID
7. Default/default/Group3_ID

USB可以分成主和从的接口,例如电脑上的USB就是主接口,主接口要供电的。而普通的U盘就是从USB接口,不供电。
而wince是即支持主USB接口 也支持从USB接口,因为wince系统即可以被当作普通电脑利用主USB访问U盘等外接设备,也可以当作外接设备被普通电脑访问。
这个取决于硬件。

USB Host Controller Drivers 就是主USB接口的驱动。
如 msdn 所示:
Windows Embedded CE supports universal serial bus (USB) 2.0. This section provides links to topics that explain USB host controller drivers, the provided sample drivers, the required registry settings, and a programming reference.

Windows Embedded CE supports multiple host controllers. A host controller is a hardware component that is contained in a host computer. The host controller driver converts data between the format that is used by the host computer and the format used by the USB host controller. You must write a USB host controller driver only if you are building a hardware platform with host controller hardware that does not conform to one of the host controller specifications: universal host controller interface (UHCI), open host controller interface (OHCI), or enhanced host controller interface (EHCI).

OHCI or UHCI drivers must link with Hcdlib.lib. This library implements common functionality for OHCI and UHCI. In Windows CE .NET 4.1 and earlier, a platform that built its own OHCI or UHCI linked with Ohcdmdd2.lib or Uhcdmdd.lib. With Windows CE .NET 4.2 and later, they must also link with Hcdlib.lib. Hcdlib.lib implements functionality that is common between OHCI and UHCI.

而USB Function Controller Driver 
是指USB功能控制的一个驱动,可以利用此功能,完成自己基于USB的产品驱动开发。
如msdn所示:
Beginning with Windows CE 5.0, universal serial bus (USB) function controller drivers are no longer monolithic. A monolithic driver combines all platform dependent drivers (PDDs) and model device drivers (MDDs) into one driver. 

USB function controller drivers are layered drivers. They contain an MDD and a PDD. This eases portability across hardware platforms. The client drivers are abstracted as separate clients that are loaded by the USB function driver. For more information about MDDs, PDDs, and monolithic drivers, see Layered Drivers vs. Monolithic Drivers.

 

你可能感兴趣的:(Windows CE之USB驱动基本概念)