如何设置IDE ATA控制器的PIO周期定时
How to set the PIO cycle timing of an IDE ATA controller?
我可以在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应该可以与任何现代驱动器配合使用。
相关文章:
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- 如何集成 HID USB 控制器?
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 更高效地在微控制器上对C++进行基准测试
- 如何修复 Arduino LED 串控制器的代码?
- 如何在 Windows 中通过 SSL 端口枚举域控制器
- 如何使用 c++ 在命令行中创建一个简单的字符控制器?
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 在虚幻引擎中使用运动控制器组件,C++而不是蓝图
- 哗啦��错误:无法识别任何一组可以驱动指定关节的控制器
- 微控制器的首次 gcc 链接器脚本编译但不运行
- 对控制器类的 WorkerScript 访问
- SDL 2 无法打开控制器,但已识别操纵杆
- 将信号从工作线程类连接到控制器类 - QThreads
- 在OMNet上实现SDN控制器
- SDL2_pollevent() 控制器 dpad 连续保持?
- C++微控制器全局类/辛格尔顿?
- 工作器/控制器多线程和接口类
- 我在微控制器STM32F373发现中点亮LED的问题
- 如何设置IDE ATA控制器的PIO周期定时