2013-02-20 27 views
2

我可以在Windows 8 x64下以PIO模式傳輸數據,並使用我自己寫入的驅動程序訪問I/O端口。即使我將目標硬盤的傳輸模式(使用ATA命令)設置爲PIO 4,傳輸速度(讀取操作的速度)也不會超過1.2 MB/s(超出PIO模式的〜16 MB/s 4應達到)。奇怪的是,即使我將磁盤設置爲PIO 0或1,速度仍然相同。 這就是我認爲必須改變IDE控制器週期時間的原因。但是哪裏?哪個港口?比方說,我有一個標準的IDE控制器,有兩個通道,我正在處理通道0,ATA寄存器的端口0x1F0到0x1F7,備用狀態寄存器/設備控制的端口3F6以及BusMaster的端口FFA0到FFAF。我知道對於PIO 4,我應該使用120 ns的週期時間,而不是PIO 0的600 ns,但是,我應該在哪裏設置不同的時序?如何設置IDE ATA控制器的PIO週期時序?

+0

你如何衡量這一點?磁盤傳輸非常突然,您必須等到磁盤旋轉到正確的位置。不要測量延遲。 – 2013-02-20 15:20:36

+0

@HansPassant 看看[鏈接]表格(http://en.wikipedia.org/wiki/Programmed_input/output) – Jubba 2013-02-20 15:29:24

回答

1

這個問題的答案取決於你的機器有什麼樣的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 tRecovery 4個時鐘 0X-1 tRecovery採樣採樣採樣採樣3時鐘 0x-2 t恢復2時鐘 0x-3 t恢復1時鐘

實際上,使用0x33應該適用於任何現代驅動器。

+0

謝謝,你的回答是正確的。然而,我發現在現代英特爾PCH(ICH是老一代)中,按照英特爾Serie 7芯片組PCH文檔進行註冊,實際上對硬件沒有任何影響,並且僅在軟件兼容性方面保持R/W。 – Jubba 2013-04-06 13:08:45