其实从开始我对 pci 卡是一窍不通的,硬件还好说,软件驱动程序更是一头雾水,由 于
我的 pci 卡是要在 windows98 操作系统下应用的,所以必须编写 pci 卡的驱动程序,支持
windows98 下 pnp 硬件的驱动程序一般可以编程 vxd 。如果想为了以后的 2k 平台兼容就最 好
编 wdm ,因为 windows2k 不支持 vxd ,而且以后的发展 wdm 肯定要代替 vxd 了。不过由 于
我找到的资料基本上都是介绍 vxd 的,感觉 vxd 的技术好像更成熟一点,编的人更多一点,
所以偷了一下懒(惭愧) ,就没有去研究 wdm ,就选择了 vxd 。
我的 pci 卡其实很简单,仅仅在本地端接了一个遥测信号的处理系统。
先说说硬件吧,其实按照正常的 pci 卡开发过程,仔细阅读 pci 规范是很重要的,但是
由于时间比较短, 我也没有很大的耐性看那些破规范, 也就稍稍了解了一下。 现在市场上 有
许多的专用的 pci 规范接口芯片,这些芯片提供的 pci 接口完全符合规范,具体符合的规范
版本可以参看具体的芯片所以即使开发者不是很了解规范的具体细则,也可成功的设计 pci
卡。 也就是可以达到傻瓜及设计。 在连线上只要将对应的引脚连在总线上就可以了, 在连 线
时要注意 pci 规范中提到了信号用的反射波信号,所以驱动的信号只用了要求电压的一半,
另一半靠反射来提升。 所 以对信号线的长度有要求: 64 位卡的 32 位信号具备的最大连线长 度
是 1500mil
,
64 位扩展信号的附加信号的连线长度最大为 2000mil
,
pci clk 的长度为 2500mil+ /-
100mil ,如果不够长度可以多绕几圈。
还有一个要注意的是 pci 信号中 prsnt1 和 prsnt2 , 开始我对这两个信号一直不是很清楚
,
清华 bbs 上的精华区说得也是含糊,后来师兄 devilface 告诉我的 prsnt1 和 prsnt2 两者必须 有
一个接 gnd ,否则系统肯定找不到卡,主板就是靠这两个信号来判断这个插槽上是否有卡,
而其接法同 pci 卡使用的功率有关具体的含义如下 (0 表示悬空, 1
表示接地) :
prsnt1 prsnt2 含义
0 0 no card
0 1 15w
1 0 25w
1 1 7.5w
另外 pci 卡上最好在从槽上引的电源上多加几个电容, 所有电源都必须退藕一般规范 推
荐 pci 卡做 4 层板,但是我只做了 2 层,其实无所谓,只要 2 层布得开,没必要布 4 层,不过 我
布线的时候还是费了一点功夫,用 specctra 布了 5 , 6 次,为研究室节省开支嘛! (要是导师
看见了该多感动呀! )
pci 规范规定了 5v 和 3.3v 两种电气规范, 我们一般的机器上都是 5v 规范的插槽当然也 不
乏 3.3v 的。所以我做的是 5v 的卡,不要以为 5v 的插槽上就得不到 3.3v ,一样可以提供 3.3v
的。
前面提到了 pci 接口芯片, 现在 pci 接口芯片技术已经比较成熟了, 介绍一点我知道的
:
AMCC: 早期有 5920, 后来 5933 风靡国内 , 早期的 PCI 接口都是用这做的 amcc 最近又推出了