rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
阅读:1984回复:4

PCI的地址定义

楼主#
更多 发布于:2002-06-18 13:30
我们公司有一个PCI卡,driver是别人很久以前写的,硬件是我们最近改造的。我们设定的I/O地址是0x278。现在发现了一些问题:

在某些PCI槽里面,可以正确的读取数据,但在别的槽里面就不行。经过研究,发现出错的时候地址已经变成了0x3bc,而在driver里面得到的地址仍然是0x278。

请问,这样的问题是什么原因?怎么搞定?

谢谢各位PCI的高手!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-06-18 13:42
老兄,PCI对其插卡的地址、中断等资源的分配是动态的而不是象ISA卡那样是具体的固定的,这也是PCI卡的优势之一,它可以保证不会与系统其他设备地址冲突。
以你的情况看,似乎是一个扩展的并口卡。一般当系统的0x278(LPT2:)不被占用时,会被分配此地址,而如果该地址已经被系统的其它PnP设备占用,则该地址保留,只能分配其它地址,而0x3bc就是一个最有可能的选择。因为,PC6的发展史上,曾使用该地址。
老的Driver或许是对ISA卡写的?至少是其驱动使用了固定地址,这对于PCI卡是不可取的。一般PCI卡的地址、中断的动态分配决定了我们只能提供向系统查询该卡被分配的资源来得到其地址等,这样写出来的驱动才可能满足任意更换插槽、机器的变化。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-18 15:18
谢谢!
我也是这么想的,但不知道怎么改造那个driver。现在的地址是通过:
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
...
extension->OriginalController.LowPart = PartialDescriptor->u.Port.Start.LowPart;

这样来的。我看了Oney的书,可以用
extension->fMappedPort = (PartialDescriptor->Flags & CM_RESOURCE_PORT_IO) == 0;
if(extension->fMappedPort)
{
extension->nPortBase = (PUCHAR)MmMapIoSpace(portbase, extension->nPorts, MmNonCached);
if(!extension->nPortBase)
return STATUS_NO_MEMORY;
}
else
extension->nPortBase = (PUCHAR)portbase.QuadPart;
得到映射后的地址,不知道是不是你说的真实的地址?最要命的是,每次(PartialDescriptor->Flags & CM_RESOURCE_PORT_IO) == 0都等于FALSE,不知道是不是硬件有问题?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-06-18 15:33
是否硬件有问题可以通过Windriver写一个测试程序来测试。
我不懂得您的源程序。但是,可以通过Windriver来写一个新的Driver,不知道是否可以满足你的要求?可以试一试,估计问题不大!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-19 00:42
不错的想法,等我有空试试看。
多谢!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部