[KEK Online Group] → [Nakayoshi's Page] → [CAMAC-USB Device Driver] → [User's Guide of CAMAC-USB Library]
[Draft]USB-CAMAC デバイスドライバ外部仕様
--- User's Guide of USB-CAMAC Driver and Library for Linux ---
PC/Linux で SCSI Crate Controller と USB-SCSI 変換ケーブルを
使用して USB 接続で CAMAC 操作を行なうための方法について説明する.
本システム開発の目的は「ユーザビリティ」の追求である.
小規模な原子核・素粒子実験のデータ収集(DAQ)システムでは,
デスクトップ PC とバスアダプタを使用して CAMAC や VME と
データ転送を行なうスタイルが一般的である.
従って DAQ で使用可能な PC はおのずと限定(専用カードをインストール済み
か, もしくは新たにインストールする必要があるという意味で)されていた.
しかし, PC とその周辺機器との接続バスとしてほぼデファクトスタンダードと
なりつつある USB を利用することで
上述のような専用カードを必要とせず USB ポートを持つ PC から
DAQ が可能となる. より具体的なイメージとしては, 本システムの
ソフトウエア(USB-CAMAC ドライバおよび CAMAC ライブラリ)を
インストールすれば NOTE PC や専用カードがインストールされて
いない, いわゆる普通の PC を使って CAMAC DAQ システムが可能となる.
ユーザは, 専用カードのインストールやインストール後の
割り込み番号に衝突がないか等の確認作業から開放される.
- Hardware Preparation
この USB-CAMAC ドライバおよび CAMAC ライブラリを使って
USB で CAMAC にアクセスするためには以下のハードウエアが
必要である.
- USB インターフェイス付の PC
- KineticSystems 社 CAMAC Crate Controller 3929
- Logitec 社 USB-SCSI 変換ケーブル LUB-SC
- SCSI 変換アダプタ(ピンハーフピッチ 50pin メス−アンフェノール
50pin オス)
- Software Preparation
- Linux カーネル 2.4.0 以上
- USB-CAMAC 用ドライバ
- USB-CAMAC 用 CAMAC ライブラリ
- Hardware Installation
- CAMAC クレートの右端に 3929 をセットする.
- USB-SCSI 変換ケーブルの SCSI 側のコネクタ(50 pin オス)と
SCSI 変換アダプタ(50 pin メス)を接続し SCSI 変換
アダプタ(アンフェノール・オス)と 3929 を接続する.
- USB-SCSI 変換ケーブルの USB 側のコネクタを PC の USBポートへ
接続する.
- Software Installation
- somewhere から USB-CAMAC パッケージをダウンロードする.
- パッケージを展開する.
- USB-CAMAC ドライバーを make する.
- USB-CAMAC ライブラリを make する.
ユーザインタフェースの詳細(Linux 用 USB-CAMAC Library)
- Introduction
Linux で K3929 と USB-SCSI 変換ケーブルを使用して
USB 接続で CAMAC 操作を行なうためのライブラリの説明を行なう. この
ライブラリの関数は大きく次の4つに分けられる. CAMAC デバイスの
open や close 等を行なうためのセットアップ関数, データを
伴わない CAMAC 操作のための関数, データ転送を伴うCAMAC 操作の
関数および CAMAC ブロック転送のための関数である. またこれらの関数
は, KEK オンライングループによりこれまで使用されている関数と同じ
形式とした. 従ってユーザは, かつて DECstation や SPARCstation で
使用した CAMAC ライブラリとほぼ同じ形式で USB から CAMAC へアクセス
することができる.
これらのライブラリの関数は C で書かれたユーザのプログラムから呼ばれる
ことを想定している.
- CAMAC Setup Functions
- CAMOPEN, CAM_Open
- Syntax: int CAMOPEN()
- Description: CAMAC をオープンする.CAMAC にアクセスする前に
1 度呼ばなければならない.
- Arguments: なし
- Return value: success = 0, error = otherwise
- CAMCLS, CAM_Close
- Syntax: int CAMCLS()
- Description: CAMACをクローズする.プログラム終了時に
1 度呼ばなければならない.
- Arguments: なし
- Return value: success = 0, error = otherwise
- NAF
- Syntax: int NAF(int n, int a, int f)
- Description: CAMAC の N, A, F をデバイスドライバで使用する
NAF コードに変換する.
- Arguments:
- n: ステーション番号
- a: サブアドレス
- f: ファンクション
- Return value: NAF コード
- CAMAC Functions(without data)
- CGENZ
- Syntax: int CGENZ()
- Description: CAMAC を初期化する.
- Arguments: なし
- Return value: Return value: success = 0, error = otherwise
- CGENC
- Syntax: int CGENC()
- Description: CAMAC をクリアする.
- Arguments: なし
- Return value: success = 0, error = otherwise
- CSETI
- Syntax: int CSETI()
- Description: CAMAC の inhibit をセットする.
- Arguments: なし
- Return value: success = 0, error = otherwise
- CREMI
- Syntax: int CREMI()
- Description: CAMAC の inhibit をクリアする.
- Arguments: なし
- Return value: success = 0, error = otherwise
- CAMAC Functions(with data)
- CAMAC, CAMACL
- Syntax: int CAMAC(int naf, int *dat, int *q, int *x)
- Description: NAF コードで指定された CAMAC 24bit single action を
実行し,24bit データの転送を行なう.データは dat で
指定されるメモリ領域に read/write される.
- Arguments:
- naf: NAF コード
- dat: データ
- q: CAMAC Q Response
- x: CAMAC X Response
- Return value: success = 0, error = otherwise
- CAMACW
- Syntax: int CAMACW(int naf, int *dat, int *q, int *x)
- Description: NAF コードで指定された CAMAC 24bit single action を
実行し,16bit データの転送を行なう.データは dat で
指定されるメモリ領域に read/write される.
- Arguments:
- naf: NAF コード
- dat: データ
- q: CAMAC Q Response
- x: CAMAC X Response
- Return value: success = 0, error = otherwise
- CAMAC Block Transfer Functions
- CDMA, CDMAL
- Syntax: int CDMA(int mode, int naf, int *buf, int len, int *retlen)
- Description: mode, naf で指定された CAMAC 24bit ブロック転送を行なう.
データは buf で指定されるメモリ領域に read/write される.
- Arguments:
- mode: 次のモードの中から一つを指定する.
QSTOP,QIGNORE,QREPEATE,QSCAN
- naf: NAF コード
- buf: data buffer
- len: data buffer length(Byte)
- retlen: return data buffer length
- Return value: success = 0, error = otherwise
- CDMAW
- Syntax: int CDMAW(int mode, int naf, int *buf, int len, int *retlen)
- Description: mode, naf で指定された CAMAC 16bit ブロック転送を行なう.
データは buf で指定されるメモリ領域に read/write される.
- Arguments:
- mode: 次のモードの中から一つを指定する.
QSTOP,QIGNORE,QREPEATE,QSCAN
- naf: NAF コード
- buf: data buffer
- len: data buffer length(Byte)
- retlen: return data buffer length
- Return value: success = 0, error = otherwise
以下のような手順で CAMAC モジュールからデータを読んでみる. できれば Switch Register
のようなテスト専用モジュールを使うことをお勧めします.(以下では Switch Register の
データを読むことを想定している)
- USB ホストドライバ(usb-uhci.o)をカーネルに組み込む.
$ su
# insmod usb-uhci.o
- USB-CAMAC ドライバ(xcamac.o)をカーネルに組み込む.
# insmod xcamac.o
- 以下のように必要なドライバがロードされているか確認する. 以下のように usb-uhci, xcamac
が表示されれば OK.
# lsmod
Module Size Used by
usb-uhci 22196 0 (unused)
xcamac 7020 0
USB-CAMAC パッケージを展開したディレクトリへ移る.
その下の examples へ移る.
test プログラムを実行する.
-
VME/CAMACデバイスドライバ開発専門研修ホームページ
- Model 3929-Z1A SCSI Crate Controller Instruction Manual, KineticSystems Corporation
- ロジテック USB-SCSI 変換ケーブル LUB-SC
- エレコム SCSI変換 アダプタ AD-PFAM
- Linux デバイスドライバ, オライリージャパン, ISBN4-900900-73-7
- USB Hardware &Software 日本語版, インフォクリエイツ, ISBN4-900741-95-7
- Programming Guide for Linux USB Device Drivers
- 連載「プログラミング工房」, Linux Magazine 2000年 10-12月号, アスキー
- 特集「入出力インターフェイス技法の研究」, インターフェイス 1992年 5月号, CQ 出版
- 特集「USB 対応機器&デバイスドライバの作成法」, インターフェイス 1998年 11月号, CQ 出版
- 特集「USB ターゲット機器の設計法」, インターフェイス 2000年 3月号, CQ 出版
- 「USB-SCSI アダプタの製作」, 佐藤節夫(KEK), トランジスタ技術 2000年 6月号, CQ 出版