当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:PCI总线已经成为工业控制计算机中的主流总线结构,文中给出了采用PCI总线的DMA方式来实现大量高速数据捕获,包括DMA数据传输和突发数据传输的实现方法。该方法的驱动程序采用WinDriver驱动开发平台,并借助PCI设备操作函数的动态链接库,使Windows驱动程序的开发更加容易,缩短了驱动程序开发与调试周期,并可方便地应用于其它PCI设备的控制。

引言

随着ISA总线逐步被淘汰,基于PCI总线的扩展板越来越被广泛地应用于各种高速、大数据量的处理系统中。尽管有许多供应商提供了各种通用的PCI总线扩展板,但在较多应用场合,用户还必须自行设计能满足自己特殊需求的PCI扩展板,这就不可避免地会遇到PCI总线接口问题。对于绝大多数用户而言,选择专用PCI接口芯片进行PCI接口设计是必然的选择。PCI9054是PLX公司推出的一种32位33MHz的PCI总线主控I/O加速器。它采用多种先进技术,使复杂的PCI接口应用设计变得相对简单。该芯片是目前主流的PCI接口芯片之一。

1  PCI9054的工作模式及DMA处理机制

PCI是外围设备互连(PeripheralComponentInterconnect)的简称,它是一种通用总线接口标准。PCI提供了一组完整的总线接口规范、电气特性和行为规约,通过该规范,计算机系统中的外围设备能够实现结构化、可控化的连接以及正确地进行交互。PCI设备上有三种地址空间:I/O空间、存储空间和配置空间。其中配置空间的信息主要包括设备识别号、供应商代码号、Local总线三个空间的大小以及三个空间的基址等。

在计算机启动时,系统将根据配置信息分配系统资源。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由操作系统内核中的PCI初始化代码使用。PCI总线接口因其传输速度快、即插即用、自动配置的优点而成为实现数据采集设备到主机之间接口的首选。

PCI9054是PLX公司生产的PCI总线接口控制器芯片,符合PCIV2.2规范,32位,工作频率为33MHz,拥有两个独立的DMA通道,传输速率达132MB/s。PCI9054提供有PCI总线、EEPROM、LOCAL总线三个接口,其中LOCAL总线有三种工作模式:M模式、C模式和J模式,可通过模式选择控制引脚MODE[1:0]进行控制。当MODE[1:0]为“11”时,PCI9054工作在M模式;当MODE[1:0]为"00"时,PCI9054工作在C模式;当MODE[1:0]为“01”时,PCI9054工作在J模式;当MODE[1:0]为“10”时,保留工作状态。M模式可与Motorola公司的MPC850或MPC860系列高性能微处理器进行无缝连接;C模式可与Inteli960系列高性能微处理器进行无缝连接;J模式地址和数据线可以复用,但应用很复杂,不过在一些特殊的应用场合,利用J模式可以和TI公司6000系列DSP的HPI口进行接口,其控制逻辑将比其它模式简单得多。

在实际的数据采集时,LOCAL总线接口一般设置为C模式。PCI9054芯片在PCI总线和LO-CAL总线之间有三种直接的数据传输模式,其中,在PCIInitiator模式,LOCAL总线主设备可通过PCI9054访问PCI总线存储空间和I/O空间;在PCITarget模式,PCI总线主设备可通过PCI9054访问LOCAL总线存储空间和I/O空间;而在DMA方式,PCI9054作为两总线的主设备,可实现PCI总线存储空间与LOCAL总线存储空间之间的数据传输。

在PCI9054中,DMA传输主要用于PCI总线与LOCAL总线间的数据传输,此时,PCI9054将接管两总线的控制权,可进行两个方向的数据传输。和DMA操作相关的寄存器包括:DMA模式寄存器(DMAMODE)、PCI基地址寄存器(DMAPADR)、LOCAL基地址寄存器(DMALADR),传输大小寄存器(DMASIZ)和描述符指针寄存器(DMADPR)o

