汎用USB-IO の変更点


*Morphy USB-IO の仕様 [#d73589d9]

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

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

-すでに、いしかわさんが、[[tiny2313で汎用USB-IOを制作:http://www.asahi-net.or.jp/~qx5k-iskw/darkside/0510dark.html]]されているので、参考になるかもしれない。
-すでに、いしかわさんが、[[AT90S2313で汎用USB-IOを制作:http://www.asahi-net.or.jp/~qx5k-iskw/darkside/0510dark.html]]されているので、参考になるかもしれない。

-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だけが辛うじて生き残っている)
-パラレルはケーブルの太さ(取り回しの悪さとか信号のなまり具合)が問題?