这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 致信yaopg师兄,多块pci板卡识别的问题

共16条 1/2 1 2 跳转至

致信yaopg师兄,多块pci板卡识别的问题

菜鸟
2008-04-08 08:20:47     打赏
yaopg师兄:

                       您好!您还记得去年的这个时候,我有很多问题不会,向您请教。现在我做了5块板卡,同时按照顺序插入机箱,驱动程序已经能够找到并且能够读写操作,只是不能改变板卡的插入顺序,否则需要修改驱动程序。也就是说我的驱动程序不能识别板卡两次不同的插入槽。这个问题应该怎样解决?



关键词: 致信     yaopg     师兄     多块     板卡     别的     问题    

高工
2008-04-08 09:10:36     打赏
2楼
yaopg同志果然是拥趸很多啊~~

已经将链接发给yaopg大拿了~~~楼主等着回复吧~~哈哈

菜鸟
2008-04-08 09:22:50     打赏
3楼

 啊,最近在出差比较忙。
板卡插入机箱,通过CPU(PCI总线的中央资源)在系统初始化阶段(POST)为各个PCI设备(包括插入的板卡)进行资源分配(IO/MEM/中断),资源分配完毕后,PCI设备的驱动程序进行PCI总线搜索,看是否有符合本驱动的板卡存在(根据PCI Vendor Id和Device Id,以及Revison Id),找到设备后驱动程序则根据板卡的硬件设计情况进行相应的寄存器初始化和中断挂载工作。
所以有几点需要注意:
因为PCI总线的资源分配是在POST过程中动态分配的,根据系统配置不同,各板卡所获得的IO/MEM/中断资源会不相同,即所谓PnP,即插即用。
一个驱动程序应该是对应一种PCI硬件设备(板卡)的,不同的PCI设备(板卡)应该通过PCI Vendor Id和Device Id来区分。不管你是采用的现成桥片还是可编程逻辑实现的PCI桥接,修改和设置这些只读寄存器都好实现。
驱动程序能够确定的有:有几个PCI设备是本驱动程序可以驱动的(在总线上找到几个各Id符合的PCI设备),这些PCI设备的资源(包括IO,MEM地址,IRQ,以及这些设备所在的总线位置--PCI总线x,Device y,Function z)。
资源分配不是固定的,但是,一个槽位对应的PCI总线位置是固定的。
PCI总线搜索通常是按深度优先的顺序搜索。
如果有同一种型号的PCI设备存在于PCI总线上,那么驱动应依次进行初始化,多个板卡实例采用同一驱动,但是资源不同,这时候,通常驱动程序对各个板卡的区分仅仅是其总线位置,在应用中就要特别注意不能混淆各个板卡,最好是在应用程序中做总线位置的核对-因为总线位置是主板布线布死了的,以免搞错。


菜鸟
2008-04-08 20:37:17     打赏
4楼
yaopg师兄:

           您好!
           今天下午看了你的回复,我基本上明白你的意思,不过我现在还没有找到一个合适的解决办法。我的情况是:
           1.  这几块板卡使用的是plx9052。
           2.  我使用的是vxworks操作系统。驱动程序也使其下的驱动程序。
           3.  我想实现不修改程序的情况下,允许这几块板卡在任意插槽内使用,而不是固定插槽。


         我本来想使用改变配置头文件,将deviceid改为每块板卡的唯一识别标示。例如:第一块:9050;第二块:9051……
         这样驱动程序不管板卡插在任何地方,我都能准确的找到这些板卡,并将数据发送给板卡。


                                            祝:工作顺利!

                                                                                                               小弟:phpboy

菜鸟
2008-04-09 18:55:32     打赏
5楼

烦请版主将该问题发给yaopg师兄,给予解答。多谢多谢!


菜鸟
2008-04-11 08:26:30     打赏
6楼

期望大家能帮我解决该问题……
谢谢!


菜鸟
2008-04-13 08:15:28     打赏
7楼
期望大家能帮我解决该问题!多谢多谢!

菜鸟
2008-04-13 11:56:50     打赏
8楼

你好:
我也是被这个问题困扰,我做的是PC机上Windows下的PCI控制卡,用DriverStudio开发的驱动。不知道跟你的VxWorks下的会不会有差别。

使用DriverStudio开发工具生成的驱动软件包里面包括一个测试程序,可以仿照它开发应用程序的方法,你在连接硬件时,首先找的是通过GUID来找到这个驱动支持的设备类,当然就包括这一类的所有板卡,比如你的Vendor ID、device ID等等在EEPROM中如果使用一样的,自然这就是同一个类的设备,所以它是首先取得设备,然后再通过具体的实例好INSTANCE来实现对不同的具体某一个设备的识别的。
{HANDLE hDev;
 CDeviceInterfaceClass DevClass(pClassGuid, pError);取得设备类
 CDeviceInterface DevInterface(&DevClass, instance, pError);取得具体的设备
 hDev = CreateFile(....);//取得具体的设备句柄
........
}
但是对于yaopg师兄回答的,主板上的顺序问题,我不知道,但是有个公司的控制卡可以参考,它有提到如果使用多卡怎么办的问题,按它的说法,应该是靠近电源的PCI槽一般被定义为先初始化的槽。

另:如果每块卡改一个DeviceID是不可取的,因为我们最终给客户的时候不能每张卡都是一个不同的deviceID,这样虽然时样上是ok了。用的人就要命了,当然为某个厂家特制是可以这样来的,而且更好:》

以上是我的浅见,没有VXworks的知识,希望不会误导人:》
多多交流








6030 电机控制卡
使用手册---北京东方嘉宏机电技术有限责任公司


菜鸟
2008-04-15 10:34:33     打赏
9楼

dingbinyun师兄:
                            
                     我做了一下实验,我上面提到的方法正如dingbinyun所说:是不可取的。该问题我目前还没有想到解决的办法,正期待yaopg师兄以及各位高手给予指点。
                    再次描述一下我的需求:
                    1.  这几块板卡使用的是plx9052。
                    2.  我使用的是vxworks操作系统。驱动程序也使其下的驱动程序。
                    3.  我想实现不修改程序的情况下,允许这几块板卡在任意插槽内使用,而不是固定插槽。


              因为每次插卡的位置不同,就会造成同一块板卡的deviceid不一样,这样当上位机使用板卡时,就会将数据送给上次(板卡更换插槽前)使用该devcieid的板卡,会造成辨别不清使用哪块板卡。而导致发送数据到错误板卡。致使一些错误发生,请问该问题应如何解决?


菜鸟
2008-04-15 10:50:37     打赏
10楼
dingbinyun师兄:

                           以上的问题,您是怎样解决的?我刚才下载了您提供的资料,准备回去看看。呵呵。


                       天天快乐!


共16条 1/2 1 2 跳转至

回复

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