这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » pci驱动程序的问题

共11条 1/2 1 2 跳转至

pci驱动程序的问题

菜鸟
2007-06-11 23:55:44     打赏

q

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:23:07编辑过][/color][/align]



关键词: 驱动程序     问题    

菜鸟
2007-06-12 04:53:00     打赏
2楼

啊, 你是写给谁的呀?俺可不敢冒充你师兄呀:)

PCI卡千差万别,必须明确你的卡大概做啥用的,起码要知道其资源分配情况,再开始做驱动。如果必要的话,我可以根据你的卡写个模板给你,具体功能你去实现。

多情了:)


菜鸟
2007-06-13 00:56:00     打赏
3楼

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:51:38编辑过][/color][/align]

菜鸟
2007-06-13 00:59:00     打赏
4楼

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:51:56编辑过][/color][/align]

菜鸟
2007-06-13 01:52:00     打赏
5楼

那就比较好做了。。。。如果是Windows,用WinDriver。如果是VxWorks,自己写。。。方面得很。

卡片的资源信息你知道吗?就是寄存器和中断的定义有没有?没有做不成。如果是自己的卡,则没有问题,因为原理图和EEPROM里面可以看出一切。有了资源定义就可以开始写了。如果不是那种需要DMA传输的话,会比较简单,需要DMA传输的就麻烦点。

[align=right][color=#000066][此贴子已经被作者于2007-6-12 19:37:20编辑过][/color][/align]

菜鸟
2007-06-13 04:29:00     打赏
6楼

1

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:38:16编辑过][/color][/align]

菜鸟
2007-06-13 06:35:00     打赏
7楼

当然是你要编写驱动的那块卡的原理图呀。

搞了半天怎么变成CPCI了呢?主机是工控机还是CPCI?

你的卡片是买来的话,就会麻烦些,厂家一般不会提供很详细的信息。。。。自己做的就没有这个问题了。

热插拔与你说的随意插入就识别是两回事情(仅对PCI,CPCI来说吧)。

随意插入就能识别,叫做PCI的PnP特性,这个是与原来的ISA总线相比较的特点。以前的ISA总线设备比较麻烦,需要手动设置资源,比如中断啊,IO地址范围啊什么的,表现出来的效果就是:如果你新插卡要设置资源,卡的位置换了,也要重新设置。而PCI就方便些,随你插哪,都会自动分配资源,这个叫做Plug and Play也就是PnP。

关于热插拔:热插拔是CPCI才有的,PCI可没有,PnP虽然好,但也没有好到说系统带电运行过程中可以插入卡,拔除卡,也就是说PCI总线是必须要关机情况下插卡,拔卡。但是CPCI因为广泛运用到了电信等行业,需要系统宕机时间特别短,所以CPCI在PCI的基础上增加了热插拔规范,也就是实现了可以在开机运行的情况下插拔CPCI板卡。你可以仔细看看CPCI的热插拔规范。

热插拔对CPCI设备来说不是强制的,也就是说:不要求每个符合CPCI规范的板卡都有热插拔能力。

热插拔的实现是需要硬件和软件配合来进行的,通常情况如下(仅对外围卡,大致描述,实际上比这个复杂很多,分了很多步骤,主卡热插拔还要复杂些):

插进去:电气连接的插入通知通过长短针来实现,电气连接刚好OK的时候,插入的板卡要发送一个中断(一般用非屏蔽中断NMI)给系统,系统软件为插入的卡分配资源,并将卡加入系统中加载驱动开始工作。

拔出来:也是通过长短针,会在拔一点点的时候,向系统发一个中断,系统软件收到中断,把板子现在的工作停下来,并释放系统资源。

X86下面的用于控制CPCI的中断设置的一根线,是与另一个东西复用的,要在BIOS下进行正确设置才能起到中断作用。

所以你要编写驱动,如果要包含热插拔的特性的话,必须要仔细看CPCI的热插拔规范,有没有热插拔功能的驱动编写难度是不一样的--不仅仅要实现板卡的功能,还要实现板卡的热插拔控制,连应用程序也要跟着变化--因为不热插拔的情况下应用程序可以认为板卡一直存在,但有热插拔就不能这样想了。

是否实现热插拔需要你自己根据实际应用进行权衡。如果不是那种宕机时间要求特别小的应用,又或者你的CPU启动速度非常快(x86的不行,BOIS的时间就够长。。。。,但其它的如PPC,MPIS,SPARC就可以),就没有必要做热插拔。

另外,不知道你的BSP是不是自己写的,如果是,最好在开始做驱动之前做一下中断路由测试,也就是检查一下外围卡寄存器的intLine值是不是真的对应到系统相应的IRQ。。。。检查一下PCI的IRQ分配是不是正确的,如果不正确,搞起来会比较麻烦(但通常如果不是特别怪,默认的BSP模板是对的,,,就是有些卡就是不对,,每个厂家不一样)。


菜鸟
2007-06-13 18:25:00     打赏
8楼

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:52:41编辑过][/color][/align]

菜鸟
2007-06-13 18:38:00     打赏
9楼

[align=right][color=#000066][此贴子已经被作者于2007-6-13 16:51:08编辑过][/color][/align]

菜鸟
2007-06-13 18:49:00     打赏
10楼

板卡是你自己做的吗?如果是:你肯定知道9052的本地(local)总线是如何与IDT71342连接的了--片选,地址,位宽等等。如果知道就可以把本地总线的地址空间确认,确认后根据这个地址编写EEPROM的内容,完成本地总线到PCI基址的映射关系。这个要仔仔细细看9052的手册,借助plx提供的工具来做。确定BAR类型,大小范围,位宽限制等。搞完之后,就可以通过PCI总线访问你的DPRAM了。使用了中断吗?没有就不用管了,用了的话就得配中断,也是EEPROM。

IDT71342的访问,最好让单片机等,不让PCI9052等,等了估计麻烦。又或者你做分页。数据量不大建议使用IO映射,免得各种板卡驱动不一样还麻烦(x86或者部分其它板卡还得加个MMU条目,大多数别的主板不用)。

关于识别:你就找0x10b5,0x9052的设备即可,或者你在EEPROM里面该掉它,变成你自己的。。。不过::::该Vendor ID和Device ID要小心,用Plx的那个工具,一旦你改了这两个,就改不回来了,因为它不再认了。我根据9030的做了个在VxWorks下可以读写EEPROM的程序,等你做到一定阶段,我可以提供给你看看,但现在还不需要。


共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]