PIC18で始めるUSBデバイス自作 その1:サンプルプロジェクトを動かす


はじめに

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に接続します。
基板は図の向き、位置に差し込んでください。

そして、Make and Programボタンを押します。

このような画面が出たら、PICkit3の下にぶら下がっているSNから続く機器を選択してください。

本当に電圧掛けていいのか?と聞かれますのでOKをクリック。

あとはしばらく待てば、書き込みが完了します。
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

日本語データシート