当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要: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设备信息的收集问题等。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