USBインターフェース
いよいよ、USBインターフェースのプログラムを作って行きます。
マイクロチップ・ライブラリ(MLA)
マイクロチップ・ライブラリで使うのは、そのものずばりのUSBライブラリ。
framework/usbフォルダ以下の次のファイルです。これは、プロジェクトに登録するだけでコピーは不要です。
- src/usb_device.c
- src/usb_device_cdc.c
- inc/usb_device_cdc.h
- src/usb_device_msd.c
- inc/usb_device_msd.h
また、apps/usb/deviceフォルダのサンプルプログラムから、下記をコピーしてプロジェクトに登録。一旦、基本的なBuildが通ったら、それぞれ合体、改善をしていきます。なお、usb_config.h、usb_event.c、usb_descriptoresは、それぞれのフォルダにあるものを合体しています。
- cdc_basic/framework/demo_src/app_device_cdc_basic.c -(不要箇所コメント)
- cdc_basic/framework/demo_src/uapp_device_cdc_basic.h -変更なし
- msd_sd_card_reader/framework/demo_src/app_device_msd.c -FILEIO_SD_DRIVE_CONFIG定義追加(fileioと共用)
- msd_sd_card_reader/framework/demo_src/app_device_msd.h -変更なし
- usb_config.h -msdにcdc_basicを追加
- usb_descriptors.h -msdにcdc_basicを追加
- usb_event.c
この状態でBuildが通るまで一旦仕上げます。
USBデバイスととして認識されず
buildが通ったのでパソコンにつなげてみます。なんか、反応はありましたが、デバイスとして認識されません。
デバイスディスクリプターが間違ってないか何度もチェックしましたが、正しそう。
はて何ででしょうか。これから、どうやってトラブルシューとしたものか。
トラブルシュート(ハード編)
原因探求のため、まずは、ハード的なチェックということで、USBのD+とD-の波形ががリセット時に正しく(それなりに)を確認します。USBフルスピード信号波形のネット記事を参考に、D+とD-の波形をオシロスコープで測って見ます。
結果がこれです(一応はかりました。上がD+、下がD-)
が、測っているときに大問題を発見。なんと、D+とD-の配線をテレコにしてしまっていました。ショック。
製作した回路図と、PICのマニュアル、USB端子番号を良く見比べると、完全に逆。何たる失態、何たる初歩的なミス。よくよく見ると、PIC18F14K50とPIC24FJ64GB002のD+とD-の並びが逆ではないか。PIC24FJ64GB002に載せかえるときにマニュアルをよく読まずに回路図作ってしまったようです。
左:PIC18F14K50 右:PIC24FJ64GB002
早速配線を修正して信号波形を測ってみました。何となく、良い感じです。
パソコンからもデバイスとしては認識できることが確認できました。USB Composite Deviceがめでたく現れました。(まだ、エラーは残ってますが)
まずは、第一段階クリアといったところでしょう。
ハード完成(回路図、実態配線図&主要部品)
回路図をアップし忘れていいたので、ほぼフィックスしたので、アップします。
また、主要部品リストは次の通りです。
- PIC24FJ64GB002
- GPSモジュール AE-GYSFDMAXB(太陽誘電製)
- LCDモジュール SC1602BSLB
- 74HC164 (LCDモジュールへのデータのシリパラ変換用)
- microSDカードスロット AE-MICRO-SD-DIP
- 3.3Vレギュレータ NJU7223DL
トラブルシュート(ソフト編)
MPLABのトレース機能を使い、内部ステータス変化、エンドポインタの設定など、確認して見ましたが、異常な所は無さそうです。そもそも、ライブラリの動きが、何が正しいかも想像ですが。
そこで、もう一度、デバイスディスクリプターの定義ファイルをライブラリのサンプルや、参考図書のサンプルと丹念に比較。
デバイスディスクリプターファイルをちょっとずつ修正しては、パソコンのUSBポートにつないで確認の繰り返し。そうこうしていると、Windowsのデバイス画面でプロパティを見てみると"デバイスが構成されました"の文字が。
ひょっとしてと思い、マイコンピュータを開いてみると、I:ドライブ*1が出来ているではないですか。開くと、中に見慣れたファイルが。できました。やっと、USB経由でSDカードにアクセスが出来ました。
Composite Deviceのため、USBドライブ以外に”ほかのデバイス”ができており、上の写真のプロパティはそのデバイスのもの。構成はされたけど、デバイスドライバー必要らしくCDC DEVICEの作動確認は未だです。
また、一山超えました。結局は、デバイスディスクリプターファイルが悪かったと言う落ちですが。
(2020.6.13更新)