我可以使用自己编写的驱动程序在Windows 8 x64下以PIO模式传输数据,以访问I/O端口。即使我将目标硬盘的传输模式(使用ATA命令)设置为PIO 4,(读取操作的)传输速度也不会超过1.2 MB/s(该PIO模式约为16 MB/s) 4应该达到)。奇怪的是,即使将磁盘设置为PIO 0或1,速度仍然保持不变。
这就是让我认为必须更改IDE Controller 循环时间的原因。但是哪里?哪个端口?假设我有一个带有两个 channel 的标准IDE Controller ,并且正在 channel 0上工作,ATA寄存器的端口0x1F0至0x1F7,备用状态寄存器/设备控制的端口3F6,BusMaster的端口FFA0至FFAF。我知道对于PIO 4,我应该使用120 ns的周期时间,而不是PIO 0的600 ns,但是,我应该在哪里设置不同的时序?
最佳答案
这个问题的答案取决于您的计算机中使用哪种IDE Controller ,因为设置主机时序不是ATA规范的一部分。对于特定示例,如果您使用英特尔ICHx芯片之一上的内置IDE端口,则控制IDE时序的寄存器位于与 Controller 关联的PCI配置空间中的偏移量0x40至0x41。其他几个制造商也出于相同目的采用了相同的寄存器。
因此,您可以尝试将0x33粘贴到该寄存器中,以查看I/O是否加速-如果可以,则您有一个处理该约定的 Controller 。
0x0- 5个时钟采样的IORDY
0x1- IORDY以4个时钟采样
0x2- IORDY以3个时钟采样
0x3- IORDY以2个时钟采样
0x-0 t恢复4个时钟
0x-1 t恢复3个时钟
0x-2 tRecovery 2个时钟
0x-3 tRecovery 1个时钟
实际上,使用0x33应该适用于任何现代驱动器。