基于PCI总线的数据采集系统设计与实现
PCB布板
PCI总线时钟频率只有33MHz,所以频率不是很高,但是需要注意的一点是PCI时钟采用的是反射升压的原理,也就是说PCI时钟是通过终端反射来提升信号幅度,这里利用了传输线的原理。这就对PCI时钟线的长度提出了要求,必须符合规范中的2.5 英寸长度要求,否则会导致多块PCI板在同一个系统中出现无法正常工作的情况。为了达到这样的长度,时钟线的布线往往采用蛇形走线,细心的朋友可能已经看出我设计的PCB存在问题,PCI接口上没有蛇形线,PCI时钟线肯定在B面(元件面)的,为什么没有看到蛇形线呢?其实,这是第一版PCI数据采集系统设计中的一个问题,只不过问题没有表现出来罢了。
设备驱动程序
在开发第一版PCI设备过程中,非常得益于PLX提供的评估驱动和PLX调试工具,否则我的本科毕设不知道是否能如期完成~~在毕设完成之后的那个暑期,我开始自己编写PCI数据采集卡的设备驱动程序,该驱动的开发基于driverstudio平台,采用C++的方法进行开发,开发过程阅读了三本Windows驱动书籍,其中对我最有效的是武安河的《WDM设备驱动程序开发》。
PCI数据采集卡的驱动主要完成了IO读写、DMA中断事务的处理以及DMA的数据传输。在Driverstudio中将Window DDK进行了封装,所以编写设备驱动时直接采用封装的类库就可以了,例如使用DMA传输的方法,采用KDmaTransfer。关于Windows平台下的设备驱动编写在后继的blog中将会有相应的博文进行讨论。
PCI数据采集卡设计心得
对于数据采集部分的心得我不想多说了,其与应用相关,对于不用的应用具有不同的信号特征,针对不同的信号特征,可以采用五花八门的数据采集方法。例如,并行高速采样、等效采样、高分辨率采样、浮点采样等等。这里再说两句PCI总线的设计心得:
1、
得益于PCI总线控制器,PCI设备卡的设计、实现并不是十分复杂,无论是DMA数据传输还是IO数据读写都可以相对比较容易的完成,设计的重点就在于local bus时序方面的设计(通常采用FPGA实现local bus的时序接口)。传统的PCI总线频率只有33MHz,所以对于PCB设计难度不是很大。总的而言,PCI设备卡的开发应该是一个大众化的技术。
2、
对于硬件设计人员而言,设备驱动是PCI设备开发过程中遇到的一个技术高峰。对于自学、开发设备驱动,我大概用了一年左右的时间,对于系统内核的真正理解、把握是在我工作之后。当我从事软件开发一段时间过后,回过头来看看我曾经开发的PCI设备驱动,原来是如此简单!但是对一个纯硬件人员而言,的确有难度,因为硬件人员对操作系统的机制不熟悉,导致理解设备驱动处于“空中楼阁”的状态,只知其然,但不知所以然。如果要战胜这一技术高峰,需要硬件人员在软件方面的知识积累。
3、
PCI系统开发的核心技术在于总线控制器,总线控制器一般分成两大类,一类为PCI桥;另一类为PCI设备控制器。国内搞PCI总线控制器的有,但是做成产品的好像没有。PCI总线控制器分两部分,一部分为物理层的收发器,传统的PCI总线不需要,如今的PCI-E就需要了,所以更是提高了设计难度;另一部分为PCI logic core,这一部分的设计难度相对小点,实现控制通道和数据通道。对于搞高速互联技术方面研究的人员而言,这一点是需要我们去关注和投入智慧的地方。
Re: [分享] 基于PCI总线的数据采集系统设计与实现
保存下来慢慢看
lz对vc++进行数据采集的编程很熟练吧?
我原来是学软件的,现在从事的是数据采集编程,主要就是研华的板卡,不知lz熟悉不?我还在慢慢摸索中