HID USB

(2015.6.13 作成)

 PCとマイコンの通信を行う方法はいくつかありますが、ここではUSBを用いて通信を行う方法を紹介しようと思います。ただ、ここではUSBの規格などについて詳しく紹介せず、こちらでダウンロードできるUSB HIDライブラリを使用するための最低限度の知識について紹介したいと思います。

USB概要

 USB自体は広く普及していますのでコネクタはよくご存知だとは思います。しかし実際のUSBによる通信の中身として以下の4種類が規定されています。

コントロール転送 接続を確立させるなど、USB通信自体をコントロールする。
バルク転送 

HDDなどの大容量データ転送用。

ファイルシステムが必要? 

アイソクロナス転送

音楽の転送など、定期送信を行う用途。

エラー訂正が行われない 。

インタラプト転送  小容量のデータ転送用

 通常、USBでPCへ接続するためにはデバイスドライバを作成して、利用する各PCへインストールする必要があります。しかしインタラプト転送の一部として規定されているHID (Human Interface Device)という規定に従えばドライバ開発無しにPCへの接続が可能になります。

 このHIDについてですが、本来は名前の通りキーボードやマウスなど人が使用するデバイス用の規定です。しかしどのPCにもインターフェースは存在しているのでOSが標準でHIDドライバを準備してくれています。

 すなわちここで紹介している方法はOS標準のHIDデバイスドライバを使用してマイコンとPCのデータ送受信を実現しています。

 

メリットですが、

  • 規格がしっかり定まっており、デバイスドライバをインストールしなくても任意のPCと接続が可能です。ここではWindows用のサンプルプログラムも紹介してていますがMacやLinuxでも接続できるはずです。
  • STM32の一部のマイコンはペリフェラルとしてUSBドライバが内蔵されており、ソケットと抵抗さえ準備すればPCと接続できます
  • 活線挿抜(ホットプラグ)が出来るので電源を入れたまま抜き差しができ、乱暴に扱っても大丈夫です。

 などなどと、RS-232C+ターミナルソフトに比べても十分なメリットがあります。 

 ここではSTM32F3DiscoveryとNucleoF401REをHIDデバイスとして動作させるコードを紹介していますが、Arduino用のコードは紹介していません。Arduinoの場合はLeonardoのような一部のボードを使用するかソフト的に作成することが出来るようです。


このサイトのUSBクラスについて

 ここで紹介しているSTM32用USB-HIDプログラムはUSB特有の専門用語(ディスクリプタ、エンドポイントなど)を知らなくても使えるように作成しているつもりです。しかしいくつか必要最低限の知識は必要だと思います。

  1. USBはホストが制御する通信方式です。デバイス(STM32)側から通信を開始することは出来ません。実際にはホストが一定期間ごとに各デバイスにポーリングを行い、その際デバイス側が手を上げていれば通信が開始されます。このポーリング間隔はデバイス側で設定します。このライブラリの場合、デバイスの手を上げるにはデータを送信する(SendDataコマンド)を発行するだけです。
  2. 通信は1パケットを単位として送受信が行われます。パケットは最大64バイトまで設定することができ、このサイトで提供しているライブラリはデフォルトで64バイトに設定されています。それより短いデータを渡しても64バイトになるように後ろに0を追加して送受信します。

 これぐらいの知識があれば最低限使えるようになるのではないでしょうか?

 USB通信自体はI2C, SPIやUARTに比べて仕様が複雑で素人には分かりにくいものです(Bluetoothよりは楽ですが・・・)。少しでも簡単に使うための一助になれば幸いです。

 実際に使用するに際してのマイコン側PC側のサンプルプログラムをそれぞれ用意していますので参考にしてみてください。