USB CDC

(2017.8.4 作成)

 これまでマイコン(STM32)とパソコン間のUSB通信でHID(Human Interface Device)方式のライブラリを作成して公開していました。今回新たにCDC(Communication Device Class)のライブラリを追加して作成しました。CDCを含むライブラリはこちらからダウンロードしていただけます。

 USB通信やライブラリの使い方について簡単に触れていますので、HIDのページもあわせて参照下さい。

 さて、今回新たにCDCによる通信を行えるようにしたのですが、これまで公開していたHID方式と比べて以下のような違いがあります。

  • CDCはHIDに比べてバルク転送を行うため高速です。1パケットの通信速度は同じかもしれませんが、HIDは一定の間隔を置いて送信しているのに対しCDCはUSBの空きタイミング全てを使って送信するので結果として早いです。直接測ったわけではありませんが、数倍速いと思います。USB Full speedの規格12Mbpsまでは出ていないと思いますが、8Mbpsぐらいは出ていると思います。
  • PC側にデバイスドライバが必要です。STM32の場合はSTマイクロさんがVCP(Virtual Com Port)ドライバを公開していますので、使用する各PCにこれをインストールする必要があります。
  • PC側ソフトを作るのがCDCの方が簡単です。CDCを使用するにはC#だとserialportクラス。C++だとboostのasioクラスなど標準的なクラスが存在します。一方HIDは様々な有志の方が作成されているライブラリを自分で探してくる必要があります。本来HIDは任意のデータフォーマットを転送する目的のものではないので仕方ないですね。
  • CDCはデバイスの脱着を検出できないです。こちらで公開しているHIDクラスのサンプルではデバイスの付け外しでイベントが発生するのですが、CDCでは外してもPC側で知ることはできません。頑張ればできると思いますが、標準のドライバでは非対応だと思います。

 このようにHIDとCDCではいくつか違いがありますので、適宜使い分けをしていただければと思います。

 ここでダウンロードできるUSB CDCクラスは一応HIDクラスとほぼ同じ使い勝手で、前提となる知識なしで使えるように作ったつもりです。詳しくはマイコン(STM32)側PC側のページを見てください。