IDE Interface

대문 / 프로그래밍 / IDE Interface

IDE Interface

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)
Retrieved from https://www.minzkn.com:443/moniwiki/wiki.php/IDEInterface
last modified 2024-05-17 23:26:16