30分钟开发USB设备.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
30分钟开发USB设备

30分钟开发USB设备 洪岳炜 深圳大学 简介: 本实验将用到支持USB1.1协议的PDIUSBD12、WINDDK、DRIVERSTUDIO2.7、VC6.0以及ARM7开发板,请自备。 善意提示:(最好先看下D12的技术文档和驱动开发的一些基本知识以及VC的操作) 一、驱动编程介绍 本实验用DRIVERSTUDIO2.7,它相对于DDK就像VC相对于SDK,容易上手,使用简便,它将繁琐的DDK API进行封装,做成像VC一样的一个个类,具体各个类的说明请参考武安国的《WINDOWS 2000/XP WDM设备驱动程序开发》。下面介绍本实验USB批量传输驱动的制作过程。 第一步:先装上WINXP DDK ,再安装VC6.0,最后安装DS2.7。 第二步:用VC打开VdwLibs.dsw(位于DRIVERWORKS目录下的SOURCE文件夹),设置好VC的DDK编译环境,然后选Batch Build,选择NdisWDM-WIN32 NDIS WDM CHECK、 NdisWDM-WIN32 NDIS WDM FREE、VDWLIBS-WIN32 WDM CHECK、VDWLIBS-WIN32 WDM FREE,然后BUILD,将DDK的API编译成两个库 第三步:点击DRIVER WIZARD按提示成生一个驱动*.sys和*.inf.过程如下: 第四步,编译驱动程序,生成*.sys,大功告成,然后简单修改下自动生成的INF文件。 一下是修改好的东西: Signature=$Windows NT$“ Class=USB ClassGUID=(这里用驱动程序生成的GUID覆盖) 这样一个驱动程序很简单就做好了? !这里的驱动程序没有添加和修改任何代码,并不表示不用,如果用到厂商请求或其他自定义功能的话,还要自己添加。 !INF内容我现在还不太熟,这里的修改是我自己摸索的,其他的修改还要再斟酌。 二、VC应用程序介绍 第一步:新建一个VC工程,然后将驱动程序根目录下的*DeviceInterface.h, *DRVioctl.h,COPY到新建工程的目录,并在主程序中将两个头文件包含进来。 第二步:打开驱动程序根目录下EXE文件夹里面的OpenByIntf.cpp,将里面HANDLE OpenByInterface(..)函数复制到主程序,并将必要的头文件也在主程序中加以包含。 第三步:在PROJECT-SETTING-LINK的OBJECT/LIBRARY MODULES 里面加入setupapi.lib ,一切OK,开始写应用程序。 主要用到的函数:(1)OpenByInterface(2) WriteFile (3) ReadFile 过程很简单,就像读写文件一样。 !如果有定义厂商请求还要用到DEVICEIOCONTROL语句,以后需要我再弄。 三、D12的单片机驱动程序 枚举程序部分不改动,对于同个D12芯片,枚举程序基本一样。以下简单说说改的部分。 本实验没用到外部中断检测事件,而是使用主程序的一个死循环,不断的检测中断状态寄存器,检测到对应的状态执行对应的操作。本实验主要用到端点2的收发事件,所以改的部分就改收发事件的处理程序就行。 代码简单如下: void D12Ep4IntProc()//接收 { D12RdLastTrStat(4); //清中断 size = D12RdEp(4,GobalBuf,Ep2PacketSize); } void D12Ep5IntProc()//发送 { D12RdLastTrStat(5); //清中断 D12WrEp(5,GobalBuf,size); D12Cmd = 0xf2;//清缓冲区 } GobalBuf是一个全局缓冲区,size是收到的字节数 !端点2是双缓冲区的,但是这里只用一个缓冲区, !端点2一次只能发送或接收64个字节,端点1只有16个字节,详细看D12技术文档。 四、实验结果 至此,搞定批量传输。下面还有很大改进余地,可以将单片机端的检测弄成中断形式,可以将传输弄成DMA形式,可以加入一些厂商请求代码来控制开发板等。 以后有需要再说吧。 * * 选USB驱动,D12对应的VID是0471,PID0222 添加通信端点,本实验用到主端点2,1端点没用 自动生成的程序,默认即可 点击生成端点2的读和写代码 生成厂商请求控制,本实验没用到,以后会用到的,到时再弄 FINISH完成,相当简单就完成了驱动了 运行ARM开发板,接上USB装好驱动,打开软件,然后写入数据给ARM的GobalBuf全局缓冲区 然后读全局缓冲区,应该和输入数据一样 这是没接入硬件的界面提示

文档评论(0)

tmd2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档