数据采集/无线通讯 |
|
| 按行业筛选 |
|
|
| 按产品筛选 |
|
|
| |
查看本类全部文章 |
| |
|
|
|
基于EPP模式的并口数据采集的驱动设计 |
|
作者:西安交大 王静 薛武军 任钊 张新 |
|
摘 要:根据现有的工程数据采集的需求,结合并口及增强型并口(EPP)工作方式的特点,设计了以并口作为外设和主机的通讯接口的数据采集方案;并在现有主流桌面操作系统Windows2000下,以系统原有的并口驱动为基础,采用新的窗口驱动模式(WDM)实现了该数据采集驱动软件;经测试,系统运行稳定,速度可以满足需求。
关键词:并口;增强型并口;窗口驱动模式;数据采集
1 引言
在目前一些流行的上位机和数据采集设备组合的数据采集系统中,数据采集设备和上位机的通讯是一个比较关键的技术。一般的应用系统设计中,数据通讯技术主要采用串行异步通讯方式,但其传输速率受到限制,通常最高波特率设定在9 600bps左右[1]。而在一些数据采样率比较高的场合,如每秒20k~2M字节的数据通讯速率,使用串口通讯技术是远远达不到要求的,这就需要使用更为快速的数据通讯方案,目前比较合适的通讯技术还有并口和USB通讯方案。这里主要探讨并口通讯在数据采集中的运用。
当前许多并口数据采集系统都基于Windows98系统平台,由于系统可以直接访问并口硬件资源,导致了在上位机软件方面比较容易,因此很少被详细而深入地探讨。但随着Windows2000/WinXP操作系统成为主流的桌面系统之后,而该操作系统为了其稳定性和健壮性的需要,主机的上层应用程序将无法直接访问并口,这需要在Windows2000的新窗口驱动模式(Windows Driver Mode,简称WDM)下,基于Windows2000中现有的驱动体系,开发专有的并口数据采集设备驱动,以支持上位机采集软件地开发和运行。
2 EPP并口通讯
并口通讯技术经历多年的发展,现在已经形成了统一的1284标准。在这个标准中目前定义了如表1所列五种并口通讯模式。其中,EPP和ECP模式支持双向数据传输,数据传输速率都能够达到1Mbyte/s以上,显然是满足一般的数据采集要求的。现在,这两种模式为一般并口外设和主机广泛支持的并口工作模式。但由于EPP模式的操作时序简单,因此将其作为首选数据通讯模式。
而基于EPP协议的硬件和通讯设计,主要依据并口通讯的特点,采用中断上传方式,即外设通过nIntr中断来通知主机采集数据上传准备就绪,主机捕获中断后立即从并口读取数据。
由于并口的频繁中断使得系统不稳定。因此,在启用并口中断的时候,一定要尽量减少并口中断的频率,在这里就是要增加每次中断处理中的数据传输量。一般的方法是外设采用容量较大的FIFO,并在一次中断中,将这些数据上传主机。
基于EPP协议的硬件设计已经在许多文章得到探讨,不是这里论述的重点,因此不再赘述。
3 Windows2000下并口数据采集软件的设计
在Windows2000/WinXP系统中,为了考虑到系统的稳定性,应用程序已经无法直接访问和操作并口。同时VxD也将为Windows2000下的更为先进的窗口驱动模式(Windows Driver Mode简称WDM)体系所取代,因此要在Windows2000/WinXP系统下面进行并口数据采集设备软件开发,就必须进行并口设备的WDM驱动的开发。3.1 Windwos2000驱动体系
图1显示了在Windows2000/WinXP系统中应用程序调用执行一个硬件操作调用的基本调用过程,从中可以看到驱动的位置及其所起到的作用。
WDM是微软公司在Windows NT驱动程序体系的基础上 ,提出了一个新的设备驱动程序体系。
WDM不仅支持即插即用、电源管理、WMI等功能 ,它强调驱动程序的分层和模块化,拥有更强的可扩展性和可移植性,使用更加灵活、运行更加安全、开发更加快捷,同时可以很轻易地移植到不同的平台上运行。
3.2 WDM驱动程序的种类和结构
WDM的驱动程序是分层的,一般按照层次分为高层、中间和底层三类[4]。顾名思义,高层驱动程序依赖于中间和底层驱动程序完成工作,而中间驱动程序又依赖于底层驱动程序来完成工作。
高层驱动程序主要为请求者提供非物理的抽象,并一次转换为特定的设备请求。比如文件系统驱动程序(File System Driver,简称FSD)。
中间驱动程序是驱动中相对比较丰富的领域,包括了诸如磁盘镜像、类驱动程序、微型驱动程序和过滤器驱动程序。这些驱动程序穿插在高层抽象层和低级物理支持之间。其功能多样,实现方式灵活。
底层驱动程序主要包括诸如硬件总线的控制器等驱动,这些驱动直接与Windows的硬件抽象层(HAL)和硬件交互,它们包括了物理驱动程序的概念,这些物理驱动程序与一个或多个功能驱动程序发生作用。
3.3 Windows2000中的并口系统驱动环境
Windows2000中已经为并口提供了一些默认的系统驱动,其中一个是Parport,另一个是Parclass,它们的执行映象文件分别对应Parport.sys和Parallel.sys。
Parport是Windows2000提供给并口的系统功能驱动程序,不可取代,它支持WDM的所有基本特性,它负责为每个并行端口创建一个命名的Parport设备对象,并且为每个Parport设备对象分配一个工作队列。同时还为并口设备类驱动如Parclass或其他的特定并口设备功能驱动程序紧密配合,为它们提供如下的服务功能:
(1)并口使用的资源,如端口、中断等资源;
(2)总线接口信息;
(3)给其他驱动提供一些回调过程的指针,通过这些回调过程可以控制一个并口设备。
Parclass是挂接在并口上的并口设备的类驱动,它依赖于Parport提供的服务,同时它也是一个即插即用的并口设备的总线驱动。Parclass首先创建一个总线功能设备对象,它代表一个硬件独立的Parclass总线控制器。同时为每个挂接在并口上的即插即用设备在Parclass总线上创建子对象,或者直接为并行端口创建一个遗留设备对象。
同样,Parclass也给一些更高层的驱动程序提供一些回调过程和内部IO控制指令来控制和访问Parclass总线下的子设备。Parclass目前支持对Parclass子设备的裸访问,同时支持的并口模式有标准并口、IEEE1284兼容并口、ECP和EPP并口等。
以上两个驱动是Windows2000/WinXP系统中为并口以及并口设备提供的系统驱动程序,它构成了其他并口以及并口设备驱动开发的基础和环境。
3.4并口采集驱动的设计
并口数据采集驱动的结构设计主要如图2所示。并口数据采集驱动程序结构设计主要有以下要点:
(1)为了避免驱动程序设计的过于复杂,减少驱动调用的层次,驱动直接构建在并口驱动程序Parport之上, 而没有在Parclass上构建驱动,直接利用Parport提供的基本并口操作实现驱动的功能;
(2)驱动工作在EPP高速通讯模式;
(3)驱动不采用轮询模式去查询并口,而是在等待并口外设的中断事件,通知主机外设数据上传准备完毕,驱动中断伺服例程或者延迟例程中完成并口设备采集数据的读取;
(4)系统没有数据的双向通讯,对上层应用程序和驱动程序而言,只有驱动程序到应用程序的数据流,因此它们之间的通讯模式采用了事件模式,即驱动当采集数据到达或者数据缓冲区已满时,通过事件同时上层应用程序,再由上层应用程序来从驱动的系统缓冲区中读取采集上来的数据。
3.5并口驱动的实现
并口驱动的实现主要是按照WDM驱动的规范和接口来实现,这些接口有层次地分为如下几个部分:驱动程序的初始化(DriverEntry入口函数)和卸载例程(DriverUnload)、驱动设备的添加例程(AddDevice)和主要IO请求的派发例程、即插即用(Pnp)处理例程(其中包括的驱动设备的启动、停止和卸载等子例程)、控制IO子请求的处理例程、电源管理处理例程、WMI和NT事件通知处理例程。驱动的设计和实现在许多书籍和文章上都有详细的介绍[4,5],其一般通用的设计和实现这里不在赘述。这里主要阐述一些与并口操作有着紧密联系的关键实现。
3.5.1并口的获取和访问
在Windows2000操作系统中,并口驱动Parport自动为每个并口生成一个设备对象,一般最常用的一个并口设备对象的内部设备名为“\Device\ParllelPort0”,本驱动就是通过这个内部设备名来获得并口对象。同时,应该注意在设备卸载时删除相应的并口设备指针。得到这个设备对象后,就可以通过内部控制IO请求和回调函数来控制并口操作。具体代码如下:在获得并口对象之后就通过Parport驱动发送内部控制IO IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE或者也可以调用PARALLEL_PORT_INFORMATION的PPARALLEL_TRY_ALLOCATE_ROUTINE例程来占用并口,这样驱动程序就可以获得并独占并口的资源,与并口数据采集设备通讯。
3.5.2并口模式的设置
首先这里强调的是主机的并口必须支持EPP模式的通讯方式,具体地说主机的BIOS中要将并口模式设置为EPP模式或者EPP+ECP混合模式。在此之上,驱动程序才能正确地进行并口工作模式的设置。一般在EPP模式下时,驱动不用设置并口工作模式,但如果在EPP+ECP工作模式下,则需要驱动程序检测并设置并口工作模式,这时就需要通过向Parport驱动程序发送IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE内部控制IO,或调用TrySetChipMode回调例程来设置并口为EPP工作模式。同时,应注意如果BIOS中设为EPP+ECP混合模式,在卸载驱动设备后要将并口模式恢复为原有的模式。
3.5.3并口中断的挂接
挂接并口中断,不推荐直接调用IoConnectInterrupt例程,而只需要向Parport驱动程序发送内部控制IO (IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT)来挂接指定的中断例程。
3.5.4并口驱动与应用程序的通讯
主要的方法就是由上层应用程序创建一个事件,然后通过IO_MJ_DEVICE_CONTROL的设备控制IO将此事件句柄作为一个参数传给驱动程序,之后应用程序本身就进入等待这个通知事件触发的状态之中。驱动程序获得这个通知事件句柄,将其保存在自己的设备扩展之中,当并口有数据到达需要向上层应用程序发送数据的时候,就触发这个事件,则上层应用程序将会得到通知,继而从驱动中读取数据。
4 结论
驱动是在Windows2000 DDK和VC6下开发完成,由Numage的SoftIce调试工具调试通过。
驱动程序采用了增强型并口模式作为并口设备驱动的工作模式,此模式下并口开发相对比较容易,而且极大扩展了并口通讯容量和速度。同时驱动是构建在Windows2000为并口提供的系统功能驱动Parport之上,通过Parport提供的各项功能来访问和控制并口,即减少了驱动的开发难度,并增强了系统的整合性和稳定性。目前,实测数据采集速率峰值达到1Mbyte/s以上,稳定运行时也可达到400~500Kbyte/s的速度,同时,上层的应用程序耗用的资源相当少,运行平稳,效果良好,为Windows2000/WinXP系统下开发并口数据采集设备的软件系统提供一些有意义的尝试和经验。
参考文献:
[1]黄山,赵亚锋. 使用PC机并行口与下位单片机并口通信的方法[J]. 计算机工程,2000,26(6):95-96.
[2]IEEE Std 1284~1994. IEEE Standard Signaling Method for a Bidirectional Parallel Peripheral Interface for Personal Computers[S].
[3]宋大雷,张东来. IEEE1284标准简介[J]. 电子计算机与外部设备,2000,24(1):21-24.
[4]Art Baker, Jerry Lozano. Windows2000设备驱动程序设计指南[M]. 施诺译. 北京:机械工业出版社,2001.8-10.
[5]姜江,柳泉. 基于Windows2000的WDM设备驱动程序的开发[J]. 应用科技, 2002,29(7):45-47.(end)
|
|
文章内容仅供参考
(投稿)
(如果您是本文作者,请点击此处)
(3/13/2005) |
对 数据采集/无线通讯 有何见解?请到 数据采集/无线通讯论坛 畅所欲言吧!
|