×
嵌入式开发 > 详情

基于PCI Express总线的雷达数据记录器驱动程序开发

发布时间:2020-06-20 发布时间:
|
1 引言
数据采集系统中,大量的数据必须通过总线传到计算机内存中,传统的PCI总线越来越不能满足人们对带宽增长的需要。为解决这一矛盾,PC行业协会和外设厂商一起发布了PCI Express总线[1]规范,并且于2004年在标准台式机上得到应用。该技术可以有效地提高设备至计算机内存的数据传输速率。相对于PCI总线,它最大的特点是实现点到点的数据传输[2],每个设备有自己专用的双向数据通道,数据以包的形式串行传输,每个通道具有单方向250MB/S的数据传输速度。多个通道可以组合在一起形成x1(单通道)、x2、x4、x8、x12、x16和x32的信道以提高带宽。
在合成孔径雷达系统中,大量的回波数据需要实时记录下来以便进行事后成像处理。而PCI Express总线高带宽的优点可以很好的满足高速雷达数据记录的需要,而要充分发挥PCI Express总线的作用,驱动程序设计是关键。本文介绍了在Windows XP系统下,雷达数据记录器中PCI Express总线接口芯片PEX8311的驱动程序开发
2 雷达数据记录器介绍
雷达数据记录器由一台服务器计算机、PCI Express接口卡、SCSI卡和SCSI硬盘四部分组成,其中PCI Express接口卡的软硬件自行设计,其它部分采用标准的外购件。雷达数据
通过PCI Express接口卡传入计算机内存,计算机再将数据通过SCSI卡写在SCSI硬盘上。
PCI Express接口卡采用美国PLX公司推出的PEX8311作为本地总线和PCI Express总线的接口。PEX8311[3]是一款x1的PCI Express接口芯片,本地端总线频率最高可达66MHZ,数据位宽32bit。PEX8311含有4KB的配置空间,其中前256字节是和PCI设备功能上是兼容的,其余是PCI Express扩展配置空间。本文采用PEX8311的引脚LINTi#接收外部中断信号,使用DMA通道0进行块DMA方式读数据。
接口卡的结构框图如图1所示,利用差分转换芯片先将外部差分信号转换成单端信号,两块FIFO的“乒乓”传输以实现数据的连续传输,单个FIFO容量为512KB。在CPLD的控制下,两块FIFO的数据轮流通过PEX8311的DMA通道0传入计算机。

图1 PCI Express接口卡框图
具体工作过程:当其中一个FIFO被写满数据后,在CPLD控制下,外部数据继续写入另一个FIFO,同时,CPLD使PEX8311的LINTi#输入为低电平,这会产生一个LINT#中断,驱动程序响应中断并启动DMA传输读取FIFO中的数据到DMA缓存中。读完后,驱动程序通知应用程序将DMA缓存的数据写到SCSI盘上。
3 WDM驱动程序概述
WDM是一种分层驱动程序模型[4],如图2所示。系统启动时,总线驱动程序枚举总线上的设备,并为每个设备创建一个物理设备对象(PDO);然后PnP管理器根据注册表中的信息查找与这个PDO相关的过滤驱动程序和功能驱动程序,建立的过滤设备对象(FIDO)

图2 WDM分层驱动模型
和功能设备对象(FDO),最终,系统完成设备驱动的装入过程。设备扩展对象是与设备对象关联的另一种重要的数据结构,它是一块未分页的内存,I/O管理器自动把它分配给已建立的任何设备扩展对象,可以用它来保存与设备关联的任何信息,驱动程序需要时,只要在设备扩展对象中取出这些资源使用即可。
IRP全名为IO Request Packet,即I/O请求包,是系统创建的一种数据结构。当应用程序对设备操作时,I/O管理器根据具体的请求建立相应的IRP,IRP先被I/O管理器发送到最上层的驱动程序处理,然后依次传递给下层的驱动程序处理。每层驱动程序可以不作任何事情而直接将IRP向下传递,也可以直接将该IRP设置为完成状态。
4 PEX8311驱动程序设计
微软提供的驱动程序开发软件包DDK(Device Driver Kits)提供了用于驱动程序开发的资源文件、编译连接程序、开发技术文档等。第三方开发工具有NuMega公司DriverStudio和Jungo公司的WinDriver,它们对DDK进行了封装,方便用户进行驱动开发。但效率方面不如DDK。考虑到雷达数据记录的数据率较高,所以本文采用DDK开发PEX8311的驱动程序。总线驱动程序由系统提供,过滤驱动程序是可选的。所以本文只设计了PEX8311的功能驱动程序(以下简称驱动程序),它主要由驱动程序初始化、数据传输初始化、数据传输模块三部分组成。其基本思想是:应用程序与驱动程序共享DMA缓存,当驱动程序接收到一个LINT#中断时,启动DMA读取FIFO中的数据存在DMA缓存中,每次读完后,驱动程序通过事件通知应用程序取出DMA缓存中的数据存在SCSI硬盘上。
4.1 驱动程序初始化
DriverEntry是驱动程序的入口函数,负责初始化驱动程序对象。系统启动时,如果检测到PEX8311的存在,I/O管理器会建立一个未初始化的驱动程序对象并将它作为一个参数传给DriverEntry。DriverEntry把驱动程序其它例程的函数指针装入到驱动程序对象里面。当一个IRP被发送到设备时,I/O管理器使用该IRP关联的驱动程序对象找到正确的驱动程序例程处理。初始化的主要函数指针有:AddDevice、DriverUnload、DispatchCreate、DispatchClose、DispatchIoControl、DispatchCleanup、DispatchPnp、DispatchPower。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PLC控制步进电机方法