致信yaopg师兄,多块pci板卡识别的问题
啊,最近在出差比较忙。
板卡插入机箱,通过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总线上,那么驱动应依次进行初始化,多个板卡实例采用同一驱动,但是资源不同,这时候,通常驱动程序对各个板卡的区分仅仅是其总线位置,在应用中就要特别注意不能混淆各个板卡,最好是在应用程序中做总线位置的核对-因为总线位置是主板布线布死了的,以免搞错。
您好!
今天下午看了你的回复,我基本上明白你的意思,不过我现在还没有找到一个合适的解决办法。我的情况是:
1. 这几块板卡使用的是plx9052。
2. 我使用的是vxworks操作系统。驱动程序也使其下的驱动程序。
3. 我想实现不修改程序的情况下,允许这几块板卡在任意插槽内使用,而不是固定插槽。
我本来想使用改变配置头文件,将deviceid改为每块板卡的唯一识别标示。例如:第一块:9050;第二块:9051……
这样驱动程序不管板卡插在任何地方,我都能准确的找到这些板卡,并将数据发送给板卡。
祝:工作顺利!
小弟:phpboy
你好:
我也是被这个问题困扰,我做的是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 电机控制卡
使用手册---北京东方嘉宏机电技术有限责任公司
致dingbinyun师兄:
我做了一下实验,我上面提到的方法正如dingbinyun所说:是不可取的。该问题我目前还没有想到解决的办法,正期待yaopg师兄以及各位高手给予指点。
再次描述一下我的需求:
1. 这几块板卡使用的是plx9052。
2. 我使用的是vxworks操作系统。驱动程序也使其下的驱动程序。
3. 我想实现不修改程序的情况下,允许这几块板卡在任意插槽内使用,而不是固定插槽。
因为每次插卡的位置不同,就会造成同一块板卡的deviceid不一样,这样当上位机使用板卡时,就会将数据送给上次(板卡更换插槽前)使用该devcieid的板卡,会造成辨别不清使用哪块板卡。而导致发送数据到错误板卡。致使一些错误发生,请问该问题应如何解决?
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |