如何编写Windows CE.net的usb驱动程序(1)
随着USB设备的普及,摆在开发人员面前的驱动开发任务也是越来越繁重了,特别是对于一些嵌入式开发厂商来讲,由于设备所采用的操作系统不同,相应的硬件接口也是不一样的,开发相关的USB驱动程序更是难上加难。WindowsCE.NET是微软推出的功能强大的嵌入式操作系统,国内采用此操作系统的厂商已经很多了,本文就以windowsce.net为例,简单介绍一下如何开发windowsce.net下的USB驱动程序。
首先要熟悉一些USB的基本概念,当然最好把USB1.1的协议看一遍,(当然现在2。0的协议都已经有了)http://www.usb.org
上可以下载,我记得好像有个中文版的,翻译的还可以,http://www.driverdevolep.com
上有的,具体位置记不太清楚了,中文版的协议可以快速翻一边,了解一些基本的概念,但是设计到一些关键性的东西最好还是看英文版的心里比较清楚些。
这里我就不介绍USB的基本协议了,假设用户已经熟悉了USB设备的一些基本的概念,并且对WinowsCE.NET的开发有一定的了解。
下面简略介绍一下WindowsCE.NET中USB设备驱动开发的一些基础知识。
WindowsCE.NET的USB系统软件分为两层:USBClient设备驱动程序和底层的WindowsCE实现的函数层。USB设备驱动程序主要负责利用系统提供的底层接口配置设备,和设备进行通讯。底层的函数提本身又由两部分组成,通用串行总线驱动程序(USBD)模块和较低的主控制器驱动程序(HCD)模块。HCD负责最最底层的处理,USBD模块实现较高的USBD函数接口。USB设备驱动主要利用USBD接口函数和他们的外围设备打交道。
USB设备驱动程序主要和USBD打交道,所以我们必须详细的了解USBD提供的函数。
主要的传输函数有:
AbourtTransferIssueControlTransfer
CloseTransferIssueInterrupTransfer
GetIsochResultIssueIsochTransfer
GetTransferStatusIstransferComplete
IssueBulkTransferIssueVendorTransfer
主要的用于打开和关闭USBD和USB设备之间的通信通道的函数有:
AbortPipeTransfersClosePipe
IsDefaultPipeHaltedIsPipeHalted
OpenPipeResetDefaultPipe
ResetPipe
相应的打包函数接口有:
GetFrameLengthGetFrameNumberReleaseFrameLengthControl
SetFrameLengthTakeFrameLengthControl
取得设置设备配置函数:
ClearFeatureSetDescriptor
GetDescriptorSetFeature
GetInterfaceSetInterface
GetStatusSyncFrame
与USB进行交互的实现方法相关的多任务函数:
FindInterfaceRegisterClientDeviceId
GetDeviceInfoRegisterClientSettings
GetUSBDVersionRegisterNotificationRoutine
LoadGenericInterfaceDriverTranslateStringDescr
OpenClientRegisterKeyUnRegisterNotificationRoutine
常见的WindowsCE.NET下USB的设备驱动程序的编写有以下几种方法:
●流式接口函数
这种驱动程序主要呈现流式函数接口,主要输出XXX_Init,XXX_Deinit,XXX_Open,XXX_Close,XXX_Open,XXX_Close,XXX_Read,XXX_Write,
XXX_Seek,XXX_IOControl,XXX_PowerUp,XXX_PowerDown等流式接口,注意上述的几个接口一定都要输出,另外XXX必须为三个字符,否则会出错。但是此类的驱动程序不是通过设备管理接口来加载的,所以必须手工的调用RegisterDevice()和DeregisterDevice()函数来加载和卸载驱动程序。用户可以将此类的设备作为标准的文件来操作,只要调用相应的文件操作就可以和驱动程序打交道。
●使用现有的WindowCE.NET的应用程序接口
此类设备主要是利用WindowsCE.NET中已经有了现成的函数接口,例如USBMassStorageDisk,它主要利用现有的WindowsCE.Net中已经有的可安装文件系统接口,呈现给系统可用的文件系统,对于用户来讲,它是透明的,用户仅仅感觉在操作一个文件夹。
●创建指定到特定的USBD的用户指定的API
这种方法在USBD呈现设备时不需要任何限制,主要是特制的提供API给用户,一般不太常见。
USB设备驱动程序必须输出的函数有:
●USBDeviecAttach
当USB设备连接到计算机上时,USBD模块就会调用此函数,这个函数主要用于初始化USB设备,取得USB设备信息,配置USB设备,并且申请必需的资源。
●USBInstallDriver
主要用于创建一个驱动程序加载所需的注册表信息,例如读写超时,设备名称等。
●USBUninstallDriver
主要用于释放驱动程序所占用的资源,以及删除USBInstallDriver函数创建的注册表等。
上述的三个函数接口是所有的USB驱动程序必须提供的,缺一不可。
另外比较重要的是USB设备驱动程序的注册表配置,一般的USB设备驱动程序的注册表配置在HKEY_LOCAL_MACHINEDriversUSBLoadClients下,每个驱动程序的子
usb 驱动程序 CE net Windows 编写 如何 相关文章:
- Linux系统下USB摄像头驱动程序开发(04-25)
- 基于uClinux嵌入式系统的汽车黑匣子的设计(07-08)
- 基于WinCE操作系统的通用USB数控键盘设计(08-05)
- 基于WinCE的ARM视频监控系统(11-14)
- 基于LabVIEW的USB实时数据采集处理系统的实现(03-26)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)