通过这些寄存器的操作,就可以实现PCI到LOCAL或LOCAL到PCI的DMA数据传输。但是,这只是在硬件上的实现,而要在Windows操作系统上进行操作,还必须具有相应的驱动程序支持。

2  DMA方式数据传输

虽然DriverWorks已设计好了程序框架,但其流程较为复杂。下面简要介绍如何编写DMA的WDM驱动程序。DriverWorks提供了三个类:kd--maAdapter、KDmaTransfer和KCommonDmaBuffer类,可用于实现DMA操作。其中,KDmaTransfer类用来管理和操纵DMA传送,它能够管理所有类型的DMA传送操作;KDmaAdapter类用于建立一个DMA适配器,以说明DMA通道的特性,描述DMA传送类型。例如,是总线主设备DMA还是系统DMA?如果是系统DMA,还有使用哪个DMA通道,DMA通道的宽度是8b还是16b等?而Kcom-monDmaBuffer类用于申请系统提供的公用缓冲区。利用上述几个类来编写DMA驱动程序的步骤如下:

(1) 创建一个KDmaAdapter类的实例,并且正确地描述要进行的DMA信息。

(2) 决定驱动程序使用的内存类型是“Packet”还是“CommonBuffer”。DMA传送可以使用Com-monBuffer暂时存放所要传送的数据。CommonBuffer是由系统预先分配的一块物理地址连续的内存区域,处理器和设备都能对它进行访问。Kcom-monDmaBuffer类可对CommonBuffer进行描述。另外一种方法是使用MDL(MemoryDescriptorList)描述的内存区域来作为DMA传送数据的源与目标,这种方法被称为"PacketDMA”;

(3) 创建—KDmaTransfer类的实例,并使用成员函数Initiate给实例加入一个回调函数(callbackfunction)。

(4) 编写上面所说的回调函数。当一次DMA传送由于硬件设备的限制或由于缓冲区容量大小的限制而不得不分成多段传送时,回调函数将会被多次调用。它首先通知设备开始进行传送,然后立即返回,而并不是等待传送结束再返回。

(5) 编写代码来处理分段传送结束。驱动程序应能判定何时DMA传送的一个分段传送结束。驱动程序必须调用成员函数Continue来通知传送对象当前分段已传送完毕,如果整个DMA传送还未完成,它会设置下一次传送,并调用回调函数。DMA数据传输的程序流程图如图1所示。

基于PCI9054的DMA和突发数据传输实现

3  DMA和突发数据传输

在《PCI9054-DataBook》中,每种工作模式都将DMA和突发数据传输的时序图放在一起,这并不意味着DMA和突发数据传输是等同的,这是两个不同的概念。事实上,既可利用一周期的总线操作,也可以利用DMA方式进行数据传输。

DMA和突发数据传输的作用不同。PCI9054中有两个DMA通道,可以独立工作,互不干扰。釆用DMA方式传输数据可以节省CPU资源;而采用突发方式传输数据可以提高数据的传输率,充分发挥PCI总线数据传输速率高的优点。因此,在高速大容量数据传输和处理系统中,将DMA和突发数据传输方式结合在一起是比较理想的,这样一方面可以充分发挥PCI总线的性能,另一方面,也可以用节省出的CPU资源对数据处理算法进行优化。用状态机实现该控制逻辑是比较理想的-PCI9054在C模式下,釆用单一周期和突发相结合的总线访问状态转换程序流程图如图2所示。

基于PCI9054的DMA和突发数据传输实现

用该状态转换图设计出的逻辑电路,既可满足单一周期总线访问的需要,又可以满足突发方式传输数据的需要,因而具有很大的实用价值。使用DMA和突发方式相结合进行数据传输时,其驱动程序应作如下设置:

(1) 调用驱动程序中相应的API函数,找到PC机的物理地址;

(2) 在设备驱动程序中使能突发寄存器;

(3) 在设备驱动程序中使能总线位宽寄存器;

(4) 在设备驱动程序中使能相应的寄存器,指明DMA传输的方向是PCI—LOCAL还是LOCAL

