汎用USB-IO
Morphy USB-IO の仕様†
Fex広場
- http://f1.aaa.livedoor.jp/~fexx/usbio/index-ja.html
- http://f1.aaa.livedoor.jp/~fexx/usbio/spec-ja.html
- MorphyのUSB-IOはCypressのCY7C630001Aで構成されている。回路は単純そのもの。
- 8bitのPort0と4bitのPort1が存在する。
- 出力が、プルアップされたオープンコレクタなので、入出力方向の制御は特に不要。
- 但し、入力に使う前には、そのポートに1を書き込んで、プルアップ状態にしなければならない。
- tiny2313で同様のことをやろうとするならば、出力値を書きこむと同時にDDRレジスタにその反転値を入れてやる必要がある(方向レジスタは0が入力なので)
- 現状のHIDaspやHIDmonでやっている方法は、HidD_SetFeatureでコマンドを実行させて、HidD_GetFeatureで結果を取り出すという方法なので、HIDパケットが1往復する。
- 汎用USB-IOとして使用するには、それ専用のReportIDを割り当てて、HidD_GetFeatureで即座にポートを読んで値をPCに転送させたほうが良い。
- HIDでなく、普通にコントロール転送を使うのであれば、1回のコントロール転送でコマンド発行と結果の受け取りが完結する。
というわけで、HIDaspの汎用USB-IO化を行うよりも、専用のHIDデバイスを書いて、汎用USB-IOに似せたほうが良い。
- それ自体、適当な演習課題となるのではないだろうか。
- (そうでもしないと、いつまでたってもライターばかり作っていて進歩がないと言われる)
- すでに、いしかわさんが、AT90S2313で汎用USB-IOを制作されているので、参考になるかもしれない。
- VBなどで書かれた汎用USB-IOをコントロールするアプリは、たいていReadFile(),WriteFile()が使われているようだ。
- VBの文法は良く知らないが、Cで書かれたものより複雑になっているものもある。
- 8ビットのポートと4ビットのポートの使い分けだが、基本的にはパラレルポート、もしくはプリンターポートのような使い方を想定しているらしい。
- つまり、8ビットのデータをセットアップして、4ビットポートのどれかの信号をストローブ信号のようにアサートしてプリンター(もしくは何かのパラレルデバイス)に1バイトのデータを送る(あるいは受ける)のだ。
- 今となっては、パラレルプリンターはもう見かけることもなくなったので、8ビットパラレルで送受するような機器はあまり思いつかない。(GPIB機器とか)
- とかいってたら、古い奴を思い出してしまった。
- PC/AT互換機のはしりのころ(i386が486になった瞬間くらい)安いHDDはIDE接続だけれど、SCSIのHDDをパラレルポート経由で接続するという怪しい技が流行った。(変換ケーブルを作ったことがある)
- ホストアダプタのAHA−1542とかはかなり高価だった。2万円くらい?(Z80がコントローラになっていた)
- X68000の外付けHDDはSASIという、SCSI以前のパラレル転送規格だったが、SASIポートにSCSIのHDDを繋ぐという技も流行った。SxSIというドライバーだった。
- IOmegaの外付けドライブがパラレル経由。
- SANDiskのCFカードアダプタがパラレル経由。
- パラレルの拡張規格にEPPとかECPとかもあった。(今もサポートされている。パラレルコネクタが運良く付いていれば)
- もうどれもが絶滅済み。(ATAPI CDROMだけが辛うじて生き残っている)
- パラレルはケーブルの太さ(取り回しの悪さとか信号のなまり具合)が問題?
USB-IO用プラグイン for HSP†
- ソース付きで、便利なプラグインを発見。
瓶詰堂さん作です。
先駆者ですね。