2

我可以使用我自己编写的驱动程序在 Windows 8 x64 下以 PIO 模式传输数据以访问 I/O 端口。即使我将目标硬盘的传输模式(使用 ATA 命令)设置为 PIO 4,(读取操作的)传输速度也不会超过 1.2 MB/s(在 PIO 模式下约为 16 MB/s 4 应该达到)。奇怪的是,即使我将磁盘设置为 PIO 0 或 1,速度仍然保持不变。这就是让我认为我必须更改 IDE 控制器循环时间的原因。但是哪里?哪个端口?假设我有一个标准的 IDE 控制器,有两个通道,我正在使用通道 0,端口 0x1F0 到 0x1F7 用于 ATA 寄存器,端口 3F6 用于备用状态寄存器/设备控制,端口 FFA0 到 FFAF 用于 BusMaster。我知道对于 PIO 4,我应该使用 120 ns 的循环时间而不是 PIO 0 的 600 ns,但是,

4

1 回答 1

1

这个问题的答案取决于您的机器中的 IDE 控制器类型,因为设置主机时序不是 ATA 规范的一部分。举一个具体的例子,如果您使用 Intel ICHx 芯片之一上的内置 IDE 端口,则控制 IDE 时序的寄存器位于与控制器关联的 PCI 配置空间中的偏移量 0x40 到 0x41。其他几家制造商也出于相同目的采用了相同的寄存器。

因此,您可以尝试将 0x33 粘贴到此寄存器中并查看 I/O 是否加速 - 如果是,那么您有一个控制器可以处理此约定。

0x0- IORDY 在 5 个时钟采样 0x1- IORDY 在 4 个时钟采样 0x2- IORDY 在 3 个时钟采样 0x3- IORDY 在 2 个时钟采样

0x-0 tRecovery 4 个时钟 0x-1 tRecovery 3 个时钟 0x-2 tRecovery 2 个时钟 0x-3 tRecovery 1 个时钟

实际上,使用 0x33 应该适用于任何现代驱动器。

于 2013-04-06T12:38:06.947 回答