2013-02-20 2 views
2

I/O 포트에 액세스하기 위해 직접 작성한 드라이버로 Windows 8 x64에서 PIO 모드로 데이터를 전송할 수 있습니다. 대상 하드 디스크 (ATA 명령 사용)의 전송 모드를 PIO 4로 설정해도 읽기 작업의 전송 속도는 1.2 MB/s를 초과하지 않습니다 (16 MB/s에서 PIO 모드 4에 도달해야 함). 이상하게도 디스크를 PIO 0 또는 1로 설정하더라도 속도는 동일하게 유지됩니다. 이것이 IDE 컨트롤러의주기 시간을 변경해야한다고 생각하게합니다. 하지만 어디? 어떤 포트입니까? 예를 들어, 두 개의 채널이있는 표준 IDE 컨트롤러가 있다고 가정하고, 채널 0, 포트 0x1F0 ~ 0x1F7, 포트 3F6에 대한 대체 상태 레지스터/장치 제어 및 포트 FFA0 ~ FFAF BusMaster에 대해 작업하고 있다고 가정 해 봅시다. PIO 4의 경우 600 ns의 PIO 0 대신 120 ns의 사이클 시간을 사용해야하지만 다른 타이밍을 설정해야하는 위치는 어디입니까? 호스트 타이밍을 설정하면 ATA 사양의 일부가 아니므로이 질문에IDE ATA 컨트롤러의 PIO주기 타이밍을 설정하는 방법은 무엇입니까?

+0

어떻게 측정하나요? 디스크 전송은 매우 폭발적이므로 플래터가 올바른 위치로 돌 때까지 기다려야합니다. 대기 시간을 측정하지 마십시오. –

+0

@HansPassant 은 [링크] (http://en.wikipedia.org/wiki/Programmed_input/output) – Jubba

답변

1

대답은 당신이 당신의 컴퓨터에있는 IDE 컨트롤러의 어떤 종류에 따라 달라집니다. 특정 예를 들어, Intel ICHx 칩 중 하나에서 내장 IDE 포트를 사용하는 경우 IDE 타이밍을 제어하는 ​​레지스터는 컨트롤러와 연관된 PCI 구성 공간의 0x40에서 0x41 오프셋에 있습니다. 다른 여러 제조업체도 같은 목적으로이 같은 레지스터를 채택했습니다.

그래서 당신은이 레지스터에 0x33을 고집 시도하고 I/O가 가속화하면 볼 수 있습니다 - 그것은 않는 경우에, 당신은이 규칙을 처리하는 컨트롤러를 가지고있다.

0x0- IORDY는 0x1- IORDY가 0x2- IORDY가 0x3- IORDY 2 개 클럭

0X-0 tRecovery 4 클록 0X -1- tRecovery 샘플링 3 클럭으로 샘플링 4 클록 샘플링 5 개 클럭에서 샘플링 3 클럭 0x-2 복구 2 클럭 0x-3 복구 1 클럭

실제로 0x33을 사용하면 모든 최신 드라이브에서 작동합니다.

+0

감사합니다, 당신의 대답은 정확에서 테이블에서보세요. 그러나 인텔 Serie 7 칩셋 PCH 설명서에 따르면 레지스터가 실제로 하드웨어에 아무런 영향을 미치지 않고 소프트웨어 호환성 만 위해 R/W가 유지되는 최신 인텔 PCH (ICH는 구세대)에서 발견되었습니다. – Jubba

관련 문제