Advanced Technology Attachment(アドバンスド テクノロジー アタッチメント、略号: ATA)は、パーソナルコンピュータ (PC) とハードディスク (HDD) 間のインタフェースのひとつである。1989年に制定され、1990年代に主流となっていた。

## 歴史

本節での容量の単位は、一般的な1024をキロ (KBytes) としているので、1000をキロ (KB) とするHDDメーカー(すなわちHDD単体に貼られたラベルの表記)と異なることに注意されたい。

### IDE

PC/ATのハードディスクインタフェースは、当初ST-506、次いでST-506を高速化したESDIやSCSI等が使用されていたが、次第にST-506をインテリジェント化(ドライブとコントローラを統合)した1986年にコンパックとコナー・ペリフェラルが開発したIDE (Integrated Drive Electronics) が大勢を占めるようになった。

その後、各社独自の拡張が行われ、互換性に問題が出てきたため、1989年に各HDDメーカが共通仕様であるATA (AT Attachment interface) を制定し、1994年にANSIでATA-1として規格化された。

IDE HDDのパラメータの制約

|  | HDD側 | BIOS側 | 小さい方 |
| --- | --- | --- | --- |
| シリンダ番号 (C) | 0 - 65535 | 0 - 1023 | 0 - 1023 |
| ヘッド番号 (H) | 0 - 15 | 0 - 254 | 0 - 15 |
| セクタ番号 (S) | 1 - 255 | 1 - 63 | 1 - 63 |
| 最大容量 | 128GB | 7.8GB | 504MB |

IDE HDDには、504Mバイト(512×1024×16×63 = 528,482,304バイト)を超える容量が認識されないという問題があった。これは「504MBの壁」といわれ、1993年頃までに発売されたPCではこの問題がある。HDD側のパラメータとPC/ATのBIOS (INT 13H API) のパラメータのミスマッチに起因する。ただし、504MBの壁は、あくまでIDE HDDとPCのBIOSの組み合わせにより生じる問題であり、HDD側ではもっと大きな容量(理論上の最大値は128GB)のアドレッシングが可能である。すなわち、一般には「504MBを境にEIDE HDDとIDE HDDが分かれる」と思われている場合があるが、実はHDD側にはそのような区別はない。

### EIDE

EIDE (Enhanced IDE) とは、一般にIDE HDDの504MBの壁を超えるための規格として認識されているが、実際は以下のようなさまざまな拡張規格の総称である。ウェスタン・デジタルが提唱した。

- 504MBの壁を超えるための拡張
  - Logical Block Addressing (LBA) の導入
  - CHSトランスレーション(いわゆるLARGEモード)の導入
- ATAPIによるCD-ROMやリムーバブルディスクのサポート
- 転送モードの追加による高速化
- プライマリ/セカンダリポートの標準化による最大4台のデバイスのサポート

504MBの壁は、BIOSのCHS (Cylinder, Head, Sector) をIDEのCHSに直結させていることが原因なので、途中でうまく変換してやることにより回避できる。その手段として、LBAとCHSトランスレーションが導入された。

- LBAは、BIOSからHDDに対するアドレッシングをCHSでなく単一の連番で行う(HDDが対応している必要がある)。
- CHSトランスレーションは、BIOS内部でCHSの変換(たとえばHを2で割るかわりにCを2倍するなど)を行い、CHSの範囲を有効活用する(HDD側で対応することはない)。

なお、LBAはHDD側でCHSレジスタを読み替えることで実現されており、アドレッシング可能な範囲はほとんど変わっていない(28ビット)。すなわち、HDD側ではLBAに対応することでとくに容量上限を増やせるわけではない(厳密には、セクタ番号レジスタに0を指定できるようになるため、若干増える)。

### ATAPI

ATA Packet Interfaceの略。
HDDなどの非ATAPIのATAデバイスでの通信のデータに相当する部分にSCSIと同等のパケット形式のコマンドを発行することにより、ATAコマンドより多くのコマンド種が必要なCD-ROMのようなHDD以外のデバイスの接続を可能とした規格。一般には、CD-ROM等をサポートしたIDEとして認識されている。当初SFF-8020という規格だったが、ATA/ATAPI-4でATA規格に統合された。

### 48bit LBA(BigDrive)

従来の28ビットLBAを48ビットに拡張し、128ペビバイト(140,737,488,355,328KiB)までの容量を扱えるようにした規格。ATA/ATAPI-6で採用された。BigDriveはMaxtor社(当時)が発表したATAの拡張規格につけた名前で、ATA規格では48bitLBAと呼ばれる。

HDDをリセットした直後は従来モード (28ビットLBA) で動作し、ホストよりコマンドで48bitLBAモードに切り替える。切り替えた後はアドレスレジスタの意味が変わり2度書き込むことで1つのアドレスと解釈されるようになる。

この規格に対応したHDDを未対応(28ビットLBA)の機器およびOSに接続すると、切り替えが発生しないため128GiBのドライブとして動作する(127GiBの壁、おおよそ2002年以前に発売されたPCでこの壁がある)。

規格上、従来の28bitLBAのパラレルATAコントローラでも48BitLBAは使えるように考慮されているため、動作するオペレーティングシステム並びにデバイスドライバが対応していれば、全領域利用可能である。ただし、ブートデバイスとして利用する場合にはBIOS側が対応する必要があり、非対応の場合はブートストラップローダに加工するか、起動に必要なシステム/データがBIOSが管理できる領域に入っている必要がある。

### 規格のあゆみ

ATA/ATAPIの規格概要を以下に示す。

## パラレルATA

### パラレルATAとは

