📄 基于pci9054的数据传输卡的设计--大漠孤烟.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://blog.21ic.com/user1/4082/archives/2007/37873.html -->
<HTML><HEAD><TITLE>基于PCI9054的数据传输卡的设计--大漠孤烟</TITLE>
<META http-equiv=Content-Language content=zh-CN>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3268" name=GENERATOR>
<META content=swimcrane,swimcrane name=author>
<META content=基于PCI9054的数据传输卡的设计 name=keyword>
<META
content=" 做PCI卡无非是这三步:一硬件原理图及PCB布板 &n"
name=description><LINK title=RSS href="/user1/4082/rss2.xml"
type=application/rss+xml rel=alternate><LINK
href="基于PCI9054的数据传输卡的设计--大漠孤烟.files/OblogUserDefault4.css" type=text/css
rel=stylesheet>
<SCRIPT src="基于PCI9054的数据传输卡的设计--大漠孤烟.files/main.js"
type=text/javascript></SCRIPT>
</HEAD>
<BODY>
<SCRIPT src="基于PCI9054的数据传输卡的设计--大漠孤烟.files/ad_usertopjs.htm"></SCRIPT>
<LINK href="基于PCI9054的数据传输卡的设计--大漠孤烟.files/book.css" type=text/css
rel=stylesheet>
<TABLE class=mainBox id=table1 height="100%" cellSpacing=0 cellPadding=0
width="100%" border=0>
<TBODY>
<TR>
<TD colSpan=2
height=65>
<DIV id=Topmenu><SPAN
style="COLOR: #000000">
<BR>
<SPAN id=blogname>21IC页面载入....</SPAN></SPAN></DIV></TD>
<TD height=65></TD>
<TD height=65><BR><BR><BR><BR>
<P align=right>
<DIV id=Topmenu> </DIV></TD></TR>
<TR>
<TD vAlign=top width=70 height="100%"><IMG height=10
src="基于PCI9054的数据传输卡的设计--大漠孤烟.files/pix.gif" width=70 border=0></TD>
<TD vAlign=top width=480 height="100%"><IMG height=10
src="基于PCI9054的数据传输卡的设计--大漠孤烟.files/pix.gif" width=480 border=0>
<P style="TEXT-ALIGN: right">
<DIV id=subject_l>21IC页面载入....</DIV>
<P></P>
<H3>基于PCI9054的数据传输卡的设计</H3><SPAN class=date>swimcrane 发表于 2007-5-11
20:16:00</SPAN>
<TABLE
style="TABLE-LAYOUT: fixed; BACKGROUND: none transparent scroll repeat 0% 0%"
cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV class=tit> </DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt>
<P><SPAN
style="FONT-SIZE: 18pt">做PCI卡无非是这三步:一硬件原理图及PCB布板
二
写驱动程序
三 写上层应用程序</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">第一步应该算是比较简单。首先是PCI协议处理芯片的选型。现在最常用的有两款:即PLX公司的PCI9052和PCI9054。其区别就是9052不支持DMA传输,而9054支持DMA传输。如果你的应用对带宽要求较高的话,建议采用9054,这样比较有把握。如果带宽要求较低而又想缩减成本的话,9052是个不错的选择。这两种芯片的可参考的设计资料也比较多。我们的产品对带宽要求其实并不算高,仅为10MB/s左右,但考虑到PCI传输的效率,谨慎起见,我还是选了9054,这样带宽会有比较多的富裕,就算设计当中驱动的效率打点折扣,也还是够用的。这里明确一下带宽的问题,如果PCI总线的速率是33MHz的话,那么它的理论传输带宽就是33Mx32b=1.056Gb/s,如果换算成字节的话,那就是1.056Gb/8=132MB/s。请注意这是理论带宽,实际设计不会达到的,因为一方面是硬件设计的原因,另一方面是驱动设计的效率会多少打点折扣。所以如果能用9054的DMA方式达到接近100MB/s的带宽的话,已经是相当不错了。在据我所知的实际应用中,通常却并不需要PCI卡达到如此高的带宽,十几M或者几十M就足够用了,所以选用9054还是有较多富余的,设计风险比较小。</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">芯片选定后,就要开始原理图的设计了,其实9054这端的原理图做起来比较简单,无非是一些引脚上拉下拉的问题。其中要注意的地方主要有这几个:</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">1.
TEST引脚要下拉,这是正常操作模式。如果上拉则是进入芯片测试模式。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">2.
PCI金手指处的PRSNT1#和PRSNT2#引脚一定至少要有一个下拉,或者两个都下拉(具体可参照PCI协议V2.3),否则找不到卡。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">3.
模式选择引脚MODE0和MODE1如果都下拉,是C模式,即LOCAL端的地址线和数据线是分开的;如果MODE0上拉,MODE1下拉,则是J模式,即LOCAL端的地址线和数据线复用。通常采用的是C模式,可以降低开发难度。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">4.
这是很关键的一点,即EEPROM的EEDI/EEDO引脚的配置。有这样三种情况:A
当不安装EEPROM时,该引脚一定要下拉,用1k的下拉电阻即可。此时启动后9054会按默认的值进行配置。B
当安装空白的EEPROM时,该引脚需要上拉。C当安装烧录好的EEPROM时,该引脚需要上拉。这里解释一下:卡设计好后,如果没有配置好EEPROM的值,也可以测试卡的硬件,按A或B步骤,把卡插在PC的PCI插槽上,如果硬件设计没有问题,是可以找到卡的。所以设计的时候应将此引脚设计成上下拉,根据需要装上拉或下拉电阻。这可以避免只能等配置好EEPROM的值后才能测试卡的硬件设计正确与否。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">5.
EEPROM的设计问题,9054是应该搭配93C56的,即2k容量的EEPROM,9052是搭配93C46这种1k的EEPROM。至于具体的厂商,可以选用ST的M93C56或者HOLTEK的HT93LC56,PLX公司的网站上有EEPROM的选型指导,可以下载来看。据我的调查,市场上很容易买到ST的这种片子,其他品牌的不是太好买。另外,如果你是有烧录机,打算将ROM烧录过后再安装在板子上,那么采用插件的芯片比较方便,如果采用贴片的,烧录机要有相应的烧录SOP-8的转接头才行。如果你是打算在线烧录,可以采用贴片的SOP-8的封装的片子,直接把空白的片子焊接在板子上即可。在线烧录很方便,避免每次烧写EEPROM都要插拔一下芯片,可以提高芯片的使用寿命,而且不用烧录机,节省了成本。
其实特别注意的这几条,9054的DATASHEET也都有提到,只是我挑出来着重强调一下,其他引脚的设计就请参照DATASHEET及PLX的网站上的一些资料来做,无非是些上下拉之类的。</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">原理图设计完毕就是布板了,根据PCI协议的推荐,最好还是布成四层板,我也听说有布成双面板的。不过如果你是做有一定批量的产品,为了稳定性,还是要布四层比较好。需要注意的也就这几点:</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">1.
LOCAL端的时钟输出的地方要加一个22或者33的小电阻,可以提高时钟信号质量。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">2.
PCL总线端的时钟也就是PCLK引脚到金手指的走线长度要为2500±100mil,如果直线距离太短可以绕成曲线来布。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">3.
PCI总线的地址数据线要在1500mil左右,其实走长一些也没关系,但最好还是遵照手册上说的要好一些吧。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">4.
这也是蛮搞笑的一点,金手指的AB面不要走反了哦,呵呵,这种情况不是没出过,我以前接触过的类似的情况的。金手指的宽度也不要太窄,以免接触不良,这些在网上都有相应的标准,可以找些来看。最好是有一个现成的PCI卡放在手边作为参照,免得犯一些低级错误。</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">如果设计完成后把卡插在PC插槽上能找到卡的话,硬件设计问题应该不大,如果找不到,就要按我上面说的去查一些关键点了。</SPAN></P>
<P><SPAN style="FONT-SIZE: 18pt">第二步
开始进入驱动程序设计大多数设备驱动程序也无非这几步:打开设备,设备初始化,设备读写,关闭设备。有些还要有中断服务程序在里面。驱动设计可以有两种方法,一种是自己做,windows系统下的驱动用的最多的也就是DDK,driverstudio,
windriver这几种工具,其中DDK的效率最高,但是写起来也是难度最大的,绝对是高手才会采用的方法。多数人使用driverstudio和windriver,这两种工具编写出来的程序也称之为WDM(windows
device
module)程序。DDK应该是最底层的windows驱动开发工具,后两种是集成开发工具。打个比方,如果DDK相当于C语言的话,driverstudio可以类比于VC++,而windriver则可以类比于VB,从这个类比中,也可以看出它们的开发难度和执行效率的对比。后两种集成开发方法都可以先把卡插到PCI槽中,先找到设备,然后根据设备生成一个驱动程序的框架,然后我们可以修改相应的部分以完成我们最后的驱动程序。</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">最后一步就是写测试程序了,因为要测试我们的卡能否进行正常读写,至少要有一个简单的应用程序来协助,我们可以由驱动程序做一些API(application
program
interface,即应用程序接口)出来,然后调用这些API写测试程序。当然最终的目的还是针对我们具体的应用写出完善的应用程序,测试程序其实也就是最终应用程序的简化版。</SPAN></P>
<P><SPAN
style="FONT-SIZE: 18pt">以上这些是笔者通过自身的设计经历及体会写的一些东西,不足之处是其中对驱动程序的设计和配置数据的探讨较少,以后有时间会陆续写相关的东西出来,如果各位朋友有好的设计经验和建议,欢迎多多交流,共同进步。</SPAN></P></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<DIV class=footer><A
href="http://blog.21ic.com/user1/4082/archives/2007/37873.html#">阅读全文<SPAN
id=ob_logreaded></SPAN></A> | <A
href="http://blog.21ic.com/user1/4082/archives/2007/37873.html#cmt">回复(0)</A>
| <A href="http://blog.21ic.com/showtb.asp?id=37873"
target=_blank>引用通告<SPAN id=ob_tbnum></SPAN></A> | <A
href="http://blog.21ic.com/user_post.asp?logid=37873"
target=_blank>编辑</A></DIV>
<DIV id=blogaddon>
<LI>标签:<SPAN><A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -