IDE Interface
- 작성자
- 고친과정
1999년 어느날 : 처음씀
1.1. IDE register
- Data register (1F0H, read/write)
- Error register (1F1H, read)
bit 7 6 5 4 3 2 1 0 의미 BBK UNC MC IDNF MCR ABRT TK0NF AMNF BBK (Bad block detected) : ATA1에서는 요청한 섹터가 오류블럭인경우 설정되지만 ATA2에서는 예약으로 되어 있다.
UNC (Uncorrectable data error) : Data가 잘못된것이 발견되었을때 설정된다. ECC검사시 설정될수 있다. 이 비트가 설정되면 Data를 신뢰할수 없다.
MC (Media change) : 매체가 변경(교체)되었을 경우 설정된다.
IDNF (ID not found) : Sector를 찾을수 없을때 설정되며 아마도 심한 회손이 되는 경우에 설정되는것을 확인할수 있다.
MCR (Media change requested) : 외부로부터 매체를 교체하려는 신호를 수신했을때 설정된다. Eject버튼같은 경우가 이에 해당할수 있다.
ABRT (Aborted command) : Command수행중에 오류로 인하여 Interrupt 되어 작업이 중지되었다.
TK0NF (Track zero not found) : Track 0번을 찾을수 없을때 설정된다. 이 경우가 발생하면 매우 치명적인 손상을 입은 경우일것이다.
AMNF (Address mark not found) : 요청한 Sector의 주소를 찾을수 없다.
- Feature register (1F1H, write)
- Sector count register (1F2H, read/write)
0은 256으로 인식한다. (0개의 count는 의미가 없으므로)
- Sector number register (1F3H, read/write)
LBA mode인 경우 LBA주소의 0~7bit
- Cylinder number register (1F4H~1F5H, read/write)
1F4H : Cylinder번호중에서 하위 바이트
1F5H : Cylinder번호중에서 상위 바이트
LBA mode인 경우 LBA주소중에서 1F4H에는 8~15bit, 1F5H에는 16~23bit
- Drive/Head number register (1F6H, read/write)
bit 7 6 5 4 3 2 1 0 의미 1 LBA 1 DEV H3 H2 H1 H0 LBA (LBA mode) : 0인 경우 Cylinder/Head/Sector 방식, 1인 경우 LBA주소방식
DEV (Device) : Device번호 (0은 Master, 1은 Slave)
H3~0 (Head number) : Head번호 (LBA mode인 경우 LBA주소중에서 24~27bit)
- Status register (1F7H, read)
bit 7 6 5 4 3 2 1 0 의미 BSY DRDY DF DSC DRQ CORR IDX ERR BSY (Busy) : 이 bit가 설정되면 명령을 처리중에 있음을 의미한다.
DRDY (Drive ready) : 드라이브가 명령을 받을 준비가 되었을대 설정된다.
DF (Drive fault) : 드라이브에 에러가 발견되면 설정된다. (ATA1에서는 Drive가 쓰기에러상태일때를 나타낸다.)
DSC (Drive seek complete) : Head가 요청한 Cylinder위치에 놓였을때 설정된다.
DRQ (Date request) : 드라이브로부터 Data가 요청되는 경우 설정된다.
CORR (Corrected data) : 읽기오류가 발생했을때 설정되며 이 경우 interrupt 되지 않고 계속 수행하는 상태인 경우이다.
IDX (Index) : Index mark위로 head가 통과할때 설정된다.
ERR (Error) : 명령수행시 에러가 발생하면 설정되어 에러를 나타낸다. 어떤 에러상태인지는 추가적인 정보로 제공되는 bit들을 확인해야 한다.
- Command register (1F7H, write)
- Alternate status register (3F6H, read)
- Device control register (3F6H, write)
bit 7 6 5 4 3 2 1 0 의미 N/A N/A N/A N/A 1 SRST !IEN 0 SRST (Software reset) : 적정시간동안 설정하고 있으면 재설정상태로 돌입하며 0으로 변경하면 기동을 하게 된다.
!IEN (Interrupt enable) : 0이면 interrupt를 허용하게 된다.
- Drive address register (3F7H, read)
bit 7 6 5 4 3 2 1 0 의미 N/A !WTG !H3 !H2 !H1 !H0 !D1 !D0 !WTG (Write gate) : 선택된 드라이브가 쓰기동작중일때는 0으로 설정된다.
!H3~0 (Invert Head number) : 현재 선택된 드라이브의 Head번호가 반전되어 설정된다.
!D1 (Slave drive) : Slave drive가 선택되면 0이 설정된다.
!D0 (Master drive) : Master drive가 선택되면 0이 설정된다.
1.2. 예제
1.3. 참고자료
- Samsung HDD datasheet (Spinpoint P80VEM Product Manual Rev01.pdf)
- Hitachi HDD datasheet (5K250_DS.pdf, Desktop 250GB 7200 rpm Data Sheet.pdf, Desktop 250GB Specification.pdf, P7K500_DS.pdf, Travelstar 4200rpm Data Sheet.pdf, Travelstar 4200rpm Specification.pdf, ...)
- Seagate HDD datasheet (N2ProductManual(2.5인치, 4200RPM).pdf, Seagate HDD Disk.xls. RoHS DoC Tonka v4.pdf, ...)
- Western Digital HDD datasheet (WD KR model name1_Apr06.pdf)
- SCSI & IDE interface second edition (Friedhelm Schmidt, ADDISON WESLEY)