函数基于流接口驱动模型设计USB设备的驱动程序

usb接口驱动  时间:2021-03-14  阅读:()

2007年6月 南昌航空大学学报(自然科学版) Jun ,2007第21卷 第2期 Journal of Nanchang Hangkong University(Natural Science) Vol 21 No 2

基于流接口驱动模型设计USB设备的驱动程序

赵洪杰,刘琳岚

(南昌航空大学,江西南昌 330063)

[关键词] 流接口驱动模型;WinCE1Net;USB设备驱动;

[摘要]本文介绍了嵌入式操作系统WinCE1Net的USB总线驱动框架,以网眼摄像头驱动程序的设计为例,详细介绍了基于流接口

驱动模型设计USB设备驱动程序的过程。测试表明,该设计方案是可行的。

[中图分类号] TP319 [文献标识码] A [文章编号]1001 -4926(2007)02-0095- 06

Design ofthe client driver ofUSB device based on stream interfacedriver model in the WinCE. Net

ZHAO Hong- jie ,L IU Lin- lan

(Nanchang Hangkong University, Nanchang 330063, China)

Key words :stream interface drive model ;WinCE Net ; the driver of USB device

Abstract :Thispaper analyses the framework ofUSB system software and stream interface driver model based on embedded system WinCENet , and specially introducesthe development of USB Camera driverwith stream interface driver model

嵌入式操作系统Win CE1 Net凭借其实时性强、内存占用少、内核稳定可靠以及结构设计合理、先进等优点在嵌入式领域得到广泛应用。USB摄像头以其良好的性价比、方便易用的特点而广泛应用于视频聊天、远程监控、视频会议等诸多领域。但是由于嵌入式硬件环境多样性以及Win CE1 Net对USB设备驱动开发只提供了一些底层支持的原因,摄像头厂商尚未提供W in CE1 Net下USB摄像头的驱动。因此开发出W in CE1 Net下USB摄像头驱动具有实际的意义和价值。本文正是针对这一情况,对Win CE1 Net下USB设备驱动开发进行研究,并设计出基于流接口驱动模型的USB摄像头驱动程序。

1 WinCE1Net下USB总线驱动框架

在Win CE1 Net平台下,USB系统分为两层[ 12] :较高的USB设备驱动程序和较低的由W in CE1 Net实现的USB函数层。较低的USB函数层又由两部分组成:通用串行总线驱动程序(USBD)模块和较低的主控制器驱动程序(HCD)模块。W in CE1 Net下USB总线驱动框架参见图1[3]所示。

HCD模块向下与USB主控制器通信,向上提供功能函数供USBD模块调用;而USBD模块通过直接调用HCD提供的函数接口,实现更高层的USBD接口函数;USB设备驱动程序则是通过USBD接口函数间接实现与USB外围设备通信;而上层应用程序借助Win CE1 Net系统提供的文件系统A PI函数实现与USB设备驱动程序联系。

2 WinCE1Net下流接口驱动模型

基于Win CE1 Net平台的两种专用的驱动模型为:本机设备驱动程序和流接口驱动程序。本机设备驱动

[收稿日期] 2007- 02- 01

[基金项目] 航空科学基金(2006ZD56005) ;江西省科技攻关重点项目(CB200606130)

[作者简介] 赵洪杰(1980- ),男,河南郑州人,在校研究生。

口驱动程序的加载、卸载等管理工作;流接口驱动程序通过调用USBD模块提供的接口函数实现与底层USB设备通信。

3 WinCE1Net下USB摄像头驱动程序实现过程

在Win CE1 Net下编写USB设备流接口驱动需要实现以下两个模块:⑴实现三个入口点函数,即实现函数US BInst a llDrive r() 、US BUn installDriver()和US BD ev iceAttach() ;⑵实现流接口函数。实现上述三个入口点函数主要有以下两方面作用:首先是使客户端驱动程序能够与CE系统的USBD模块联系;其次进行必要的注册表设置。而流接口函数用来实现对具体外围设备的控制,在具体应用中有差异但形式上是统一的。

开发WinCE1Net下USB设备流接口驱动,可采用Embedded Visual C++(EVC) ,也可以使用PlatformBu ild e r(PB) 。前者侧重应用程序开发,而后者则是侧重内核定制。下面以开发USB摄像头驱动程序为例,从驱动程序入口点函数设计、流接口函数设计两个方面具体说明驱动开发实现过程。实验硬件平台是:研华PCM- 7230,处理器为Intel PXA- 255,USB摄像头型号为网眼V2000,开发工具采用EVC。

311 驱动程序入口点函数设计

USBIns tallDriv er () 、USBUninstallDriver()和USBDev ic eAttach()是USB设备驱动程序必须实现的入口函数。

第2期 赵洪杰、刘琳岚:基于流接口驱动模型设计USB设备的驱动程序 97以下是三个函数各自功能。

USBIns tallDriv er() :系统加载驱动时,被系统调用。主要向注册表写入摄像头驱动注册信息,实现驱动程序注册。需要特别提到的是,注册所使用的不是标准的注册表函数,而是使用Reg isterClientDriv erID() ,Re g is2t e rClie n t Se tt ings ()来注册相应的驱动ID和驱动配置信息,其中包括:驱动名、设备文件名、设备文件名前缀等。

