汎用USB-IO

Morphy USB-IO の仕様

Fex広場

  • 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に似せたほうが良い。

  • それ自体、適当な演習課題となるのではないだろうか。
  • (そうでもしないと、いつまでたってもライターばかり作っていて進歩がないと言われる)
  • 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

  • ソース付きで、便利なプラグインを発見。

瓶詰堂さん作です。

先駆者ですね。