基于单片机的USB转并口设备的驱动程序设计

时间:2024-03-07 点赞:53315 浏览:111022 作者原创标记本站原创

本文是一篇计算机论文范文,计算机有关在职研究生毕业论文,关于基于单片机的USB转并口设备的驱动程序设计相关电大毕业论文范文。适合计算机及操作系统及驱动程序方面的的大学硕士和本科毕业论文以及计算机相关开题报告范文和职称论文写作参考文献资料下载。

[摘 要]本文研究并设计了基于单片机的USB转并口设备,并利用该模块研究了USB设备驱动程序的设计方法.

[关 键 词]USBECPDriverStudio设备驱动程序

[中图分类号]TP[文献标识码]A[文章编号]1007-9416(2010)02-0029-02

1引言

由于现在大多数计算机没有并行口而具有多个USB接口,因此很多并行口设备无法和计算机直接连接使用.利用基于单片机STC11F32XE的USB转ECP模式并行口可以连接其他ECP模式并口设备,以达到让具有ECP接口的设备可以和没有并口的PC进行数据通信的目的.并口采用的是IEEE1284-A接口,USB接口驱动芯片采用Philips半导体公司的PDIUSBD12,该芯片的数据端口D0-D7接单片机的P0口,引脚WR_N、RD_N、及A0分别接单片机的P3.6、P3.7、P3.5引脚.整个硬件电路图如图1所示.当USB设备硬件设计完成之后,接着就必须根据硬件特点和需要完成的功能,设计出合乎产品的USB驱动程序,否则,设备将无法被PC机识别,不能正常使用.

2WDM型的USB驱动程序结构

USB设备的驱动程序是一种典型的WDM驱动程序.WDM驱动程序是分层的.对于USB设备驱动程序来说,其驱动程序包括两个层次:设备(功能)驱动程序层和总线(底层)驱动程序层.USB底层驱动程序由操作系统提供,不要开发者自己编写,它位于USB功能驱动程序的下面,负责与实际的USB硬件打交道,实现复杂而繁琐的底层通信,USB功能驱动程序必须要由开发者编写,它不与实际的USB硬件打交道,是把包含URB(USBRequestBlock,USB请求块)的IRP发送到USB底层驱动程序,来实现对USB设备信息的发送和接收.(图2)给出了USB驱动程序的结构模型.

3USB驱动开发编程环境的建立

开发一个WMD驱动程序,必须要搭建合适的开发环境以此来减小开发难度.对于WDM驱动的开发,一般必须使用的软件是VC++6.0和DDk(DriverDevelopmentKit,驱动程序开发工具包).但为了进一步降低开发难度,选择使用了第三方驱动开发工具--DriverStudio.它以类的方式对DDK进行封装,可以十分容易地利用它提供的向导来产生一个必需的驱动程序框架.

一般首先安装VC++6.0,接着安装DDK,如果需要的话,还可以安装WindowsSDK来辅助开发,最后安装DriverStudio3.2.因为DriverStudio的类库要使用DDK库函数,所以在安装好DriverStudio之后必须首先要编译出一个库文件,否则会提示找不到库文件vdw_wdm.lib等错误.编译该库文件的步骤如下:启动VC++6.0,找到并打开DriverStudio3.2安装目录下的vdwLibs.dsw工程文件,然后选择DriverStudio->DDKBuildSettings,在弹出的对话框中设置DDK的安装路径和运行的操作系统.然后选择菜单Build->BatchBuild,要根据驱动运行的平台来选择对应的工程文件,这里选择了x86对应的工程,正确选择之后,单击RebuildAll按钮,开始编译库文件.这个类库只需编译一次,以后开发其他的驱动就不必再次编译了.

4USB驱动创建方法及步骤

