IEEE 488とは、短距離デジタル通信バス仕様である。元々は自動テスト設備に用いられることを目的として作られたが、現在(2007年記述)でもその分野では広い範囲で使われている。IEEE 488はまたHP-IB (Hewlett-Packard Instrument Bus) やGPIB (General Purpose Interface Bus) としてよく知られている。

## 設計

IEEE 488は、デイジーチェーン接続により、1つの8bitパラレル電気バスを15個までのデバイスで共有できるものである。最も低速のデバイスが制御に参加するので、データ転送速度を決定するためにデータをハンドシェイクして送る。最初の標準では最大データ速度は約1MByte/sであったが、IEEE 488.1-2003 (HS-488) では8MByte/secになっている。

IEEE 488バスは16本の信号線を使っていて、8本を双方向データ通信用に、3本をハンドシェイクに、そして5本をバス管理に用いている。さらに8本をグランドとしている。

## 歴史

1960年代後半、Hewlett-Packard (HP) は、デジタルマルチメーターやロジックアナライザのような試験および測定装置メーカーであった。HPはコンピュータのような試験装置や制御装置をより簡単に相互接続できるようにするために、HP Interface Bus (HP-IB) を開発した。このバスはその当時の技術を用いて比較的簡単に実装できた。このバスは単純なパラレルの電気バスといくつかの独立した制御線を用いていた。

他のメーカーはHP-IBをコピーして、General Purpose Interface Bus (GPIB) を作った。

1975年、このバスはIEEEによって IEEE Standard Digital Interface for Programmable Instrumentation, IEEE 488-1975(今は 488.1になっている)として標準化された。IEEE 488.1は、GPIBのメカニカル仕様、電気仕様、基本的なプロトコルなどのパラメータは形式化したが、コマンドやデータのフォーマットについては何も触れなかった。IEEE 488.2 標準、つまり Codes, Formats, Protocols, and Common Commands for IEEE 488.1(1987年6月)では、基本的な文法とフォーマット規約を提供し、同様にデバイス独立コマンドやデータ構造、エラープロトコルなども定めた。IEEE 488.1の上に立っているIEEE 488.2はIEEE 488.1に取り込まれていない。各種装置は488.2に従わなくても488.1の仕様を満足することができる。

IEEE 488.1がハードウェアを定義しIEEE 488.2が文法を定義したが、そこには装置固有のコマンドの標準はなかった。同じ装置のクラス(例えばマルチメーター)を制御するコマンドは、メーカー同士、また種々のモデル間でさえ様々であった。デバイスコマンドの標準であるSCPIは1990年代に導入された。ただ導入が遅かったため、広く実装されることはなかった。

National Instrumentsは、元々HS-488として知られたIEEE 488.1の上位互換規格を導入した。これはデータ速度を最大8MByte/secにまで増やした。ただ、バスにより多くのデバイスを接続するとこの速度は減少した。この規格は2003年に標準として加えられ、IEEE 488.1-2003になった。

IEEEに加えて、他のいくつかの標準化団体はHP-IBを採用していた。ANSI(米国規格協会)での相当する規格はANSI Standard MC 1.1。IEC(国際電気標準会議)ではIEEEからの提案を受け、IEEE/IEC 60488-1-2004 Ed.1 として国際規格になっている。

## 適用分野

最初、HP-IBの設計者らはIEEE 488を汎用コンピュータの標準周辺機器インタフェースとして特別に計画したのではなかった。1977年までには、教育・家庭・個人用コンピュータであるCommodore PET/CBMが、IEEE 488バスを使ってディスクドライブやプリンタ、モデムなどを接続した。CommodoreのPET/CBM後継の8bitマシンは、VIC-20からC128まで周辺機器用に独自の「シリアルのIEEE 488」を利用していた。これは大きくて重いHP-IBのプラグや(PETコンピュータ用の)マザーボードに指すカード型コネクタの代わりに、丸いDINコネクタを用いていた。

Hewlett-PackardとTektronixもまたIEEE 488をディスクドライブやテープドライブ、プリンタ、プロッタなどを接続する周辺機器用インタフェースとして使用していた。これらは彼らのワークステーション製品や、HPのミニコンピュータであるHP3000に利用していた。このような用途のために10MBytes/sまでバス速度を増やしたが、コマンドプロトコルの標準がないために、サードパーティからの製品供給は少なく、互換性も限られていた。最終的には、周辺機器アクセスには、SCSIのようなより速くオープンな規格が使われるようになった。

加えて、HPの1980年代の高機能電卓・ポケットコンピュータのいくつか、例えばHP-41やHP-71のようなものはオプションであるHP-IBインタフェースを通して様々な計測を行うことができた。インタフェースはオプションであるHP-ILモジュールを通して計算機に接続した。

## 信号

データ・ハンドシェーク・管理用のすべての信号は、0 がHighレベル (≧2.0V)、1がLowレベル(≦0.8V)となる。

