zoukankan      html  css  js  c++  java
  • PCI数据传输卡的详细设计经历(基于PCI9054)之一

    http://www.eetop.cn/blog/html/52/59752-1207.html

    PCI数据传输卡的详细设计经历(基于PCI9054)之一

                                                                 

    去年的时候,接受公司分配的任务,做了一块PCI数据传输卡,作用是把前面板子传过来的数据上传到PC机,PC上的应用软件会进行一些后续的处理。

    刚开始这个项目的时候也有些茫然,因为我以前也没做过PCI卡,只是对PCI总线的信号大概有所了解。于是开始上网查资料,把别人写的文章搜了很多下载下来,细细地看。看多了,也有点感觉了,就开始下手做。

    PCI卡无非是这三步:

    一硬件原理图及PCB布板       写驱动程序        写上层测试程序

    第一步应该算是比较简单。首先是PCI协议处理芯片的选型。现在最常用的有两款:即PLX公司的PCI9052PCI9054。其区别就是9052不支持DMA传输,而9054支持DMA传输。如果你的应用对带宽要求较高的话,建议采用9054,这样比较有把握。如果带宽要求较低而又想缩减成本的话,9052是个不错的选择。这两种芯片的可参考的设计资料也比较多。

    我们的产品对带宽要求其实并不算高,仅为10MB/s左右,但考虑到PCI传输的效率,谨慎起见,我还是选了9054,这样带宽会有比较多的富裕,就算设计当中驱动的效率打点折扣,也还是够用的。这里明确一下带宽的问题,如果PCI总线的速率是33MHz的话,那么它的理论传输带宽就是33Mx32b=1.056Gb/s,如果换算成字节的话,那就是1.056Gb/8=132MB/s。请注意这是理论带宽,实际设计不会达到的,因为一方面是硬件设计的问题,另一方面是驱动设计的效率不够高。所以如果能用9054DMA方式达到几十MB/s的带宽的话,已经是相当不错了。

    芯片选定后,就要开始原理图的设计了,可以登陆PLX的网站,上面提供9054DEMO板的原理图的,我们的原理图就可以参照进行设计。其实9054这端的原理图做起来比较简单,无非是一些引脚上拉下拉的问题,画的时候只参照DEMO板的图和9054DATASHEET就可以搞定。其中要注意的地方主要有这几个:

    1.  TEST引脚要下拉,这是正常操作模式。如果上拉则是进入芯片测试模式。

    2.  PCI金手指处的PRSNT1#PRSNT2#引脚一定至少要有一个下拉,或者两个都下拉(具体可参照PCI协议V2.3),否则找不到卡。

    3.  模式选择引脚MODE0MODE1如果都下拉,是C模式,即LOCAL端的地址线和数据线是分开的;如果MODE0上拉,MODE1下拉,则是J模式,即LOCAL端的地址线和数据线复用。我采用的是C模式。

    4.  这是很关键的一点,即EEPROMEEDI/EEDO引脚的配置。有这样三种情况:

    A 当不安装EEPROM时,该引脚一定要下拉,用1k的下拉电阻即可。此时启动后9054会按默认的值进行配置。

    B 当安装空白的EEPROM时,该引脚需要上拉。

    C当安装烧录好的EEPROM时,该引脚需要上拉。

    这里解释一下:卡设计好后,如果没有配置好EEPROM的值,也可以测试卡的硬件,按AB步骤,把卡插在PCPCI插槽上,如果硬件设计没有问题,是可以找到卡的。所以设计的时候应将此引脚设计成上下拉,根据需要装上拉或下拉电阻。这可以避免只能等配置好EEPROM的值后才能测试卡的硬件设计正确与否。

    5.  EEPROM的设计问题,9054是应该搭配93C56的,即2k容量的EEPROM9052是搭配93C46这种1kEEPROM。至于具体的厂商,可以选用STM93C56或者HOLTEKHT93LC56PLX公司的网站上有EEPROM的选型指导,可以下载来看。据我的调查,市场上很容易买到ST的这种片子,其他品牌的不是太好买。另外,如果你是有烧录机,打算将ROM烧录过后再安装在板子上,那么采用插件的芯片比较方便,如果采用贴片的,烧录机要有相应的烧录SOP-8的转接头才行。如果你是打算在线烧录,可以采用贴片的SOP-8的封装的片子,直接把空白的片子焊接在板子上即可,关于在线烧录,以下会详细解释。

    其实特别注意的这几条,9054DATASHEET也都有提到,只是我挑出来着重强调一下,其他引脚的设计就请参照DATASHEETPLX的网站上的一些资料来做,无非是些上下拉之类的。

    原理图设计完毕就是布板了,根据PCI协议的推荐,最好还是布成四层板,我的也是布成了四层,我也听说有布成双面板的。不过如果你是做有一定批量的产品,为了稳定性,还是要布四层比较好。需要注意的也就这几点:

    1.  LOCAL端的时钟输出的地方要加一个22或者33的小电阻,可以提高时钟信号质量。

    2.  PCL总线端的时钟也就是PCLK引脚到金手指的走线长度要为2500±100mil,如果直线距离太短可以绕成曲线来布。

    3.  PCI总线的地址数据线要在1500mil左右,其实走长一些也没关系,但最好还是遵照手册上说的要好一些吧。

    4.  这也是蛮搞笑的一点,金手指的AB面不要走反了哦,呵呵,这种情况不是没出过,我以前接触过的类似的情况的。金手指的宽度也不要太窄,以免接触不良,这些在网上都有相应的标准,可以找些来看。最好是有一个现成的PCI卡放在手边作为参照,免得犯一些低级错误。

    如果设计完成后把卡插在PC插槽上能找到卡的话,硬件设计问题应该不大,如果找不到,就要按我上面说的去查一些关键点了。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
    Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
    Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素
    Java实现 蓝桥杯VIP 算法提高 P0401
    Java实现 蓝桥杯VIP 算法提高 P0401
    Java实现 蓝桥杯VIP 算法提高 P0401
    Java实现 蓝桥杯VIP 算法提高 P0401
    Java实现 蓝桥杯VIP 算法提高 P0401
    QApplication::alert 如果窗口不是活动窗口,则会向窗口显示一个警告(非常好用,效果就和TeamViewer一样)
    QString::toWCharArray可以拷贝到宽字符串里
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/2546166.html
Copyright © 2011-2022 走看看