该驱动程序的主要功能包括:端点0采用控制传输,可以保证传输过程中的数据的完整性和正确性,主要负责USB枚举过程中的数据的读写.另外,又增加了端点1和端点2.端点1采用中断传输,这种传输主要用在数据量不大,但对时间要求较严格的设备中.因此,模块满足了实时性的特点,端点2采用批量传输,该种传输通常用在数据量大、对数据的实时性要求不高的场合中,利用该方式可以完成大量数据的快速传输,可以与高速的ECP并行口相匹配,因此,模块满足了高速数据传输的要求.

单击VC菜单栏下的DriverStudio菜单项,选择DriverWizard菜单,会出现一个驱动向导对话框.单击StartanewDriverProject将创建一个新的驱动工程.然后按照向导生成该驱动程序的框架.具体步骤如下:①设置工程名和路径.在弹出的对话框中,设置工程名为UsbToECP、路径为D:\.②选择驱动工程的类型.在对话框中选择WDMDriver,驱动框架选择DriverWorksC++Framework.③选择WDM驱动类型.在弹出的对话框中选择WDMFunctionDriver.④选择驱动总线的类型.在对话框中选择为USB总线,然后在分别设定USBVendorID和USBProductID.⑤设置USB的端点资源.单击Add增加端点.这里增加4个端点,PipeName分别是Ep1_In、Ep1_Out、Ep2_In和Ep2_Out.其中Ep1_In和Ep1_Out选择中断传输,端点地址均为1,传输方向分别为输入和输出,最大包长为8字节,最大传输大小为4096字节.Ep2_In和Ep2_Out选择批量传输,端点地址均为2,传输方向分别为输入和输出,最大包长为64字节,最大传输大小为40960字节.⑥选择需要处理请求类型.这里选择IRP_MJ_DEVICE_CONTROL、IRP_MJ_READ和IRP_MJ_WRITE.它们分别与API函数DeviceIoControl、ReadFile和WriteFile一一对应.⑦设备I/O操作方式.配置IRP_MJ_READ和IRP_MJ_WRITE的缓冲方式分别为Buffered.另外还需要增加4个IOControl的控制代码:EP1_READ、EP1_WRITE、EP2_READ、EP2_WRITE.打开方式选择Interface.⑧添加注册表项.可以根据自己需要增加,这里增加了一个设备名称.⑨设置电源管理.选择Devicerequiresaninrushofpoweratstartup,说明该设备启动时需要大电流,这样做的目的是防止相同的设备同时上电,减少对电源的冲击.步骤10-13按默认配置即可.

5驱动的编程

USB驱动程序的编程最主要的就是编写端点1和端点2的数据处理函数,其中主要编写的是UsbToECPDevice类成员函数Read()、Write()、及DeviceControl()中调用的4个IoControl()函数.

Read()函数对应着WIN32API的ReadFile函数,其参数通过KIrpI传递过来.因为端点1指定的缓冲方式为Buffered方式,所以调用KIrp类的成员函数I.BufferedReadDest()来获取保存数据的缓冲区地址,调用I.ReadSize()来获取读到的数据长度.如果获取到的缓冲区地址为NULL,则说明参数无效,则以USB_STATUS_INVALID_PARAMETER来完成该IRP,然后返回USB_STATUS_INVALID_PARAMETER.若读取的字节数是0,就直接完成该IRP,不需要进行数据处理.接着创建一个URB来完成数据的处理.因为端点1采用的是中断传输,所以必须创建一个中断传输的URB并提交它,端点管道KUsbPipe类提供一个创建中断传输URB的函数BuildInterruptTraner.这样底层的USB总线驱动程序就会负责从端点1读取数据,当完成数据的读取后,提交相应URB的函数就会返回.当URB创建成功后,利用KUsbPipe类的成员函数SubmitUrb()来提交这个URB,否则返回资源不足的错误信息.SubmitUrb()函数返回后,可以用URB的成员变量TranerBufferLength来获取实际读到的字节数,最后删除创建的URB.



