#はじめに
USBデバイスを作ってみたくなりました。
今まではFTDI社のFT232やFT245などを使ってきましたが、より簡単に繋いだり、
マイコンと直結させたりしたいといった欲求を満たすには、USBを勉強する必要があります。
ので、まず、日本では比較的ポピュラーなmicrochip社のPIC 18FシリーズのUSB内蔵品を使って、
USBの世界に触れてみようと考えました。
##注意
- USBの物理層には触れません
- USBの接続に係る部分は勉強せず、フレームワークを使用します
- とりあえずベンダークラスデバイスで、libusb1.0を使ってPCと通信できるのを目標とします。
#今回やること
- PICの開発環境を導入します
- USBフレームワークのデモを書き込みます
- HID mouseデモを実行し、マウスがグルグル回るさまを眺めて終わりです。
#準備するもの
マイコンの開発のため、物理的なデバイスが必要となります。
##マイクロチップ PICkit3(¥4,980)
PICの書き込みに使用します。
18F14K50へ書込み可能な他のICSPライターで代用しても構いません。
http://akizukidenshi.com/catalog/g/gM-03608
秋月電子通商で購入できます。
引用元: 秋月電子通商
##PIC18F14K50使用USB対応超小型マイコンボード(¥800)
USB端子・書き込み端子が揃っており、公式サンプルがあります。
ピンヘッダも入っています。USB機器開発を始めるにはうってつけです。
http://akizukidenshi.com/catalog/g/gK-05499/
秋月電子通商で購入できます。
##ハンダこて・ハンダ
適時購入してください
##Windows PC
Windows 10 64bitで動作を確認しています。
#開発環境の導入
##MPLAB X
統合開発環境です。アセンブラが同梱されています。
こちらからダウンロードし、インストールしてください
http://www.microchip.com/mplab/mplab-x-ide
MPLAB® X IDE v4.01で動作を確認しています。
##XC8 Compiler
コンパイラです。USBブートローダーが使えないことに目をつぶれば、
最適化なしのフリー版で十分です。
こちらからダウンロードし、インストールしてください
XC8,XC16,XC32がありますが、XC8だけで十分です。
http://www.microchip.com/mplab/compilers
MPLAB® XC8 Compiler v1.43で動作を確認しています。
##Microchip Libraries for Applications
これがUSBフレームワークとデモになります。
こちらからダウンロードし、インストールしてください
http://www.microchip.com/mplab/microchip-libraries-for-applications
Microchip Libraries for Applications(v2017-03-06) Windows版で動作を確認しています。
#組み立て
マイコンですので、組み立てが必要です。
このようにピンヘッダをはんだ付けしてください。
今回、回路は組み立てず、USB機能だけ使うので、書き込み用ピンヘッダのみでも構いません。
#デモを書き込もう
##MPLAB Xを起動する
スタートメニューから起動してください。
コマンドプロンプトが立ち上がった後、JAVA製のIDEが立ち上がります。
中身はNetBeansらしいです。そのため、NetBeansプラグインが使えるようです。
##デモプロジェクトを開く
File→Open Projectをクリックし、開いたダイアログで以下のパスを開く。
C:\microchip\mla\v2017_03_06\apps\usb\device\hid_mouse\firmware
そして、以下のプロジェクトを読み込む。
low_pin_count_usb_development_kit_pic18f14k50.x
##書き込みツールの切り替え
USB Device - HID - Mouse と書かれたプロジェクトを右クリックしてpropertiesを開く。
開いた画面のメニューの「Conf: [LPCUSBDK_18F14K50]」をクリック。
初期設定では「Hardware Tools」にて「ICD3」が選択されていますが、「PICkit3」をクリックし、OKを押します。
これで書き込みツールが切り替わります。
※OKがクリックできず、Cancelしか選べないときはIDEの調子が悪いことが多いため、
IDEを起動し直し、プロジェクトを開き直すと行ける場合があります。
##書き込み時電源供給の設定
今回は、18F14K50基板を単体で(電源供給すること無く)書き込むため、その設定も行います。
まず、再度プロジェクトのpropertiesを開きます。
先程までICD3が表示されていた左メニューがPICKit3になっていますので、クリック。
そして、画面上の「Option categories:Memories to Program」をクリックし、「Power」に変更。
「Power target circuit from PICKit3」のチェックボックスをオンにし、OKをクリックします。
これにより、書き込み時にPICKit3から電源供給がされるようになります。
「Voltage Level」は3.0~5.0の間であればOKです。
##ビルドと書き込み
PICKit3に基板を差し込み、PICKit3自体もPCに接続します。
基板は図の向き、位置に差し込んでください。
このような画面が出たら、PICkit3の下にぶら下がっているSNから続く機器を選択してください。
あとはしばらく待てば、書き込みが完了します。
Output欄にPrograming/Verify completeの表示が出れば完了です。
#デモのテスト
PICKit3から基板を引き抜き、USBケーブルを接続してください。
PICKit3同梱のminiBケーブルでOKです。
しっかり奥まで差し込むと、PICKit3のときより煌々と明るく電源LEDが光り始め、PCにマウスとして認識されるはずです。
こんな感じでひとりでにマウスがぐるぐる回れば成功です。
ただし、このデモは本来デモ基板用のデータなので、スイッチがつながっている前提らしい挙動をします。
基板の足に適当に触ると、挙動が変わったり止まったりします。
#おわりに
今回は、PIC 18F14K50を使ったUSB機能のデモを動かすまでを紹介しました。
次はベンダークラスでバルク転送するデモを動かした後、
簡略化したプログラムを構築する予定です
#疑問
バッファにデータを入れないまま、送信要求を受けるとどうなるのだろう。
NAKで待たされる?あっ、バルク転送タイムアウト?それとも0バイトが帰る?
サンプルの書き方的には0バイトが帰ってるっぽいかな。
#参考文献
###現状のフレームワークの読み解き方、必要なファイルの選別
PICでUSBを動かす(その2) loops/ウェブリブログ
http://loops.at.webry.info/201404/article_3.html
###18F14K50全般の使い方
はじめてのPIC 18F14K50
http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_00.htm
###日本語データシート
http://ww1.microchip.com/downloads/jp/DeviceDoc/41350D_JP.pdf