하드 드라이브의 실린더를 처리하고 싶지만 IDE 인터페이스의 핀아웃에 대한 좋은 설명서를 찾을 수 없습니다. 누구든지 그렇게하는 법을 알고 있습니까?
디스크에서 아무 것도 읽거나 쓰지 않고 실린더를 통해 팔을 움직 이기만하면됩니다. 인터페이스에서 일부 전선을 연결하고 신호를 보내어이를 수행하려고합니다.
하드 드라이브의 실린더를 처리하고 싶지만 IDE 인터페이스의 핀아웃에 대한 좋은 설명서를 찾을 수 없습니다. 누구든지 그렇게하는 법을 알고 있습니까?
디스크에서 아무 것도 읽거나 쓰지 않고 실린더를 통해 팔을 움직 이기만하면됩니다. 인터페이스에서 일부 전선을 연결하고 신호를 보내어이를 수행하려고합니다.
답변:
내 동료는 음악을 만들기 위해 낡은 플로피 드라이브의 스테퍼 모터를 사용하는 해킹으로 놀고있었습니다. 매혹적이었습니다.
플로피에있는 모터에 액세스하는 기본 사항을 찾았습니다. http://www.epanorama.net/circuits/diskstepper.html
그러나 IDE 스타일 드라이브에서 유사한 직접 모터 액세스가 가능하지는 않습니다. 현대 (포스트 MFM) 하드 드라이브는 가장 낮은 수준의 API 호출에서도 실제 하드웨어 제어를 심각하게 추상화했습니다. 나는 당신이 무엇을하고 싶은지는 가능할지 모르지만, grc.com에서 Steve Gibson에게 이메일을 보낼 수는 있습니다.
예를 들어 흥미로운 것을 찾을 수 있습니다. ...에서 의회의 예술 : 제 13 장
수행원 13.2.5 INT 13h - 저수준 디스크 서비스 당신은 생각할 수 있습니다. int 13h
int 13h 기능은 PC 프로그램에 여러 가지 저수준 디스크 서비스를 제공합니다 : 디스켓 시스템 재설정, 디스켓 상태 가져 오기, 디스켓 섹터 읽기, 디스켓 섹터 쓰기, 디스켓 섹터 확인 및 디스켓 트랙 포맷 등.
섹션에서 일부 공통 디스크 서브 시스템 BIOS 호출 :
AH = 0Ch
입력 매개 변수 : 섹터가 필요하지 않다는 것을 제외하고는 위의 (4)와 동일
출력 매개 변수 : 위의 (4)와 동일 디스크 헤드를 디스크의 지정된 트랙으로 보냅니다.
기술: 디스크 헤드를 디스크의 지정된 트랙으로 보냅니다.
그것은 IDE 핀아웃에 대한 우려는 ... 이것은 Google 검색에서 나온 첫 번째 이미지입니다 "IDE PINOUT" :

IDE (실제로는 병렬 ATA) 인터페이스는 Wikipedia 기사 ( "Parallel ATA")에 잘 설명되어 있습니다. 거기에서 실제 사양에 대한 링크를 찾을 수 있습니다. 이전 버전의 사양은 모두 무료로 다운로드 할 수 있습니다 (또는 내가 마지막으로 확인한 시간).
그러나 DigitalSorceress는 정확합니다. 커넥터에 단순히 팔을 움직이기 위해 드라이브에 알리는 핀이 없습니다. (심지어 플로피 드라이브 인터페이스조차 쉽지 않습니다.) IDE 드라이브는 원래 IBM PC AT의 16 비트 ISA 버스에 직접 연결되도록 설계되었습니다. 이 드라이브는 CPU에서 처리 할 수있는 여러 I / O "포트"를 디코딩합니다. 드라이브는 이것을 "레지스터"로 해석합니다. 명령에 대한 매개 변수로 다양한 레지스터를로드 한 다음 명령을 명령 레지스터에 기록합니다. (당신은 IDE 버스의 프로토콜을 IDE 드라이브의 핀으로 말하면된다.) 그런 다음 같은 레지스터 중 일부를 다시 읽음으로써 상태를 점검한다.
레지스터 중 두 개는 실린더 번호를 지정하지만 실린더 번호를 클럭킹하는 것만으로는 충분하지 않으며 핀에 전압을 가하는 문제만으로는 실린더 번호를 클로킹하지 않습니다.
Arduino 나 다른 드라이브에 드라이브를 장착 할 생각이라면 (충분한 핀을 얻으려면 메가와 같은 것이되어야한다고 생각합니다), 상당한 양의 프로그래밍으로 머리를 움직일 수 있습니다. 이 경우 PATA 프로토콜을 구현할뿐만 아니라 코드에서 ISA 프로토콜을 실행하게됩니다. 그건 굉장히 복잡하지는 않지만 모두 합쳐져서 Arduino가 버스 타이밍 요구 사항을 충족시킬만큼 빠르지는 모르겠다.
드라이브를 구형 PC에 연결하는 것이 훨씬 쉽습니다. 그런 다음 Hastur가 제안한대로 BIOS에서 INT 함수를 호출하여 디스크의 여러 블록에 액세스 할 수있는 작은 어셈블리 코드를 작성할 수 있습니다.
또는 PATA-to-USB 어댑터에 연결하여 최신 PC에서 실행할 수도 있습니다. 포맷되지 않은 하드 드라이브 (즉, 인식 된 파일 시스템이없는 하드 드라이브)와 통신하는 프로그램을 작성하는 것은 어렵지 않습니다.
또 다른 문제는 더 이상 실린더 / 헤드 / 섹터별로 하드 드라이브를 다루지 않는다는 것입니다. 논리적 블록 주소 인 LBA 만 사용합니다. 이것들은 0에서 시작하여 n-1까지 선형 적으로 이동합니다. 드라이브는 C / H / S 위치로 매핑되는 방법에 대해 걱정합니다. 현대 드라이브에서는 트랙 당 섹터 수가 외부 실린더에서 내부로 바뀌기 때문에이 매핑은 간단하지 않습니다. 현대 드라이브가 C / H / S 주소 지정을 더 이상 할 수 있는지 솔직히 알지 못합니다. 물론, 드라이브에 일련의 증가하는 LBA를 보내면 팔이 지금 움직이고 실린더 경계를 넘을 때 이동합니다.