- ベストアンサー
USBのデバイスクラスの違いについて
PICでアナログ値を取得し、データをそのままPCに転送し出力する。 もしくは、得られたデータを一度SDカードなどにためて、その後一度にPCに転送する。 このPICとPCのインターフェースにUSBを使いたいのですが、 どのクラスを使うのが最適なのかわかりません。 CDCクラス、Genericクラス、HIDクラスのどれでも可能な気がするのですが、 それぞれを使った時の良い点悪い点などありましたら教えてください。 また、CDCは仮想COMポートと本に書かれていたのですが、どういう意味でしょうか? ご存知の方、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1、ドライバを作りたくないならどれかのクラスを使えばよいということでしょうか? 大量データの転送及びデータの欠如を考慮するとStrageクラスがいいと思いますが 大変だと思います。 PC側はただのDISKに見えるので、ファイルをコピーするようにデータがとれますが ボード側は、Strageクラスに見えるようなディスクリプタ、SCSI/IDEのどちらかの対応 ファイルシステムの組み込みとなるので・・・ 実際には私もやったことがないので、その他にも実装しなければならないことが あるかもしれません。 2、RS232Cの代わりにUSBを使っているということは、RS232CでPCと通信するのと 同じように扱えるということでしょうか。(printfなどの関数で通信できるということ?) PC側からはCOMで通信できます。ボード側からは、stdin/stdoutが232Cになるように実装 しているのであればprintfが使用できます。でもこれは遅すぎて使えないと思います。 バイナリ転送には向かないので、テキスト化したりすると倍の時間がかかりますし。 やはり、自分たちでI/Fを決めたBULK転送を行い、可能ならドライバをつくる。 ドライバが作れないのであれば、libUSBとかWinUSBなどの汎用ドライバを使用する。 PCはWindowsだと思って書いていますが、libUSBはLinux版もあるらしいです。
その他の回答 (1)
- gha10320
- ベストアンサー率71% (5/7)
CDC/HIDなどの決まったクラスにすると、そのクラスにあった転送を PICマインコンボード側で実装しなければなりません。 例えばStorageクラス(USBメモリ等)にすると、 BULK IN/OUTを実装して、かつコマンドは SCSIorATAなどのそのクラスにあったものを実装する必要があります。 その代わりにドライバを作る必要がなくなります。 またHIDクラスにすると、インタラプトIN/OUT転送を実装しなければ なりません。 ドライバを作れるまたはlibUSBなどフリーのドライバを使うのであれば その他のクラスとして、自分たちでI/Fを決めて転送した方が簡単だと 思います。通常はBULK転送で行えばいいと思います。 仮想COMがCDCクラスになっていたことは知りませんでしたが 仮想COMとは、以前のPCにはRS232Cのポートがついていたのですが 最近のPCには全くついていません。そのためUSBで接続して それをCOMポートに見せかけています。 PICマイコンのボードに232Cがついていませんか? マイコン側からprintfすると232C経由でPCのターミナルソフト(TeraTrem等)に 表示されると思います。 もちろんボードがでの実装が必要です。
補足
回答ありがとうございます。 もう少し教えていただけると有り難いです。 1、ドライバを作りたくないならどれかのクラスを使えばよいということでしょうか? 2、RS232Cの代わりにUSBを使っているということは、RS232CでPCと通信するのと 同じように扱えるということでしょうか。(printfなどの関数で通信できるということ?) 以上ですが、よろしくお願いします。
お礼
詳しい回答、ありがとうございました。 参考にさせていただき、勉強してみます。