(2015.6.13 作成)
(2020.11.28 更新)
PCとマイコンの通信を行う方法はいくつかありますが、ここではUSBを用いて通信を行う方法を紹介しようと思います。ただ、ここではUSBの規格などについて詳しく紹介せず、HIDという規格でSTM32マイコンと通信するやり方について解説しています。一部のライブラリについてはこちらでダウンロードすることができます。
USB自体は広く普及していますのでコネクタはよくご存知だとは思います。USB2.0や3.1などの規格がいろいろとあることはご存知だと思うのですが、さらにデータ転送の種類?もいくつかあり以下の4種類が規定されています。
コントロール転送 | 接続を確立させるなど、USB通信自体をコントロールする。 |
バルク転送 |
HDDなどの大容量データ転送用。 ファイルシステムが必要? |
アイソクロナス転送 |
音楽の転送など、定期送信を行う用途。 エラー訂正が行われない 。 |
インタラプト転送 | 小容量のデータ転送用 |
通常、USBでPCへ接続するためにはデバイスドライバを作成して、利用する各PCへインストールする必要があります。しかし個人が趣味のレベルでデバイスドライバを開発するのはとても大変です。しかしインタラプト転送の一種であるHID (Human Interface Device)という規定に従えばドライバ開発無しにPCへの接続が可能になります。
このHIDについてですが、本来は名前の通りキーボードやマウスなど人が使用するデバイス用の規定です。しかしどのPCにもインターフェースは存在しているためOSが標準でHIDドライバを準備してくれてます。よってこのページで紹介している方法はOS標準のHIDデバイスドライバを使用してマイコンとPC間で任意のデータ送受信を実現するということになります。
メリットですが、
などなどと、Arduinoで通常行われているRS-232C(UART)+ターミナルソフトに比べても十分なメリットがあります。
ここではSTM32F103基板で動作させるコードを紹介していますが、他のSTM32基板でも同様に動作させることができると思います。またArduino用のコードは紹介していません。Arduinoの場合はLeonardoのような一部のボードを使用するかソフト的に作成することが出来るようです。
上記の通りメリットも多いUSBのHID通信ですが、いいことばかりではなく以下のような注意点があります。必要に応じてCDC通信と使い分けるのが老いと思います。
またこのページで紹介している方法は任意のデータを送受信する方法ですが、レポートディスクリプタを書き換えればマウスやキーボードとして本来のHIDデバイスとして動作させることも可能だと思います。
マイコンでよく使用されるI2CやSPIと異なりUSB通信は仕様が複雑怪奇です。管理人も良くわからずほぼブラックボックスとして使用しています。しかしそれでも一応動いていますので、ご参考になれば幸いです。
まだコメントはありません。