- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华北电力大学硕士学位论文
4.2.3USB设备程序编程接口 (USBDI)
USB设备驱动程序在和其硬件设备进行通信时,一般需要使用USB总线驱动
程序接口(USBDI)oUSBDI是Window:操作系统提供的,它实现了USB数据传
输的底层协议。USB设备驱动程序可以直接使用该接口与物理设备进行通信,而不
考虑诸如总线如何列举、数据如何传输等细节问题[261
USBDI是WDM分层结构的一部分,它通过使用IRP(U0请求包)管理USB
设备驱动程序栈之间的通信。这些 IRP具有相 同的主要功能代码
IRPeeMJINTERNAL一DEVICE_CONTROL,且其下一个I/0栈单元的IoControlCode
代码必须被设置成为USBDI的内部IOCTL,以指明该IRP的功能。见图4-5所示
USBDI在WDM的分层结构[271
USB设备驱动程序
I USBHUB.SYS ‘一
USB主机驱动程序栈
图4一5
4.2.4US日2.0数据采集系统驱动程序具体实现
基于EZ-USBFX2的二次枚举的特性,我们在编制驱动程序时需编制两个:一
个驱动程序loader.sys将在主机上编写好的固件程序在主机系统启动时下载至FX2
的RAM中;另一个驱动程序USBBULK.SYS为实际安装的驱动程序。另外,为实
现在系统启动时,自动安装两次驱动程序,还需编写特殊的 INF文件实现。
CYPRESS公司提供的对EZ-USBFX2的开发包中,包含有驱动程序例程,从而简
化了编写驱动的过程,我们可以在其提供例程的基础上按照需要进行修改。
I、loader.sys
首先我们需要将用KeilC编写好的固件程序编译连接成为Intel十六进制文件
43
华北电力大学硕士学位论文
通过CYPRESS公司提供的工具软件HEX2C转化成C语言格式文件,在与CYPRESS
公司提供的完成下载固件的ezloader,。一起编译,即可得到所需的下载固件的驱动
程序loader.syso
2,usbbulk.sys
usbbulk.sys是实际使用的驱动程序,其功能主要是实现高速USB的块传输功
能。在头文件usbdriver.h中,我们添加了块传输的结构和工OCTL代码的定义,其
中,BULKTRANSFERCONTROL用于控制块传输,IOCTLEZUSBBULKREAD
用于主机读取USB设备发出的块数据。其结构定义如下:
typedefstruct一ULK一TRANSFER-CONTROL
{
ULONGpipcNum;
}BULK-TRANSFER-CONTROL,*PBULK-TRANSFE凡CONTROL;
//以上为控制块传输结构定义
#defineIOCTL EZUSB BULK READ
CTL_CODE(FILE~DEVICE_UNKNOWN,\
EzusbJOCTL一INDEX+19,\
METHOD-OUT-DIRECT,\
FILE_ANY一CCESS)
//以上为块传输读结构定义
在usbbulk.sys的分发例程中,对IOCTL代码IOCTLEZUSB_BULKREAD进
行处理 ,它处理 的例程为 Bulk一eadesWrite,该程序首先调用
USB_ENDPOINT_DIRECTIONIN宏判断块传输的方向是NI还是OUT,然后调用
DDK函数UsbBuildInteurpptOrBu
文档评论(0)