KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

VMEの基礎
2002 年 8 月 4 日 11 時 37 分
投稿者: 松本偉史

筑波大学の松本です。
いつもお世話になります。

VMEを使おうとwebや図書館などあっちこっち見て回ったのですが、いまいちつかめません。
とくに初期化手順が人によっていろいろなので
良く分かりませんでした。

そこで、お尋ねします。
mmap()を使う場合の手順は

1) open( "/dev/vmedrv..." ... )
2) mmap( ... )
3) memset( ... )

というのが多い気がしますが、その他にやるべきことは
あるのでしょうか?
malloc(...)を使うこともあるようですが・・・

どうしようもなく初心者ですが、ついでにVMEを使い始めたひとが参考にできるような
本やウェブページなどありましたら教えてください。よろしくお願いします。



2002 年 8 月 6 日 17 時 12 分
投稿者: 榎本 三四郎


vmedrv で mmap() を使うには、vmedrv のサンプルにあるように、
単に "/dev/vmedrv..." を open() して、適当なパラメータとともに
mmap() を呼ぶだけです。これにより、VME クレートに入っている
モジュール上のアドレス空間に直接アクセスできるようになります。終ったら
munmap() して close() してください。

mmap() が返すポインタによって指される領域に普通に読み書きすると、
それはそのままモジュール上の対応するアドレスへの読み書きに変換されます。
多くのモジュールは、レジスタと呼ばれる特殊なアドレス領域を持っていて、
そこに適当な値を書き込むことによってモジュールをコントロールしたり、
あるいはそこから値を読むことによってモジュールのステータスを得たりします。
もちろん、モジュール上のデータ領域がそのまま VME から見たアドレス空間に
マップされることもあります。

多くのモジュールでは、最初にいくつかのレジスタにアクセスして、初期化したり
パラメータの設定を行ったりします。そこで何をやるのかは、完全にモジュール
の仕様次第です。例えばマニュアルに以下の記述があったとします。

Register Table
==============
  Offset Address (HEX)    Name      Description
  --------------------------------------------------
     0x0100               CSR       write 0 to reset
     続く
  --------------------------------------------------

で、最初にモジュールをリセットしたければ、mmap() で返されたアドレス
(これはモジュール上の offset address 0 を指す) に整数で 0x0100 を
足したアドレス(ここに CSR という名前のレジスタがある) に 0 を書いてやれば
いいことになります。繰り返しますが、このあたりの操作は完全にモジュールの
仕様次第です。

VME 自体についての参考書は私はあまり知りません。私が読んだのは10年くらい
昔のインターフェース誌の特集記事(正確な号数は今は分からないです。必要なら、
来週大学に戻ったら調べてみます) と VME の仕様書くらいです。ただ、自分で VME の
デバイスを作るとか、デバイスドライバを書くとかするのでない限り、モジュールや
コントローラのマニュアルでとりあえず足りると思います。


2002 年 8 月 12 日 11 時 26 分
投稿者: 榎本 三四郎

私が見つけたVMEの参考資料は以下のとおりです。

インターフェース 1993年4月 最適なVMEシステムの構築
インターフェース 1987年2月 VMEバスシステム完全マスタ
インターフェース 1985年8月 VMEバスの徹底研究

あと、大学に仕様書 「VMEバス・アーキテクチャ・マニュアル Revision C.x」 VME MEMBER
がありましたが、これがどこで手に入るかは知りません。ただ、上記のインターフェース誌の
記事は十分詳しいので、少なくともソフトウェア周りでは、ほとんどのことは仕様書なしでも
できると思います。

mmap() などの実際の使い方や振舞いなどは、VME というよりは UNIX の問題なので、
もし詳しく知りたいのならば、UNIX の低レベル機能についての資料(システムプログラミングや
カーネルアーキテクチャについての解説書など)をあたる方がいいと思います。
(VME のモジュールを使うだけなら、必ずしも必要ではないと思いますが...)


ありがとうございます。
2002 年 8 月 12 日 23 時 53 分
投稿者: 松本偉史

松本です。いつもありがとうございます。

わざわざ調べて頂き、ありがとうございます。
言われた通りハードウェアマニュアルと
しばらくにらめっこしてたら分かりました。

ジャンパピンの設定がおかしかったので
いくらopen()してmmap()やread(),write()を
やってもだめだということが分かりました。そのあと、教えて頂いた通りに書き込んでいったら
ちゃんと動きました。

インターフェース 1987年2月 VMEバスシステム完全マスタ

は別ルートから知ったのでみてみました。
その他についてはこれからちょっとKEKで見てこようと思います。

ありがとうございました。


このスレッドに記事を投稿する