Baumkuchen’s Workshop

バイオリンと電子工作、DIY、ジョギングなど。

データロガーの改善(ソフト編)PICでUSBインターフェース


USBインターフェース

 いよいよ、USBインターフェースのプログラムを作って行きます。

 

f:id:Baum_kuchen:20200606101117j:image

 マイクロチップ・ライブラリ(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が通ったのでパソコンにつなげてみます。なんか、反応はありましたが、デバイスとして認識されません。

バイスディスクリプターが間違ってないか何度もチェックしましたが、正しそう。

はて何ででしょうか。これから、どうやってトラブルシューとしたものか。

f:id:Baum_kuchen:20200531222549p:plain

トラブルシュート(ハード編)

原因探求のため、まずは、ハード的なチェックということで、USBのD+とD-の波形ががリセット時に正しく(それなりに)を確認します。USBフルスピード信号波形のネット記事を参考に、D+とD-の波形をオシロスコープで測って見ます。

結果がこれです(一応はかりました。上がD+、下がD-) 

f:id:Baum_kuchen:20200601231704j:plain

が、測っているときに大問題を発見。なんと、D+とD-の配線をテレコにしてしまっていました。ショック。

製作した回路図と、PICのマニュアル、USB端子番号を良く見比べると、完全に逆。何たる失態、何たる初歩的なミス。よくよく見ると、PIC18F14K50とPIC24FJ64GB002のD+とD-の並びが逆ではないか。PIC24FJ64GB002に載せかえるときにマニュアルをよく読まずに回路図作ってしまったようです。

f:id:Baum_kuchen:20200602001829p:plainf:id:Baum_kuchen:20200602001900p:plain

 左:PIC18F14K50     右:PIC24FJ64GB002

早速配線を修正して信号波形を測ってみました。何となく、良い感じです。

f:id:Baum_kuchen:20200601232322j:plain

 パソコンからもデバイスとしては認識できることが確認できました。USB Composite Deviceがめでたく現れました。(まだ、エラーは残ってますが) 

f:id:Baum_kuchen:20200601230735p:plain

まずは、第一段階クリアといったところでしょう。

 ハード完成(回路図、実態配線図&主要部品)

回路図をアップし忘れていいたので、ほぼフィックスしたので、アップします。

f:id:Baum_kuchen:20200606142849p:plain

f:id:Baum_kuchen:20200606145212p:plain

また、主要部品リストは次の通りです。

 トラブルシュート(ソフト編)

 MPLABのトレース機能を使い、内部ステータス変化、エンドポインタの設定など、確認して見ましたが、異常な所は無さそうです。そもそも、ライブラリの動きが、何が正しいかも想像ですが。

そこで、もう一度、デバイスディスクリプターの定義ファイルをライブラリのサンプルや、参考図書のサンプルと丹念に比較。

バイスディスクリプターファイルをちょっとずつ修正しては、パソコンのUSBポートにつないで確認の繰り返し。そうこうしていると、Windowsのデバイス画面でプロパティを見てみると"デバイスが構成されました"の文字が。

f:id:Baum_kuchen:20200614015527p:plain

ひょっとしてと思い、マイコンピュータを開いてみると、I:ドライブ*1が出来ているではないですか。開くと、中に見慣れたファイルが。できました。やっと、USB経由でSDカードにアクセスが出来ました。

Composite Deviceのため、USBドライブ以外に”ほかのデバイス”ができており、上の写真のプロパティはそのデバイスのもの。構成はされたけど、デバイスドライバー必要らしくCDC DEVICEの作動確認は未だです。

また、一山超えました。結局は、デバイスディスクリプターファイルが悪かったと言う落ちですが。

 

(2020.6.13更新)

 

 

*1:HDD、SSDなど多数のため