U S BUn ins t a llDrive r() :当U S B设备脱离主机时,被系统调用。主要用于删除注册表中设备的相关信息。所使用的函数是UnReg is terClient S ett in gs () ,UnRe g ist erClientDriverID()从注册表中删除该驱动创建的注册信息。

USBDev iceAtt ach() :系统加载驱动时,被系统调用。主要用于获取的设备信息,配置设备,并申请所需资源等。

当USB设备插入主机时,W inCE1 Net系统加载入口点函数的具体过程如图3;USB设备脱离主机时,系统调用US BUn insta llDriv e r() ,释放相关资源。

下面重点介绍了函数US BInst a llDrive r()的处理流程。它主要实现了摄像头驱动名称等一些信息的注册,其流程图如图4 。该函数部分核心代码如

下:

BOOL USBInstallDriver(LPW STR s zDriverLibFile)

{ //初始化一些变量

WCHARwsUsbDeviceID[ ] = CLASS NAME- SZ;

WCHARwsSubClassRegKey[ ] =CLIENT REGKEY SZ;

USB DRIVER SETTINGS usbDriverSettings = {DRIVER SETTINGS } ;

BOOL bRc= FALSE;

//加载usb d 1dll到进程空间

HINSTANCE hInst =LoadLibrary(L” usbd1dll” ) ;

//获取Re g isterClientDriv erID()和Re g is terClient S ettin gs ()的内存地址,并将其赋值给相应函数指针LPREGIST ER-CLIENT-DRIVER-ID p Reg is terId=(LPREGISTER-CLIENT-DRIVER-ID)

GetProcAddres s (h Ins t ,g cs zReg is terClientDriv erId) ;

LPREGIST ER-CLIENT-SETTINGp RegisterSettings=(LPREGISTER-CLIENT-SETTINGS)

GetProcAddres s (hIns t ,g cs zReg is terClient S ettings) ;

//注册驱动名称,bRc = (3 pRegis terId) (gcs zCameraDriverId) ;

//注册摄像头驱动设备信息bRc = (3 pRegisterSettings) (szDriverLibFile ,gcs zCameraDriverId,NULL,&usb Driv erSettings) ;

//注册额外的一些驱动信息

第2期 赵洪杰、刘琳岚:基于流接口驱动模型设计USB设备的驱动程序 99

bRc = GetSet KeyValues (ws SubClass RegKey,usbCamKeyValues ,SET, TRUE) ;

}

312 驱动程序流接口函数设计

流接口函数是一组标准接口函数,用于完成标准的文件I/O操作和电源管理[4] 。它通过文件系统API和应用程序交互,同时调用USBD模块中的函数实现与设备通信。

流接口函数的实现形式为:XXX Init 、XXX Deinit 、XXX Open 、XXX Close 、XXX Write/XXX Read、XXXIOControl 、XXXSeek 、XXXPowerUp 、XXXPowerDown 。其中,前五个是必不可少的,根据设备具体功能可以有选择使用其它函数。XXX是设备驱动的设备文件名前缀。设备文件名前缀、驱动名以及其它一些信息都是在驱动注册时写入注册表。

以下是本实验使用到的部分函数,设备文件名前缀为CAM。

CAM Init :由设备管理器调用,用于驱动初始化;

CAM Deinit :由设备管理器调用,用于驱动卸载;

CAM Op en:应用层中通过Cre ateFile函数调用,用于打开设备;

CAM Close:应用层中通过CloseHandle函数调用,关闭设备;

CAM Read:应用层中通过ReadFile函数调用,读取设备的数据;

当USB摄像头插入主机时,系统通过调用入口点函数,完成驱动初始化工作。而后,应用程序首先通过执行CreateFile()函数,调用CAM Open()来打开设备;然后通过执行函数ReadFile()来调用CAM Read() 。在函数CAM Read()中,通过USBD模块提供的等时传输函数来实现对摄像头数据的读取。以下是CAMRead函数部分重要代码:

CAM Read(PUSBCAM CONTEXT pUsbCam,//设备句柄,系统填充

PUCHA Rp Bu ffer , //接受数据的缓冲区,应用层传递

DWORD BufferLength //数据缓冲区长度

)