—PCI;

       (5) 在设备驱动程序中指明本次DMA传输需要传输的字节数。

完成上述设置后,即可在突发方式下进行DMA传输,否则,DMA传输就会失败。

4  结论

计算机接口技术的变化主要是由以前的以基本接口设计为中心转变为以PCI总线相关技术为中心。在8/16位的系统环境下,硬件扩展卡的设计主要是面向ISA总线,所有的可用资源都是固定不变的;在编程方面是直来直去,并没有什么保护措施。而在32位系统环境下,所有的资源都是动态分配的,而且在设计扩展卡时,并不是直接与系统打交道,而是要经过多次的逻辑转换。对于软件的设计,也需要编写32位程序,并且需要经过不同层次的软件设计。

DMA通信高度依赖操作系统、硬件特性和资源。在实现DMA通信的过程中,其项目要求、DMA本身的特点、操作系统提供的支持、具体硬件特性以及系统资源之间是相互作用的。DMA环境的建立过程,就是各部分相互协调、互为支持的过程。DMA编程必须充分了解控制芯片所提供的手段和限制,这些手段和限制是实现DMA的基础。实现DMA通信,需要处理的主要问题有:DMA缓冲区的物理连续问题、PCI设备检测和初始化问题、缓冲区的大小问题、PCI设备信息的收集问题等。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

与两相双极步进电机的驱动电路相比,两相单极步进电机的驱动电路在输入段配置、内部逻辑及控制电路和驱动电路使用双通道方面基本相同,但是输出段的配置不同。

关键字: 四相步进电机 驱动程序 程序电路

本文介绍了如何实现嵌入式MICREL网卡的驱动程序开发和设计。首先,我们介绍了MICREL网卡的概述和工作原理。然后,详细探讨了驱动程序的开发流程,包括硬件和软件的配置以及驱动程序的编写和测试。最后,总结了几点注意事项和...

关键字: 嵌入式 MICREL网卡 驱动程序

北京2023年8月31日 /美通社/ -- 8月30日,由中共河曲县委、河曲县人民政府主办,中共河曲县委宣传部、河曲县文化和旅游局、保利乐享文娱科技(北京)有限公司承办的"河清盛世,曲著华章"2023...

关键字: 3D建模 BSP DMA MAPPING

北京2023年8月9日 /美通社/ -- 浪潮云海经过13年的发展,到今天形成了以服务器虚拟化、超融合、InCloudOS 为代表的云海产品家族,凭借领先的产品技术能力和丰富的行业实践,满足不同行业、场景下客户的上云需求...

关键字: DMA 虚拟化 软硬件 CPU

随着计算机技术的继续发展,CPU的处理速度越来越快,EISA总线的32MB/s带宽已经满足不了CPU的需求,CPU外围总线带宽已经成为制约计算机处理能力继续提高的瓶颈。1991年下半年,Intel公司首选提出PCI总线的...

关键字: PCI总线 PCI工作原理

虚拟仪器技术就是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化的应用。灵活高效的软件能帮助您创建完全自定义的用户界面,模块化的硬件能方便地提供全方位的系统集成,标准的软硬件平台能满足对同步和定时应...

关键字: PCI总线 虚拟仪器

目前,PCI总线已成为新一代个人计算机的标准总线,它是一种高性能的32/64位地址数据复用总线,总线时钟频率的0~33MHz。它不象ISA异步总线那样把地址寻址和数据读写控制信号都交由微处理器产生,而是一种独立于处理器的...

关键字: PCI总线 PCI接口

在这篇文章中,小编将对OLED的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: OLED 驱动程序 无源驱动

北京2023年2月20日 /美通社/ -- 在经济领域有着重要影响力的CFS财经峰会2023第十二届活动定于今年7月举行,活动主题为"激活高质量发展澎湃活力"。 今年的财经峰会将以线下为主,线上结合...

关键字: 数字化 智能制造 数字经济 DMA
关闭
关闭