| 種類 | 方向 | 名称 | データ | 説明 |
| --- | --- | --- | --- | --- |
| データ | トーカ → リスナ | DIO1–DIO8 | 8bit データ | データ入出力ビット。これら8本の線はバスを通して送られる8bitのデータやコマンドバイトを読み書きするのに使われる。 |
| ハンドシェーク | DAV (Data Valid) | 1(L) = データ有効  0(H) = データ無効 | データが正当である。これはハンドシェイクラインであって、DIO1-DIO8で送られた値が正当であることを示す信号として使われる。転送用データがDIO1-DIO8のラインにセットされている間、DAVラインは「T1時間」と呼ばれる時間の後にアサートされる。T1時間後、データが読まれる前にデータラインは安定な値になる。 |
| トーカ ← リスナ | NRFD (Not Ready For Data) | 1(L) = ビジー  0(H) = レディ | データの準備ができていない。NRFDは受信側によって新しいデータバイトを受信する準備ができていないことを知らせるためにアサートされる、ハンドシェイク用ラインである。 |
| NDAC (Not Data Accepted) | 1(L) = 未受信  0(H) = 受信完了 | データ未受信。NDACは受信側がDIOラインに乗っているデータをまだ読んでいないことを示すために、受信側によってアサートされるハンドシェイクラインである。 |
| 管理用 | コントローラ  → デバイス | ATN (Attention) | 1(L) = コマンド  0(H) = データ転送 | ATNは(1バイトのデータとは逆に)1バイトのコマンドバイトがDIOラインにあることを示すためにアサートされる。また、パラレルポール使用時はEOIもアサートされる。 |
| EOI (End-or-identify) | 1(L) = 最終バイト | このラインは、データの最終バイトが書き込まれるとアサートされる。つまりメッセージの最後を示す。パラレルポールの時はATNと一緒にアサートされる。 |
| IFC (Interface Clear) | 1(L) = 初期化 | インタフェース初期化。システムコントローラは、バスをリセットしコントローラ管理下におくためこのラインを(少なくとも100us以上)アサートする。 |
| REN (Remote Enable) | 1(L) = リモートモード  0(H) = ローカルモード | システムコントローラによってアサートされ、RENがデバイスをリモートモードに入れる。つまり、コントローラによってRENがアサートされると、デバイスはリモートモードに入る。RENが偽(H)であれば、すべてのデバイスは即座にローカルモードに戻る。 |
| コントローラ  ← デバイス | SRQ (Service Request) | 1(L) = サービス要求 | バス上にあるデバイスは、コントローラ管理下からサービスを要求するためにアサートする。コントローラはデバイスがサービス要求するまで監視し、必要に応じてなんらかのアクションを起こす。 |
|

## 通信方法

### トーカとリスナの決定

コントローラは、データを送信するトーカを1つと、データを受信するリスナを1つ以上選択する。コントローラは ATN=L とし、 UNL (Unlisten) コマンドを発行後、トーカアドレスとリスナアドレスを送信し、 ATN を H に戻すと、トーカとリスナが決定することができる。

### データの送受信

トーカが 8bitデータをデータバスに設定後に DAV=L とすると、リスナは まず NRFD=H としてビジー状態とし、データ受信が完了すると NDAC=H とする。データ受信完了後にトーカが DAV=H とすると、リスナは NDAC=L とし、リスナが次のデータを受信できる状態になると NRFD を L に戻す。これにより1byteのデータ送受信が完了する。

複数byteのデータの送受信では、最終のデータであることを示すデリミタをトーカからリスナに対して送信する必要がある。一般的には、バイナリデータの場合には EOI=L とし、文字列データの場合には CR+LF, CR, LF をデリミタとする場合が多い。

### サービスリクエスト

デバイスからコントローラに対して割り込みをかける場合、デバイスはSRQ信号を1(L)としてサービス要求を行う。その後、コントローラはどのデバイスから要求が来ているかを調べる必要があるが、調べる方法として、パラレルポールとシリアルポールの手法がある。

## コネクタ

### IEEE 488

IEEE 488はアンフェノール社が設計した24ピンのマイクロリボンコネクタを採用している(しばしばセントロニクスタイプと誤って呼ばれている)。オス/メスのコネクタが対になっているので積み重ね(スタック)て簡単にデイジーチェインが可能である(これをピギーバックコネクタとも言う)。スタック可能なコネクタの数の機械的な限界は4つ以下となっている。これらはUTS(いまやほとんど廃止されている)やメートル (M3.5 x 0.6) ねじによって固定される。慣例的によりメートルねじは黒く塗られ、UTSねじとは合わないようになっている。総ケーブル長は20mが限界になっているが、非標準の「バスエクステンダ」デバイスも使える。

### IEC-625

IEC-625標準では25pin D-subコネクタ(PC/AT互換機のパラレルポートに使われているもの)の使用を規定している。この標準は24pinコネクタの採用に反して市場の多くの支持を得られなかった。

## GPIB コントローラ

- μPD7210
- NAT7210