我在 PXI 机箱中安装了一张 Compact PCI 卡;它有 2 个 BAR 内存,应该可以通过 National Instruments NiVisa 操作访问。我在 Windows 7 启动过程中更改卡上的命令寄存器时遇到了麻烦,导致卡的内存条无法访问。我运行了总线分析器,发现 BIOS 运行后,配置空间的命令寄存器被设置为理想值 (0x0197)。
我希望这个值在 Windows 启动过程中保持不变。使用 Windows XP 操作系统时,它确实保持不变,但在运行 Windows 7 时则不然。我设置了一台双启动计算机,其中装有 Windows XP 和 Windows 7,以确保在比较过程中所有硬件都相同。在 Windows 7 启动过程之后,该值为 0x0194。
我能够将命令寄存器设置为 0x197,以便从我用于与 PXI 卡通信的程序中以我想要的方式获取最后两位,这使我能够根据需要使用该卡,但这不是一个稳定的解决方案。在启动新的通信会话(关闭旧会话后)时,我经常收到错误,即 National Instruments 库无法执行内存分配。
- 有没有办法可以阻止 Windows 7 配置 PXI 卡?
BIOS 完成后,它似乎已经是我想要的样子了。看来 Windows CE 禁用了卡配置NoConfig 注册表标志。我找不到适用于 Windows 7 或 Windows XP 的方法。
Windows XP 也会尝试重新配置卡的配置空间,但会使其处于可用状态。可选地,因为它会增加我的理解,但可能与解决我的问题无关,我感兴趣的是:
- Windows 7 重新配置与 Windows XP 相比,在该卡上得到的结果有何不同?
答案1
欢迎来到 21 世纪。您正在运行即插即用操作系统。
你不能随意将设备内存和 I/O 寄存器映射到内存和 I/O 空间中,这是确切地手动启用 PCI 设备上的内存和 I/O 访问将产生什么效果。映射设备资源必须与操作系统的即插即用管理器一起完成。即插即用管理器会跟踪哪些内存和 I/O 地址范围被谁使用,并确保不会因(比如说)多个设备映射相同的地址范围而发生冲突。
Windows 正在禁用您设备的内存和 I/O 周期,因为无法将内存和 I/O 资源作为即插即用总线枚举和资源仲裁的一部分分配给您的设备。(我不认为 Windows 决定关闭您的设备,因为它一直启用总线控制。)要么是您的机器的物理内存映射中没有空间容纳设备要映射的资源,要么是无法使用分配的资源配置启动您的设备。(我不认为您的设备只是坏了,无法在 PCI 配置空间中正确报告其资源需求。)
后者的可能性更大。通常的原因是 PCI 设备没有设备驱动程序。如果没有设备驱动程序来驱动设备,PaP 管理器就无法为您的设备分配资源配置并将其置于“已启动”状态。这需要(功能)设备驱动程序来响应适当的 PaP IORP。在这种情况下:您的设备需要设备驱动程序。
设备管理器将告诉您设备在这方面发生的情况。