本文为全文原貌未安装PDF浏览器用户请先下载安装原版全文Write()函数的处理方法与Read()函数的方法非常相似,不同之处在于利用KIrp类I的成员函数BufferedWriteSource()和WriteSize()来分别获取缓冲区的地址和传输的字节数.另外,函数EP1_READ_Handler()和EP1_WRITE_Handler()的实现与Read()和Write()函数基本是一样的,略有不同.

端点2的EP2_READ_Handler(KIrpI)和EP2_WRITE_Handler(KIrpI)与端点1的EP1_READ_Handler(KIrpI)和EP1_WRITE_Handler(KIrpI)处理方式几乎是一样的,主要的不同是在创建URB时要用到创建批量传输URB的函数BuildBulkTraner(),其参数及意义与BuildInterruptTraner()相同.

6驱动的安装

在对端点1和端点2编程完成之后,然后对其进行编译,如果没有错误,可以看到编译报告中有一行“MODULE等于.\objfre\i386\UsbToECP.sys”,这个就是所要的驱动文件,另外,在目录下还产生一个inf文件,其也是安装驱动时需要的一个重要的文件,它里面有一些重要的安装信息,可以根据需要进行修改.一般主要是对inf的Stings进行修改,表1给出了该驱动的Strings段的几个重要属性的修改.

将该设备与PC机连接,系统会提示安装驱动,首先指定驱动安装所要使用的inf文件所在的位置,该inf文件可以在驱动工程目录的driver目录下找到,是由向导自动生成的.然后选择安装驱动所需要的UsbToECP.sys文件,该文件在D:\UsbToECP\driver\objfre\i386下.正确安装驱动之后,打开计算机的设备管理器,将会看到该USB设备.如下图3所示.打开图3中的ClasorBinBinUsbdevices下的BinBinUsbDevice属性,选择相应标签,将会看到如下图4的驱动信息.

7结语

USB设备驱动的开发是设备开发过程中必不可少的一项任务.通过研究利用VC++、DDK和DriverStudio对USB驱动程序的设计方法,成功地设计了基于单片机的USB转并口设备的驱动程序.通过测试,使用该驱动的USB转并口设备运行稳定,达到了预期的效果.这种USB驱动的设计方法简化了开发难度,开发的驱动稳定可靠,必将受到USB设备开发者的广泛关注,同时也给其他的基于WDM驱动的开发提供一个新途径.

[参考文献]

[1]荣佳波,常明志,井科伟,杨少勇.USB设备的WDM驱动程序设计[J].应用科技,2004,31(3),39-41.

[2]武安河.Windows2000/XPWDM设备驱动程序开发(第2版)[M].电子工业出版社,2005.


本文为全文原貌未安装PDF浏览器用户请先下载安装原版全文

相关论文

串口设备联网的实现

该文是参考文献专业计算机论文范文,主要论述了计算机方面研究生毕业论文开题报告,与串口设备联网的实现相关论文范文素材,适合计算机及自。

医疗设备采购系统的设计与实现

本论文是一篇关于医疗类电子商务论文,关于医疗设备采购系统的设计与实现相关专升本毕业论文范文。免费优秀的关于医疗及医院及信息方面论文。

焊接工艺设备的作用与设计

本文是一篇焊接工艺论文范文,焊接工艺相关毕业论文提纲,关于焊接工艺设备的作用与设计相关毕业论文题目范文。适合焊接工艺及焊接变形及自动。

嵌入式Linux设备驱动程序开发

本文是一篇嵌入式论文范文,关于嵌入式类毕业论文模板,关于嵌入式Linux设备驱动程序开发相关毕业论文参考文献格式范文。适合嵌入式及操作系。

单片机程序设计中的常用结构问题

本文是一篇程序论文范文,关于程序方面电大毕业论文,关于单片机程序设计中的常用结构问题相关本科论文范文。适合程序及单片机及模块方面的的。

计算机输入输出设备的与程序语言的

本文是一篇计算机论文范文,计算机相关在职毕业论文开题报告,关于计算机输入输出设备的与程序语言的相关电大毕业论文范文。适合计算机及计算。