Я могу передавать данные в режиме PIO под Windows 8 x64 с драйвером, который я сам написал для доступа к портам ввода / вывода. Даже если я установлю режим передачи целевого жесткого диска (с помощью команд ATA) на PIO 4, скорость передачи (операции чтения) не превысит 1,2 МБ / с (из ~ 16 МБ / с в режиме PIO). 4 должно дойти). Странно то, что даже если я установлю диск на PIO 0 или 1, скорость останется прежней.
Это то, что заставляет меня думать, что я должен изменить время цикла контроллера IDE. Но где? Какой порт (ы)? Допустим, у меня есть стандартный контроллер IDE с двумя каналами, и я работаю на канале 0, порты от 0x1F0 до 0x1F7 для регистров ATA, порт 3F6 для альтернативного регистра состояния / управления устройством и порты с FFA0 до FFAF для BusMaster. Я знаю, что для PIO 4 я должен использовать время цикла 120 нс вместо 600 нс PIO 0, но где я должен устанавливать разные тайминги?
Ответ на этот вопрос зависит от того, какой контроллер IDE у вас есть на вашем компьютере, потому что установка времени хоста не является частью спецификации ATA. Для конкретного примера, если вы используете встроенные порты IDE на одном из чипов Intel ICHx, то регистр, который управляет синхронизацией IDE, имеет смещения от 0x40 до 0x41 в пространстве конфигурации PCI, связанном с контроллером. Несколько других производителей также приняли этот же регистр для той же цели.
Таким образом, вы можете попробовать вставить 0x33 в этот регистр и посмотреть, ускоряется ли ввод-вывод — если это произойдет, то у вас есть контроллер, который обрабатывает это соглашение.
0x0 — IORDY, отобранный за 5 часов
0x1 — IORDY, сэмплированный при 4 часах
0x2 — IORDY, сэмплированный за 3 часа
0x3 — IORDY, сэмплированный за 2 часа
0x-0 время восстановления 4 часа
0x-1 время восстановления 3 часа
0x-2 время восстановления 2 часа
0x-3 часов восстановления 1
На практике использование 0x33 должно работать с любым современным приводом.
Других решений пока нет …