如何设置IDE ATA控制器的PIO周期定时

How to set the PIO cycle timing of an IDE ATA controller?

本文关键字:控制器 PIO 周期 定时 ATA IDE 何设置 设置      更新时间:2023-10-16

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

这个问题的答案取决于您的机器中有哪种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 t恢复4个时钟0x-1 t恢复3个时钟0x-2 t恢复2个时钟0x-3 t恢复1时钟

在实践中,使用0x33应该可以与任何现代驱动器配合使用。