シリアルATAが登場して以降、旧来のパラレル通信を行うATA規格を区別するレトロニムであり、正規の規格名称ではない。しかし本節および本節の下層節では可読性向上の便宜を図るため、シリアルATA登場以前の規格を含めて「パラレルATA」と表記する。シリアルATA登場以前の規格は単にATAと称されていたが、それらをここではパラレルATAと記述していることに留意が必要。

パラレルATAでは、ケーブル1本あたり、最大2台の機器が接続可能(マスタースレーブ接続)である。リセット時などにマスター側の機器がスレーブ側の機器を制御するタイミングがあるが、基本的にはホストから独立して制御できる。

### ケーブル

パラレルATAは規格制定当初40芯、Ultra DMA 66 (UDMA4) 以降は80芯40pinコネクターのフラットケーブルを用いて接続し、ケーブル長は最大18インチ (45.7cm) と規定されている。80芯フラットケーブルを用いたものであってもコネクタのコンタクト(電気接点)の数は従前同様40である(上位互換)。

#### 80芯ケーブル

80芯ケーブルは、信号線とグラウンド線を交互に配置し、40芯ケーブルの伝送特性を改良したものである。使われるコネクタには、GND信号が偶数ピンまたは奇数ピンに割り当てられる二つの仕様があり、それぞれコネクタに刻印されている ODD GND または EVEN GND の文字列で区別することが出来る。多くの市販ケーブルや、製品としてPCに組み込まれているコネクタはODD GNDの物である。柔軟な配線取り回しや筐体内の気流改善を目的として使われるスマートケーブルは、シールド付き40芯(丸)ケーブルを使うため、「Ultra DMA 66 対応」を謳うものであっても80芯フラットケーブルの特性を保持できないことがあり障害の原因になることがある。80芯ケーブルではケーブル部はすべてフラットケーブルであり、40芯ケーブルの一部に見られたリボンケーブルを用いたものはリボンケーブル用80芯コネクタが製造されなかったことからケーブルアセンブリとしても製造されていない。

コネクタには色分けがあり、デバイス側から見た場合、全40Pinのコンタクトにおいて下記の違いがある。なお、20Pinは逆差し防止の為のピンであり、埋められていたり、接点が無いこともある。

- 黒(マスター):全ピンある。
- 青(ホスト):40芯ケーブルとの識別の為、34PinがケーブルではなくGNDに接続される。
- 灰(スレーブ):ケーブルセレクトの為、28Pinが存在しない。デバイス側ケーブル端から見て2番目に配される。製品に組み込み済みのものなどでは、全ピン結線の黒コネクタや青コネクタを用い、適宜ピンを抜いてケーブルセレクトを実装している製品もある。

#### ケーブルセレクト

80芯ケーブルには、ケーブルへの接続位置でマスタースレーブを設定するケーブルセレクトという機能が実装されている(40芯ケーブルではオプション扱いであった)。

ケーブルセレクト対応の40芯ケーブルは実装手法が2種類あり、80芯ケーブル同様にスレーブデバイス用のコネクタから28Pinコンタクトを除去する方法と、フラットケーブルの途中でライン28を切断(切り欠く)手法があった。28Pinコンタクトを除去する方法は80芯ケーブル登場以降そのコネクタを流用したものであり、40芯ケーブルが主流であった頃の実装はケーブルのライン28を切断加工する方法がほとんどであった。このため残存する40芯ケーブルがケーブルセレクト対応であるか否かを判別する方法にケーブル外観から切断(欠損)部分を見つける方法が紹介される場合があるが、確実な判別方法ではない。また、後者のケーブルセレクト対応40芯ケーブルの場合、80芯ケーブルと異なりデバイス側ケーブル端がスレーブとなるので機器接続の際には注意が必要である。

### 転送モード

パラレルATAはその長い歴史を反映して数々の転送モードが存在する。

#### PIO転送モード

PIO (Programmed Input / Output) 転送モードは、CPUが直接IDEコントローラI/Oポートを経由してデータの送受信を行う。

5種類のモードが存在するが、基準となるクロック周波数が異なるだけである。全てのATA機器は機器転送速度、転送モードのネゴシエートの為、PIO Mode 0をサポートする。

今日でも、速度を必要としない機器はこのモードのみをサポートする。

#### Singleword DMA転送モード

Singleword DMAモードは、IBM PC本体に搭載されていた8ビットのDMA転送が可能なDMAコントローラを用いて転送を行うことを想定したモードである。これはATA/ATAPI-3規格において廃止されている。

#### Multiword DMA転送モード

Multiword DMAモードは、PC/ATで拡張された16ビットのDMA転送が可能なDMAコントローラを用いて転送を行うことを想定したモードである。ハードディスクではUltra DMA規格化後はあまり使用されていないが、光ディスクドライブでは前述したATAPIの転送モードとして用いられることが多い。

#### Ultra DMA転送モード

Ultra DMA転送モードは、ATA/ATAPI-4以降で追加されたチップセットやUIDEコントローラカードに搭載された、専用の高速なDMAコントローラを使用して転送を行うモード。転送時のデータにCRCを付加し、信頼性を向上させている。

### その他

UDMA 6において、32ビット 33MHzのPCIと同じ、最大133Mbytes/secでの転送が可能となっているが、これは、あくまでもバスの転送帯域である。HDDに搭載されているキャッシュメモリからのデータを転送する時にのみ、額面通りの性能が発揮できるが、ほとんどの場合はハードディスクの読み出し速度が追従できない。また、SCSIでは普通に用いられている、コマンド投入からデータ転送開始までの間、バスの開放を行い、バスの使用効率を上げる仕組み (Disconnect / Reconnect) は、ATA / ATAPI-6以降で規格化されているものの、実装されている機器はほとんど存在しないため、複数デバイスがある場合のスループットは数値から期待されるほどは高くないのが普通。