{if (ACCEPT IO(pUsbCam ) ) {try {

//在MyIssueIsochTransfer中调用USBD提供等时函数pUsbFuncs - >lp IssueIsochTrans fer,从摄

像头中读取数据dw=MyIssueIsochTransfer (pUs b Cam- >Us bFuncs ,pUsb Cam- >Is o chIn1hPip e ,

De faultTrans ferComp lete,pUs b Cam- >Is ochIn1hEvent ,

USB-NO-WAIT|USB-IN-TRANSFER|

USB-SHORT-TRANSFER-OK|USB-START-ISOCH-ASAP 0, nNum2

Frames , dwFrameLen,ptr, NULL, &dwBytes ,

1500, dwUsbRc) ;

}e xc ept (EXCEPTION-EXECUTE-HANDLER)

{

}

}

将原始数据读出后,需要在应用层对其进行解码等一些处理后,才可用于显示。由于所用的USB Camera采用的是OV511+控制芯片,在对原始数据处理的过程中需要参考OV511+的Datasheet 。数据的处理和显示过程大致如下:首先,从读取的原始数据包中解析出所需的原始图像数据;其次,将得到的原始图像数据格式(YUV420)转换为RGB格式,其转换步骤为:⑴获取原始图像数据YUV420;⑵将其转换为标准YUV420格式;⑶将标准YUV420格式转换为RGB格式;⑷将RGB数据显示出来。

4 结束语

Win CE1 Net下流驱动模型是一种标准统一但使用灵活的驱动模型,它是USB设备驱动开发的首选。在深入理解Win CE1 Net下USB系统构架,熟悉流接口驱动机制的基础上,可以大大减少USB设备驱动开发时间,从而加快Win CE1 Net下USB设备驱动的开发。

[ 参 考 文 献 ]

[1 ] 傅曦,陈黎等1 Windows CE嵌入式开发入门-基于Xscal构架[M]1北京:人民邮电出版社,200616

[2] (美)微软公司1 Microsoft Windows CE Device Driver Kit1设备驱动程序开发指南[M]1希望图书创作室译1北京:北京希望电子出版社,1999

[3] 那洪洋,李扬,杨文通1 WinCE1Net下USB总线驱动程序的研究[J] ,微计算机应用,200613

[4] 周毓林,宁杨,陆贵强,付林林1 Windows CE1Net内核定制及应用开发[M]1北京:电子工业出版社,200512

(上接第79页)

[4]KwonS J ,GooB C1 A study on the friction and wear characteristics ofbrake pads for Al MMCbrake disc[J ]1 Key Eng Mat , 2000, 183(1) : 1225 -12291

[5]郭继伟,金云学,吕奎龙,等1 TiC颗粒增强铝基复合材料的制备及其微观组织[J]1中国有色金属学报,2003, 13 (2) : 193- 1971GUO Ji -wei ,J IN Yun- xue ,LU Kui - long , et al1 Fabrication and microstructureof Al - based composite reinforced by TiC particles[J]1 The Chinese Journalof Nonferrous Metals,2003, 13 (2) :193 - 1971

[6]尧军平,王薇薇,马新生等1压渗法制备陶瓷网络复合材料研究[J]1机械工程学报,2003 , 39 (1) :46- 501 YAO Jun- ping,WANG Wei -wei ,MAXin- sheng, etal1 The study on ceramics network composites fabricated by die castingmethod[J]1 Chinese Journal of Mechanical Engineering ,

2003 ,39 (1) : 46- 501

[7] 尧军平,王薇薇,杨滨1三维网络陶瓷增强铝基复合材料的干摩擦磨损性能[J]1中国有色金属学报,2004,14(5) :766-7711

爱用云互联租用服务器租美国、日本、美国、日本、购买2天内不满意可以退换,IP可免费更换!

爱用云互联怎么样?爱用云是一家成立于2018年的老牌商家旗下的服务器销售品牌,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端...

HostKvm香港VPS七折:$5.95/月KVM-2GB内存/40GB硬盘/500GB月流量

HostKvm是一家成立于2013年的国外主机服务商,主要提供VPS主机,基于KVM架构,可选数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。商家本月针对香港国际机房提供特别7折优惠码,其他机房全场8折,优惠后2G内存香港VPS每月5.95美元起,支持使用PayPal或者支付宝付款。下面以香港国际(HKGlobal)为...

ZoeCloud:香港BGP云服务器,1GB内存/20GB SSD空间/2TB流量/500Mbps/KVM,32元/月

zoecloud怎么样?zoecloud是一家国人商家,5月成立,暂时主要提供香港BGP KVM VPS,线路为AS41378,并有首发永久8折优惠:HKBGP20OFF。目前,解锁香港区 Netflix、Youtube Premium ,但不保证一直解锁,谢绝以不是原生 IP 理由退款。不保证中国大陆连接速度,建议移动中转使用,配合广州移动食用效果更佳。点击进入:zoecloud官方网站地址zo...

usb接口驱动为你推荐
硬盘的工作原理硬盘的工作原理是?(不要给我网址,我用的手机)百度关键词价格查询百度关键词排名价格是多少冯媛甑夏如芝是康熙来了的第几期?haole018.comhttp://www.haoledy.com/view/32092.html 轩辕剑天之痕11、12集在线观看郭泊雄郭佰雄最后一次出现是什么时候?www.299pp.com免费PP电影哪个网站可以看啊103838.com39052.com这电影网支持网页观看吗?抓站工具抓鸡要什么工具?广告法广告法有什么字不能用dpscycle寻求LR 高输出宏
.net虚拟主机 网站虚拟主机空间 美国服务器租用 中文域名交易中心 新加坡主机 博客主机 68.168.16.150 360抢票助手 湖南服务器托管 七夕促销 双11秒杀 河南移动m值兑换 国外ip加速器 电信托管 吉林铁通 网购分享 太原联通测速 linode支付宝 php服务器 贵阳电信 更多