1.0 Introduction
このマニュアルはSCSIバスCAMACクレートコントローラJorway Model
73Aシリーズの導入・操作・プログラミングについて記述しています。ユーザーはIEEEスタンダード583,675に記述されるCAMACシステムについて詳しいことを仮定しています。ANSIスタンダードX3.131のSCSI-2の特性についての知識は必ずしも必要としませんが有益で、SCSIメッセージシステムを使うソフトウェアを作るときと、コントローラが返したSCSIコマンドを理解するときには、特に役に立つでしょう。
2.0 General Description
Jorway Model
73AクレートコントローラはANSI基準SCSIバスを持つコンピュータとCAMACクレートを連結する2モジュール幅のCAMACモジュールです。73Aコントローラーを持ついくつかのクレートは、SCSIポートによって別のSCSIデバイスと混在されることができ、最大7デバイスまでサポートします。シングルエンドのSCSIバスが使われ、その最大長は6メートルです。コントローラは二つのSCSI-2の高シールド済みコネクタを持ち、デイジーチェーン可能です。
73AはSCSI-2に要求されるすべての仕様に従っています。CAMACオペレートのすべてを扱うことができ、ハードウェア制御下の高速ブロック転送も可能です。アドレススキャン・Qストップ・Qリピートといった三つのESONE基準のモードを選択できます。ブロック転送の間はSCSIバス上にはデータのみが流れます。その他の転送では、CAMACサイクル毎に2バイトもしくは3バイトのデータ転送を選択できます。後者のケースでは、24ビットのデータを32ビットのメモリ境界に整列させるためヌルバイトが挿入されます。転送時のバイトオーダーはhigh
firstかlow firstかを選択できます。73Aは非同期転送と同じように同期転送を行うことができ、データ転送路をフルに使うことができます。
LAMを起こしたモジュールは、SCSI非同期イベント通知(AEN)プロトコルを使って、コンピュータにインタラプトをかけることができます。このプロトコル上で、一つのクレートに起こったLAMの完全なパターンがホストに転送され、それによってクレートIDがわかります。ただし、ホストアダプターにこのプロトコルを使うモードを扱う能力が必要です。別の点では、73AはタイプAのCAMACコントローラーと同じ機能を提供し、ステーションナンバーレジスターを扱い、コントローラーに割り当てられているコマンドを同じように使います。したがって、Read-LコマンドをLAMのポーリングに使えます。また、73AはLAMマスクレジスタも組み込んでいます。
マスターコントローラーとしての73Aの機能は、IEEE675に規定されるAuxiliary Control
Busをサポートします。したがって、73Aはクレートの一番右に配置する必要があり、別のauxiliaryコントローラーがある場合はRequest/GrantモードもしくはAuxiliary
Controller
Lockout(ACL)モードのプロトコルを使用できます。もう一つの特徴はフラグを持つ24ビットメールボックスレジスターです。これはシステムテストか、もしくはauxiliaryコントローラーを介したプロセス間通信を容易にするために使われます。
オプションバージョンの73A-1は、マスターコントローラー・auxilaryコントローラーのどちらとしても機能します。一方の役割から別の役割に変えるのはスイッチによって行われます。さらに別のバージョンの73A-2はFASTCAMAC(L1)プロトコルをサポートします。この機能によって7.5MB/secまでCAMACリード時の転送速度を上げることができます。オプション1と2は統合されます。
3.0 Instllation
このセクションは73A,73A-1,73A-2に関する情報を含みます。違いのある部分は除外され、別項で記述します。
3.1 Byte Transmission Order
有効バイトオーダーは、トップカバーを取り外すことで操作できるストラップスイッチで決定できます。算術計算の場合、コンピュータは高いメモリアドレスにロングワードの最大有効バイトを配置することがあります。このようなシステムでは、CAMACワードの最小有効バイトが最初に転送される、いわゆる「リトルエンディアン」のバイトオーダーで転送されます。別のシステムでは「ビックエンディアン」です。ストラップがX1とX2にかかってる場合は、「ビッグエンディアン」に、逆にX2とX3の場合は「リトルエンディアン」になります。DECや80x86系のコンピュータはリトルエンディアンで、マッキントッシュのような680x0系のマシンやHP,Sun,IBM
RS/6000などはビッグエンディアンです。VMEも一般的にビッグエンディアンです。SCSIコマンド中のバイトオーダーはストラップスイッチで変更できず、INQUIRYもしくはREQUEST
SENSEコマンドへの返答の順になることに注意してください。
3.2 Host ID
LAMの通知にAEN手順を使う場合だけは、SCSIホストIDはコントローラー内のストラップによって決定されます。可能なホストIDは0,1,6,7です。出荷時は6に設定されています。図1に別の選択をするときのために、ストラップの位置を示しています。上記以外のホストIDを選択する必要があるときは、工場に相談ください。先に述べたとおり、AEN手順はホストアダプターとソフトウェアにそのターゲットモードを扱う能力が必要ですが、残念なことにそれは稀です。
3.3 Internal Switches, Model 73A
73Aはモジュール上端から操作可能な4ポジションのピアノスイッチを持っています。スイッチ1は、ブロック転送時にCAMACデータ転送路の連続的制御を73Aが扱うかどうかを決定します。このスイッチがオンのときは、CAMACサイクル後に73Aはデータ転送路をリリースし、別のサイクルが始まる前に他のコントローラーと再び仲裁しなければなりません。スイッチがオフのときは、最初のサイクル後に73Aは仲裁せず、したがっていくらか高速で動作します。しかしながら、そのブロックが終了するまで他のコントローラーは動作サイクルから避けられます。このスイッチは、クレートに他のコントローラーが無い場合にはオフが推奨されます。
スイッチ2はファンクションコードF(5)を使用するFASTCAMAC読込みを有効にします。(73A-2のみ)
スイッチ3がオフの場合は、コントローラーはACLモードで動作します。データ転送路サイクルの実行が知らされたとき、AuxiliaryコントロールバスにACL信号を流し、データ転送路がビジーでなくなるのを検出した後すぐにデータ転送路サイクルを実行し始めます。アクティブなコントローラーが早期のステージにある場合には強制的にそのサイクルを中断させることで、ACL信号はバスが600nsec内で利用できることを保証します。一つのクレート中にACLモードで動作できるコントローラーは一つだけですが、それがマスターコントローラー(すなわち一番右の位置)になる必要はありません。CAMACシリアルクレートコントローラーは、通常、ACLモードで動作します。
Request/Grantは一つのクレートで複数のコントローラーを操作する場合のよりよい方法です。スイッチ3がオンの場合は、Request
LEMOコネクタが最優先コントローラーのGrant-In
LEMOに装着させなければなりません。このコントローラーのGrant-Outは次に優先度の高いコントローラーのGrant-Inに接続し、以下そのようにします。すべてのコントローラーのRequest
LEMOは同じ信号を運びます。一つだけが使われます。もしそのクレートにACLモードのコントローラーがあれば、それはGrantチェーンには参加せず、上記のように他の全てのコントローラーを封じます。もし一つのクレートに一つしかコントローラーがない場合(かつそのコントローラーが一番右端にある場合)は、どちらのモードでも動作できます。その場合R/Gモードでは、Grant-InはRequestに接続しなければなりません。
スイッチ4は24ビットLAMマスクレジスタをイネーブルにし、レジスタはCAMACコマンドF(16)N(30)A(0)で上書きできます。マスクレジスタがイネーブルな場合、設定されたマスクに一致するステーションのLAMだけが、Read-Lコマンドで返され、またインタラプトを生成することができます。スイッチ4がオフであれば、すべてのLAMが認識されます。
3.4 Bus Termination
マルチプルSCSIコントローラー(73A,73A-1)は、フロントパネルのSCSI-2端子を相互連結することにより、シングルSCSIバス上でデイジーチェーンを行うことができます。それらの端子は同様のもので、入力も出力もどちらも提供することができます。最大7つのSCSIデバイスを一つのバス上に存在させることができますが、トータルのSCSIバス長は6メートル以内にSCSI規格で制限されています。SCSIバスは抵抗器もしくはそれと同様のもので両端をターミネートさせる必要があり、それには電力を必要とします。ケーブル中のワイヤの一つはこの目的専用です。SCSI規格は、このラインが必ずすべてのSCSI「イニシエイター」によって電力供給されるようにしなければならないと定めています。ホストインターフェイスは通常この機能を提供し、バス背後のターミネーションも保証します。規格に従って、73Aは他の端子のターミネーターパワーは保証しませんが、ホストからのターミネーターパワーをコネクタ間に受け渡すのは保証します。
73Aにおいては、図1に示された位置にあるソケットの抵抗器によって、SCSIバスは内部でターミネートされています。これらの抵抗器はクレートから電源供給され、SCSIバス上のTERTMPWRラインは使いません。このユニットは通常ふさわしい位置に載せられ、複数のクレートがあるシステムでは最後のコントローラー以外からはすべて取り除かれるべきです。その代わりに、すべてのターミネータを取り除き、最後のデバイスの使用していない端子にSCSIターミネータを接続することも可能です。もし73Aがケーブルのバスターミネートラインに電源供給する必要があるときは、工場に連絡ください。
【注意】
内部ターミネートされているコントローラーの電源が落ちた場合は、SCSIバスは誤動作します。しかしながら、SCSIバスをターミネートしていないコントローラーは電源が落ちてもかまいません。バス上の最後(もしくは唯一)のコントローラーの電源を落としたい場合は、内部ターミネータをすべて取り外して、使っていない端子にターミネータプラグを装着してください。
3.5 SCSI ID
コントローラーのSCSI
IDはフロントパネルの指で回すスイッチで設定します。IDは0から7の間で選択し、同バス上の他の全てのデバイス(ホスト含む)のIDと異なっていなければなりません。複数のデバイスからのLAMが予想されるときは、バスの仲裁プロトコルがより高いデバイスIDを好むため、高いIDナンバーを優先度の高いLAMの発生元に割り当てます。クレートの電源が入ったままSCSI
IDを変えたときは、変更されたIDを認識させるためにリセットが必要なことに注意してください。
3.6 Station
標準の73A(マスターのみ)は、CAMACの一番右端の2つ分のステーションに装着しなければなりません。73A-1はどのステーションに装着してもかまいませんが、マスターコントローラーなどにする場合は一番右端の位置にしてください。
73A-1の背面には、回路ボードの指の届く範囲に、複数のポールのあるピアノスイッチが3つあります。マスター動作する場合には全てのスイッチはオンにし、モジュールはクレートの一番右端に装着させます。auxiliaryコントローラーとして動作する場合はスイッチはオフにします。このケースでは、コントローラーは一番右端(コントロール用)ステーションを除くすべてのステーションに位置させることができます。
3.7 Auxiliary Control Bus
一つのクレートに複数のコントローラーを配置する場合は、すべてAuxiliary
Controlバスに内部接続します。これは40線のリボンケーブルで、データ転送路上のすべてのコントローラーの背面コネクタを内部接続します。73A-1をシリアルクレートコントローラーと同時に補助として使う場合は、Modified
Auxiliary Controlバスを使います。この接続の詳細マニュアルを参照してください。
4.0 Indicators
どのモデルのフロントパネルにも三つのインジケーターがあります。DランプはそのクレートでマスクされていないLAMが起こった場合に点灯します。LAMマスクがディセーブルであれば、どこかのステーションでLAMが起こった場合に点灯します。
Iランプはデータ転送路のインヒビットラインが起こった場合に点灯し、73Aでも他のコントローラーでも同様です。インヒビットの効果は特殊なCAMACモジュールが使用されているときのみに依存することに気づくでしょう。クレートコントローラーの機能はインヒビットの影響を受けません。オフラインのコントローラーはインヒビットを起こしません。
R/G ONランプは内部スイッチの位置がRequest/GrantもしくはACLモードに選択されてることを知らせます。
5.0 Operation
前述したSCSI
IDスイッチの他には、どのモデルでもON/OFFラインスイッチと、データ転送路の初期化(Z)とクリア(C)のCAMACサイクルを発生させる2値の一時的スイッチを操作することができます。オフライン状態では、コントローラーはSCSIコマンドに対しては適切な応答をしますが、CAMACサイクルは行いません。代わりにエラーステータスを返します。Z/Cスイ������������������������������������������������������はオフライン状態のときのみ有効です。マニュアルによるCはCAMACモジュールにのみ影響し、コントローラーの内部状態は変えません。マニュアルによるZはコントローラーも含めて全てのCAMACモジュールを初期化します。これはパワーオンリセットと同じもので、データ転送路のインヒビットを設定し、LAMをディセーブルし、SCSI
UNIT
ATTENTION状態にします。コントローラーはいつでもオフラインにしてZスイッチを作動させることができ、SCSIエラーは起こりません。またコントローラーがアイドル状態になるまで動作は遅延されます。マニュアルによるZは、クレートの電源が入ったままコントローラーのSCSI
IDを変え、新しいIDを認識させるときに使います。マニュアルによるZはSCSIバス上の他のデバイスには影響しません。
6.0 Programming
73Aにコマンドを出すには、ホストインターフェイスは以下のタスクを適切なSCSIバスフェイズに従って行う必要があります。このタスクの多くは、ユーザーにとってはトランスペアレントに、プロセッサーベンダーが提供するポートドライバーによって、自動的に実行されます。
1.Bus Arbitration (バスの仲裁)
2.Select the Controller (コントローラーの選択)
3.Send the Identify message (識別メッセージの送信)
4.Send the Command Descriptor Block (コマンド記述ブロックの送信)
5.Send or Receive Data (データの送受信)
6.Receive the Status Byte (ステータスバイトの受信)
7.Receive the Command Complete Message (コマンド終了メッセージの受信)
Bus
Arbitrationは、バス上にホストインターフェイス以外のSCSIイニシエイターになれるデバイスがある場合にのみ必要です。73AコントローラーはLAMメッセージを送信する目的で一時的にイニシエイターになれることに注意してください。したがって、LAMがイネーブルな場合、ホストによる仲裁が必要になります。ホストSCSIインターフェイスのハードウェアは通常Arbitration手順を行いますが、潜在的なイニシエイターが他になければこの手順はスキップすることができます。
コントローラーIDと一致するSCSIデータラインとSCSI
SEL信号によって、コントローラーは選択されます。ホストIDと関連したラインも選択的に含むことができます。選択されたコントローラーはSCSI
BSY信号を発生させることによって返答し、ターゲットモードに入ります。SCSIターゲットは、C/D,I/O,MSG信号を制御することで、データ転送のタイプと方向を決定します。これらの信号は以下のテーブルに従って、バスのフェイズを決定します。
Phase C/D I/O
MSG
Command 1 0
0
Data Out 0 0
0
Data In 0
1 0
Status 1
1 0
Message Out 1 0
1
Message In 1 1
1
"In"方向はターゲットからイニシエイター(コントローラーからホスト)への転送を示します。イニシエイターとして振る舞うホストインターフェイスは、バスフェイズを監視し、ターゲットによって要求されたデータのタイプを送信または受信します。バスフェイズのシーケンスがホストに通常に通知された後、通常でないフェイズがエラー状態を表示します。メッセージフェイズは物理的なパス制御のために使われ、エラー状態からの復帰を行います。
SCSI-2の規格に従ってホストは、コントローラーが初期化時にメッセージアウトフェイズに入った73Aを選択し、ATN信号が発生します。ホストがターゲット中の論理ユニットを選択するための1バイトのIDENTIFYメッセージを送ることをコントローラーは予期します。このメッセージはセクション7に記述されています。ホストがATNを出したままのときは、コントローラーはメッセージアウトフェイズのまま待機し、ホストは別のメッセージ、例えばSYNCHRONOUS
DATA TRANSFER
REQUESTを送ります。ATNがなくなったときには、コントローラーはコマンドフェイズに入り、ホストがコマンド記述ブロックを送信することを予期します。以下のコマンドが73Aによって受け付けられます。
1.INQUIRY
2.TEST UNIT READY
3.REQUEST SENSE
4.CAMAC Commands
73Aが受け付けるコマンド記述ブロックは6バイトまたは10バイトの長さで、次のセクションに記述してあります。コマンドフェイズに続いて、コマンドがデータ転送を含み正当でありエラーを含まない場合、コントローラーはデータフェイズに入ります。これに続いて、コントローラーはステータスフェイズに入り、ステータスを示す1バイトを送信します。コマンドが不正か、データ転送を含まないか、なにかの理由で実行されない場合は、コントローラーはコマンドフェイズからステータスフェイズに直接進みます。73Aでは三つの可能なステータスのみが生成されます。
Value Status
0 GOOD
2 CHECK CONDITION
4 CONDITION MET
CHECK CONDITIONステータスはエラーを示します。REQUEST SENSEコマンドはその原因を決定するために使われます。CONDITON
METステータスは、CAMACのデータ無しコマンドの間、CAMAC
Q信号の値を返すために使われます。4のステータスはQ=1を示し、0のステータスはQ=0を示します。データ転送コマンドはCONDITION
METステータスを返しません。ステータスフェイズに続いて、コントローラーはメッセージインフェイズに入り、規格に従って1バイトのヌルを送信します。それによって使用していたバスをフリーにします。リンクされたコマンドは73Aでは現在サポートされていません。
6.1 INQUIRY Command
INQUIRYコマンドは常にターゲットの論理ユニットの特性を決定するために送られます。36バイトの情報が送られ、接続されたデバイスのタイプ、製造元、モデル番号、リビジョンレベルを示します。このコマンドは一般に起動時のOSによって送られますが、ユーザーによって送られることもあります。コマンド記述ブロックは以下のようになっています。
Byte
0 Operation Code (12h)
1 7-5
Logical Unit Number
4-1
Reserved
0
EVPD
2 Page Code
3 Reserved
4 Allocation Length
5 7-6
Vendor Speific
5-2
Reserved
1
Flag
0
Link
全てのSCSIコマンドの予約フィールドは0にする必要があります。規格に従って、73Aはこのルールに違反するコマンドを全て拒絶します。73Aにとって、唯一の正当なLogical
Unit Numberは0です。EVPD,Page Code,Vendor
Specific,Flag,Linkフィールドも0にする必要があります。Allocation
Lengthはコントローラーが返すとホストが予期しているデータのバイト数で、典型的には36ですが、それより小さい数になることもあります(返されたデータが切り捨てられた場合)。
73Aが返すデータはSCSI規格のテーブル7-15に従います。周辺デバイスのタイプは03hになります。Peripheral
Qualifierはコントローラーがオンラインであれば000b、オフラインであれば001bになります。0でない論理ユニットが指定された場合(IDENTIFYメッセージより先行した場合)には、Peripheral
Qualifierは011bになりますコマンド記述ブロックに間違ったビットがない限り、INQUIRYコマンドはGOODステータスを返します。
【注意】
SN 354以前のコントローラーは、Windows95で不適切に扱われ、1Fhのデバイスタイプを返します。
6.2 TEST UNIT READY Command
TEST UNIT
READYコマンドは、関連したデータフェイズが無くなった後、コントローラーがデータ転送コマンドを受け付ける準備ができたかどうかを決めるための手っ取り早い方法です。TEST
UNIT
READYコマンドはコントローラーの準備ができていればGOODステータスを返します。準備されていない場合の状況には以下の二つがあり、このコマンドに対してCHECK
CONDITIONステータスを返します→(a)コントローラーがオフラインにスイッチされている (b)UNIT
ATTENTION状態である。クレートの電源を入れる、SCSIバスリセット、BUS DEVICE
RESETメッセージの受信、マニュアルによるデータ転送路リセット(マニュアルのZ)、の場合にUNIT ATTENTION状態になります。UNIT
ATTENTION状態の間は、CAMACコマンドやTEST UNIT READYコマンドではCHECK
CONDITIONステータスが返り、CAMACコマンドは実行されません。このステータスが送られた後、"Contingent
Allegiance(不慮の忠義?)"があると言われ、UNIT ATTENTIONはクリアされます。REQUEST SENSEコマンドかTEST UNIT
READYのCAMACコマンドが送られた後は、意味のあるデータはクリアさせることに注意してください。
【注意】
73Aは電源オンまたはリセット時に25msec内でSCSIコマンドを実行する準備ができます。しかし、それはUNIT
ATTENTION状態にあり、その状態はCAMAC転送(CAMACデータ無しコマンドも含む)が起こる前になくならないといけません。これはTEST UNIT
READYコマンド(CHECK CONDITIONを返す)を送ることで行うことができます。REQUEST
SENSEコマンドを送る必要はありませんが、これが行われない場合はコマンド中のエラーは検出不能になります。GOODステータスが返ってくるまでTEST UNIT
READYコマンドを送ることが、手堅い手法になります。
TEST UNIT READYコマンドのフォーマットは以下のようになっています。
Byte
0 Operation Code (00h)
1 7-5
Logical Unit Number
4-0
Reserved
2 Reserved
3 Reserved
4 Reserved
5 7-6
Vendor Specifc
5-2
Reserved
1
Flag
0
Link
Logical Unitフィールド、予約フィールド、5バイト目の全てのフィールドは0にします。どこかに0以外があると、CHECK
CONDITIONステータスが返り、"illegal request"のSense Keyがその後のREQUEST
SENSEに対して返ります。0でないLogical
Unitが指定されたIDENTIFYメッセージの実行時にもよく似た結果になります。後に述べる通り、この二つの状態の違いは"Addtional Sense
Code"にあります。
6.3 REQUEST SENSE Command
REQUEST SENSEコマンドは通常、何かのコマンドの実行時にCHECK
CONDITIONが返ってきた後、その理由を知るために送られます。そのコマンド記述ブロックのフォーマットは以下のようになっています。
Byte
0 Operation Code (03h)
1 7-5
Logical Unit Number
4-0
Reserved
2 Reserved
3 Reserved
4 Allocaiotn Length
5 7-6
Vendor Specific
5-2
Reserved
1
Flag
0
Link
1,2,3,5バイト目は0にします。そうしないと、コマンドはCHECK CONDITIONステータスを返します("illegal
request")。Allocation
Lengthはホストが予測する返答のバイト長です。規格に従い、73Aは規格で指定されているフォーマットとコードを使って、18バイトのsenseデータを返します。返答のフォーマットは以下のようになっています。現在の使い方では、規格の最後の5バイトは何の情報も運ばないことに注意してください。すなわち、Allocation
Lengthを13に下げることによって、スループットを上げることができます。
Byte
0 7
Valid
6-0
Error Code (70h)
1 Segment Number (0)
2 7-4
NULL
3-0
Sense Key
3 FIFO
Status
4-6 (MSB) DMA Byte Count (LSB)
7 Addtional Sense Length (10)
8-11 NULL
12 Addtional Sense Code
13-17 NULL
73Aが返すSense Keyは以下のものがあります。
Key Description
0 NO SENSE
特にSense Keyがない場合。
成功したコマンドの後、REQUEST SENSEコマンドを実行した場合。
2h NOT READY
コントローラーがオフライン。
4h HARDWARE ERROR
データ転送中のパリティエラーもしくはCAMACモジュールがX信号を返さない場合。
5h ILLEGAL REQUEST
0でないLogical Unitが選択された場合。
もしくは送られたコマンドが実行できない場合。
もしくは不正なビットが含まれてる場合(たいていの場合IDENTIFYメッセージで)。
6h UNIT ATTENTION
コントローラーがリセット中。
9h SHORT TRANSFER
ストップモード転送が予測されるバイト数のデータを送信しない場合。
CAMACサイクルがQ信号を返さないことが原因。
Bh ABORTED COMMAND
コントローラーがコマンドを中断した場合。
これらのケースでは、Sense Keyがエラーの正確な原因について余地を残すので、Addtional Sense
Codeがそれについてさらに明確にします。SCSI-2から送出されることがあるASCは以下のようになっています。
00h 追加のSense情報無し
04h コントローラーがオフライン
20h 不正なコマンドオペレーションコード
24h CDBに不正なフィールド
25h サポートされないLogical Unit
29h パワーオンリセットもしくはバスデバイスリセット中
3Dh INDENTIFYメッセージに不正なビット
44h CAMACサイクルがX信号を返さない
47h SCSIパリティエラー
48h INITIATOR DETECTED ERRORメッセージ受信
80h CAMACサイクルがQ信号を返さない
4から6バイト目は標準のSense返答の"information"フィールドになっており、ブロック転送が不正に終わった場合に適しています。これについては、後述します。
6.4 CAMAC Commands
SCSI規格ではCAMACクレートのようなデバイスを保証していません。従って、以下にあるSCSI-2仕様のINDENTIFYコマンドによる、非標準なコマンド記述ブロックが使われます。6バイトないし10バイト長のコマンドが使われ、後者は256バイトもしくはそれ以上のバイト長のブロックデータ転送にのみ使われます。
6.4.1 CAMAC Non-Date Commands
CAMACデータ無しコマンドは、ファンクションコードが8から15、もしくは24から31の間になります(F8ビットが1)。CAMACデータ無しコマンドのコマンド記述ブロックは6バイトで、以下のようになっています。
Byte
0 Operation Code (01h)
1 7-5 Logical
Unit Number
4
F16
3
1
2
F4
1
F2
0
F1
2 7-5 NULL
4
N16
3
N8
2
N4
1
N2
0
N1
3 7-4 NULL
3
A8
2
A4
1
A2
0
A1
4 NULL
5 Control Byte (0)
コマンド実行後、コントローラーはステータスフェイズに進み、以下のステータスバイトのうち一つを返します。それからCommand
Completeメッセージ(NULL)を返します。
Status Description
0 GOOD Status,
Q=0
2 CHECK
CONDTION (Error)
4 GOOD Status,
Q=1
CHECK CONDITONステータスが返ってきた場合に、原因を特定するためにはREQUEST SENSEコマンドを送ります。
6.5 CAMAC Data Transfer
読込みもしくは書込みのためのCAMACデータ転送は同じOperation Code (Byte
0)を使います(他のSCSIコマンドとは似ていません)。違いはコマンド記述ブロック中のCAMACファンクションコードにあります。さらに、通信するデータが、256バイト未満か256バイト以上か、によって違いがでます。短いバイト長の通信では6バイトのコマンド記述ブロックを使用し、長いバイト長の通信では10バイトです。どちらの通信にも16ビットモード,24ビットモードがあります。前者はCAMACデータ路のデータ信号のうち下位16ビットのデータのみを転送し、したがって、SCSIバス上のCAMACワードを転送するには2バイトのみが必要です。24ビットモードでは、データ路の全てのデータ信号が使われ、データ路サイクルには3バイトが必要になります。24ビットモードではフルワードな境界にメモリーデータを整列させるために、転送されるそれぞれのCAMACワードの有効な3バイトに対して、SCSIデータ転送上ではヌルバイトが挿入されます。転送長は常にバイト数で定まるため、CAMACワード数の2倍もしくは4倍になります。
【注意】
16ビットモードを使う場合、CAMACに不慣れなユーザーは上位8本のデータ路書込みライン(W17-W24)に0でないビットが現れることに悩むことがあります。これは、データ路が24ビットを使うようにハードウェア的に回路設計されていることによる、不可避な現象です。24ビット全てに対して反応してしまうモジュールがあるときに16ビットモードを使う場合は、上位ビットをヌルにして24ビット書込みコマンドを送ります。これによって上位ビットが0になったまま16ビットモードを使うことができるでしょう。
6.5.1 Short CAMAC Transfer
256バイト未満の転送のためのコマンド記述ブロックは、以下の6バイトの構成になっています。
Byte
0 Operation Code (01h)
1 7-5
Logical Unit Number
4
F16
3
0
2
F4
1
F2
0
F1
2 7
M1
6
M2
5
S
4
N16
3
N8
2
N4
1
N2
0
N1
3 7-4
NULL
3
A8
2
A4
1
A2
0
A1
4 Transfer Length
5 Control Byte (0)
6.5.2 Long CAMAC Transfer
256バイト以上のCAMACデータ転送は以下の10バイトのコマンド記述ブロックを使用します。
Byte
0 Operation Code (21h)
1 7-5
Logical Unit Number
4-0
Reserved
2 7-5
Reserved
4
F16
3
0
2
F4
1
F2
0
F1
3 7
M1
6
M2
5
S
4
N16
3
N8
2
N4
1
N2
0
N1
4 7-4
NULL
3
A8
2
A4
1
A2
0
A1
5 Reserved
6-8 (MSB) Transfer Length (LSB)
9 Control Byte (0)
ショートモードとロングモードどちらでも、M1,M2,Sビットは以下のように通信モードを指定します。
M1 M2
S Transfer Mode
0 0
0 Single Word, 16 bit Mode
0 1
0 Address Scan, 16 bit Mode
1 0
0 Q-Stop, 16 bit Mode
1 1
0 Q-Repeat, 16 bit Mode
0 0
1 Single Word, 24 bit Mode
0 1
1 Address Scan, 24 bit Mode
1 0
1 Q-Stop, 24 bit Mode
1 1
1 Q-Repeat, 24 bit Mode
Address Scanモードでは、サブアドレス15で終了するかCAMACサイクルがQ=0を返すまで、連続的なサブアドレスが指定されます。ステーションナンバーはそれからインクリメントされ、転送長が満たされるかN24に届くまでプロセスが続きます。Q-Stop,Q-Repeatモードでは、ステーションとサブアドレスは最初の値に固定されます。M2=0であれば、Q=0で転送が止まります。M2=1であれば、Q=0でデータは送られませんが、CAMACサイクルはX=1である限り続きます。どの転送モードでも、転送長を満たすかエラーが起こると止まり、コントローラーはステータスフェイズに進みます。
Single
Wordモードは、適切なデータを起きるときにもQ=1を返さない数少ないCAMACモジュールを読むときにも使えます。Q-StopモードまたはM1=M2=0のモードでは、CAMACの1ワード転送が行われます。前者の場合は、コマンドがQ=0を返しされると、CAMAC読み取り操作からのデータはホストへ転送されず、CHECK
CONDITIONステータスが返ります。M1=M2=0のモードでは、データは必ずホストへ転送され、Q=0であってもGOODステータスが返ります。どんなQレスポンスが返ってきたのか知ることはできません。書込み操作では、Qレスポンスが返ってくる前にデータが転送されるため、この二つのモードの違いは実際的にはありません。Single
WordモードはCAMAC1ワードより長い転送を行うことはできません。
【注意】
73Aの初期モデルでのSingle Wordモード転送は、データが転送されてもQ=0を検出するとCHECK CONDITONステータスを返します。
CAMACデータ転送コマンドはステータスバイトを二種類のみ返し、それはGOOD (0)かCHECK CONDITION(2)です。CHECK
CONDTIONステータスは転送長が満たされなかった場合もしくはXかQが0であった場合に返ります。REQUEST
SENSEコマンドを送ることで、中断の原因を確定し、中断までに成功した転送のバイト数を知ることができます。Senseデータの3バイト目はコントローラーの内部FIFOに残っているデータのバイト数です。4バイトから6バイト目には、SCSIバス上に転送された残りのデータのバイト数の値が含まれています。言い換えると、4-6バイト目の値をプログラムされたバイト数から減算すると、SCSIバス上に転送されたデータのバイト数を得られます。この値はホスト側でカウントされたバイト数からも得られます。CAMAC読込みのケースでは、この値とFIFOに残っているバイト数を加算すると、CAMACモジュールから読まれたバイト数を得ることができます。24ビットモードで転送が行われた場合は、この値は"filter"のバイトを含んでおり、CAMACデータ路のサイクル回数を得るには4で割らなければなりません。16ビットモードでは2で割ります。
CAMAC書込みのケースでは、データ路サイクルを完了した数を決めるには、SCSI転送の数からFIFOに残っているバイト数を減算しなければなりません。さらに、Q-Stop書込み転送がQレスポンス(の欠落)により中断したときは、Q=0のサイクル結果もカウントされるため、上記の計算では実際の成功したデータ路転送数より1多い数になります。CAMAC読込みの場合は、Single
Wordモードの場合を除いて、Q=0を返したサイクルはデータ転送の結果には入りません。
コントローラ自身は以下のCAMACコマンドに応答し、指示されたアクションを行います。最後の一つを除き、これらは標準のType
Aのクレートコントローラーで使うコマンドと同じです。
ACTION
COMMAND RESPONSE
Generate Dataway Z
F(26)N(28)A(8) Q=0
Generate Dataway C
F(26)N(28)A(9) Q=0
Read LAM Pattern
F(0)N(30)A(0-7) Q=1
Load Station Number Register F(16)N(30)A(8) Q=1
Remove Dataway Inhibit
F(24)N(30)A(9) Q=0
Set Dataway Inhibit
F(26)N(30)A(9) Q=0
Disable Demands
F(24)N(30)A(10) Q=0
Enable Demands
F(26)N(30)A(10) Q=0
Overwrite LAM Mask
F(16)N(30)A(0) Q=0
上記のコマンドに加えて、N(24)のアドレスを持つコマンドはステーションナンバーレジスターにある全てのステーションを選択し、N(26)のアドレスを持つコマンドは同時に全てのステーションを選択します。
7.0 Asynchronous Event Notification
LAMがイネーブル(F(26)N(30)A(10))で、イネーブルなCAMACモジュールでLAMが立った場合は、73Aは一時的にイニシエイターになりSCSI-2
AEN手順を使ってホストに知らせます。これはバスを仲裁し、ホストSCSIアダプタを選択し、SCSI
SENDコマンドを伴ってIDENTIFYメッセージを送ります。ホストアダプターは適切なターゲットモードフェイズを実行するようにプログラムされていなければなりません。SENDコマンドはターゲット(ホストアダプター)にイニシエイター(クレートコントローラー)からのデータを転送するように指示します。SENDコマンドは、規格のテーブル11-3に記述された通り、4バイトの転送長を持ち、0のAENビットがあります。これはデータフォーマットがベンダー独自であることをホストに知らせます。データフェイズを確保する間、コントローラーはクレート中に起こった全てのLAMパターンを運ぶ4バイトを送信します(単に一つだけのリクエストをするわけではない)。バイトオーダーはCAMACの24ビットデータ転送と同じであり、ヌルのフィルターバイトを含んでいる。全てのワードのうち有効なビットは、ナンバー1から24までのステーションからのLAMに一致する。
ホストインターフェイスはAEN手順を実行する能力が必要で、そうでなければLAMを扱うことができない。コントローラーはホストがこの能力を持っているかどうかチェックしません。しかしながら、コントローラーは最初にLAMメッセージを送る前にTEST
UNIT READYコマンドを送ることで、ホストインターフェイスのUNIT
ATTENTION状態を解消します。これらのバイトの中身がチェックされずとも、ターゲット(ホスト)はそのコマンドに対してステータスバイトとCOMMAND
COMPLETEメッセージを送るものとされている。TEST UNIT READYコマンドはホストのUNIT ATTENTIONを解消すると仮定されています。
8.0 Messages
73Aモデルは以下のSCSIメッセージに応答します。
IDENTIFY
ABORT
BUS DEVICE RESET
INITIATOR DETECTED ERROR
MESSAGE PARITY ERROR
MESSAGE REJECT
NO OPERATION
SYNCHRONOUS DATA TRANSFER REQUEST
IDENTIFYメッセージはSCSI-2でターゲット中の論理ユニットを選択する手段です。IDENTIFYメッセージ中に0でない論理ユニットが指定された場合、次のコマンドは失敗することになります。IDENTIFYメッセージは次のような1バイトの中身になっています。
Bit 7 1
6-3 0
2-0 Logical Unit
Number
【注意】
前述した通り、コマンド記述ブロックにもLogical Unit
Numberフィールドがあります。このフィールドはSCSI-1と互換性をもつためにSCSI-2で扱われています。IDENDIFYメッセージで論理ユニットを送った場合は、このフィールドは使いませんので、0にセットするべきです。
ABORTメッセージはそのとき実行中のコマンドを中断させ、コントローラーはバスフリーフェイズに入ります。BUS DEVICE
RESETメッセージはコントローラーのハードウェアリセットをさせます。Dataway Zが生成され、UNIT
ATTENTION状態がセットされます。LAMはディセーブルになり、データ路インヒビットが立ちます。もし同期転送が有効であれば、コントローラーは非同期モードに戻ります。
INITIATOR DETECTED ERRORメッセージはコントローラーに現在のコマンドを終わらせCHECK
CONDITIONステータスを返させます。続いてREQUEST SENSEコマンドを実行すると、0BhのSense
Keyと48hのASCが返ってきます。73Aの初期バージョンではこのメッセージに対して現在のコマンドをリトライするように応答することに注意してください。
MESSAGE PARITY ERRORメッセージはコントローラーに前のメッセージを再送させます。MESSAGE
REJECTメッセージはコントローラーに「予期されない切断」を実行させます。これは、制限されうまく定義された73Aのメッセージレパートリーがあるはずなので、行うべきではありません。
SYNCHROUNOUS TRANSFER
REQUESTメッセージは、その後のデータフェイズにおいて同期転送を使うように73Aに準備させ、それが使うパラメータを確認するメッセージを返させます。このメッセージは以下のような5バイト長の内容です。
Byte Contents
0 1
1 3
2 1
3 Transfer Period
4 REQ/ACK Offset
Transfer
Periodは4nsecの単位で指定されます。73Aモデルは5MB/secのレートの転送が可能で、従って、3バイト目には50の値もしくはそれよりも低くホストに提案された値が返されます。ホストにより小さいオフセットが提案されない限り、4バイト目には8の値が返されます。
73Aモデルは特定の状況下で以下のSCSIメッセージを生成します。ホストはこれらを扱う用意をしておく必要があります。
COMMAND COMPLETE
SYNCHRONOUS DATA TRANSFER REQUEST
COMMAND
COMPLETEメッセージは、ステータスフェイズの後のメッセージインフェイズでコマンドの完了ごとに1バイト長で送られます。73Aモデルはリンクされたコマンドをサポートしていないので、このメッセージは常にヌルです。SYNCHRONOUS
DATA TRANSFER
REQUESTメッセージはホストからの同様なメッセージに対する応答時のみに生成されます。73Aは同期転送を自分からは指示しません。AEN転送は必ず非同期モードを使います。いくつかのOSはMESSAGE
REJECTとMESSAGE PARITY
ERRORメッセージを受け取る用意がないので、73Aモデルはどちらも生成しません。壊れたメッセージもしくは不正なメッセージを受け取ったときには、単にバスから切断します。この「予期されない切断」はホストにエラーが起こったことを知らせます。しかしながら、前述した通り、不正なIDENTIFYメッセージに対してはステータスフェイズで応答が送信されます。
非同期イベント通知中は、73Aモデルは0となるLogic
Unit番号を運ぶIDENTIFYメッセージを生成します。さらにホストがステータスバイトを送った後COMMAND COMPLETEメッセージを送ると予測します。
9.0 Mailbox
73Aは24ビットのメールボックスを組み込んでおり、それによってSCSIホストと同一クレートにある別のコントローラーに繋がっている(もしくは組み込まれている)プロセッサとの間の通信を容易にします。メールボックスは、SCSIホストからもデータ路を使っている別のコントローラーからも上書きすることも読むこともできます。ホストはステーション28にアドレスされたCAMACコマンドを使って、メールボックスにアクセスします。他のコントローラーは73Aが占めている右側のスロットと同じ番号のアドレスを使います(73Aがコントロールステーションにある場合は25です)。
メールボックスに関連したフラグは、Qレスポンスを使ったコントローラー間のインタロック通信に使うことができます。加えて、データ路のコマンドによって、LAMのフリップフロップを組み込めます。セクション3で述べた通り、LAMはどのコントローラーでも検出できます。これらの機能は以下のコマンドを利用します。
F(0)A(0) メールボックスの内容を読む
F(0)A(1) 中身を読み、フラグが立っているとQ=1、フラグが立っていないとQ=0を返す
F(16)A(0) メールボックスを上書きする
F(16)A(1) フラグが立っていないと、フラグを立て上書きしQ=1を返す
フラグが立っていると、上書きせずにQ=0を返す
F(8)A(0) LAMテスト
F(10)A(0) LAMクリア
F(14)A(0) LAMセット
F(24)A(0) Disable LAM
F(26)A(0) Enable LAM
【注意】
シリアルナンバー454から、73Aモデルは標準機能としてメールボックスを組み込みました。この機能によってデータ転送、Qレスポンス、LAMレスポンスのテストを、特別なモジュールの必要無しに行うことができます。73A-1では違いますが、メールボックスはデフォルトでイネーブルになっています。標準的な73AモデルではAuxiliary
Control Busも組み込んでいるため、メールボックスはAuxiliaryコントローラーからも、上記と同じようにアクセスすることができます。
10.0 FASTCAMAC Option
73A-2は、U.S.NIM協会で推奨されたDOE/SC-0002ドキュメントに沿った手順で、レベル1のFASTCAMAC読込みを行うことができます。この機能はスイッ��#2でイネーブルにできます。このモードでは、CAMAC���������������400nsecのわずかなインターバルの複数のS1���������������������れるように拡張され、S2パルスで終わります。各S1でCAMACワードを転送するように設計されたCAMACモジュールを使うことで、7.5MB/secの転送レートが可能です。これを達成するためには、SCSIホストアダプタには同期SCSIモードにおいて少なくとも10MB/secの転送能力が必要になります。FASTCAMACレベル1読込みは、CAMAC1ワードより大きい転送長のときに、CAMACファンクションコードF(5)を使って実行されます。すでに使用中のソフトウェアには、変更の必要はありません。