gpt4 book ai didi

c++ - 如何设置IDE ATA Controller 的PIO周期时序?

转载 作者:可可西里 更新时间:2023-11-01 10:37:52 24 4
gpt4 key购买 nike

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

最佳答案

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

因此您可以尝试将 0x33 放入此寄存器并查看 I/O 是否加速 - 如果加速,则您有一个处理此约定的 Controller 。

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

0x-0 t恢复4个时钟0x-1 tRecovery 3 个时钟0x-2 tRecovery 2 个时钟0x-3 t恢复1个时钟

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

关于c++ - 如何设置IDE ATA Controller 的PIO周期时序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14983176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com