ch552tでvendor specificなUSB-GPIBアダプタ
先日,ch552tを使ってUSB-GPIBアダプタを作ったが,これにはいくつかの欠点があった. RENが制御出来ないのは,ch552tのピンの数の問題なので仕方がないが,binary通信が出来ないとか,データは256バイトまでしか扱えないとか,パラレルポールが出来ないなどである. binary通信は特殊文字をエスケープするとかの処理をすれば可能であり,データサイズもバッファを増やしたりバッファサイズで区切って処理することで対応でき,パラレルポールに関しては適切にプログラムを書けば対応はできるはずだ. しかし,それらのためにはマイコンのプログラムを書き換える必要があり,c言語で実装するのが面倒である.
vendor specificな機器の作り方も分かったので,それを応用すればこれらの問題を解消したUSB-GPIBアダプタが作れるのでは無いかと思ったので,作ってみた. ハードは以前のままで,マイコンのソフトだけを入れ替えれば良い. hand shake以外の制御信号はcontrol transferを使って制御し,データの転送はbulk transferを使って行って,マイコンがhand shakeをするというように設計した. データはバッファサイズである64バイト毎に区切られるが,GPIB側の処理が終わったらACKとすることで,大きなデータも扱うことができるようになる. multi-lineコマンドも,ATNしてからbulk transferしてATNを下げるという方法で実現している. PC側のソフトはrubyで書いてみた. デバイスにアクセスするためには,権限の問題がある場合もあるが,ch55xduinoのインストール時に設定していれば問題無い. マイコンとPCのソフトは,私のhomepageのツールの装置制御とマイコンのところにあるので,ここでは割愛する. まだ,検証が十分では無いので,細かいバグは残っているかも知れないが.
原理的には他のUSB-GPIBアダプタと互換性のあるものも作れるかも知れないが,プロトコルを解析するのも面倒だし,使う分には独自の仕様で十分だろう. GPIBを使い始めて以来,様々なGPIBアダプタを作って来たが,ほぼ満足できる仕様になったと考えている. 価格面ではこれ以上下げるのはほぼ不可能だし,RENが使えない以外で性能的には問題無い. PC側のソフトはまだ改善の余地はあるし,ハードを簡単に作れるような基板なども設計すれば,さらに良いものができるかも知れない. しかし,世の中にはすでに様々なGPIBアダプタがあるので,このアダプタが広まる可能性は低いとは思うが,今後GPIBを使うときには,活用して行こうと思う.