KSR用CDI 第2幕 そして途方に暮れる

    バイクネタじゃなくてすみません。
    案の定、KSRのCDIプログラムでハマってきます。


    前回書いた通り、USBで接続できるようにして、点火時期の設定をPC経由でできるようにすることが目標です。
    PC側のプログラムをどうするかというのが大きな問題なんですが、まずはPIC側から考えてます。

    今回やりたいこと&やることは以下。
    1.PICマイコンとPCをUSBでつなぎたい
    2.PICマイコンは使い慣れたPIC24FJ64GB002
    3.PIC24FにHIDデバイスとして作成したプログラムを書き込んで、HIDデバイスとして通信する
    4.PIC側のプログラムはMicrochipのUSBフレームワークを使う
     4.1 フレームワークの「Low Pin count USB Development Kit」というデモボード用のプログラムを参考にして改造
     4.2 「Low Pin...」はPIC18F14K50が実装されているようなので、プログラムはPIC24FJ64GB002用に変更する
     4.3 ブレッドボード上に組んだ回路(PICマイコン)にプログラムを書き込んでサクッと完成

    具体的な作業は4のところになります。
    早速、必要なファイルをピックアップしてプロジェクトに登録、エラーがなくなるまでデバックして、ブレッドボード上に組んだデバイスに書き込みました。
    ここまではあっさりたどり着いたんですが、やっぱりそんなに簡単なわけないですわ。。。
    文章にすると3行なんですけどねぇ。。。


    USBケーブルでPCと接続してもUSBデバイスとして認識しません。
    ん~ 困った。
    すでに1カ月ほど停滞してます。



    Microchipのサイトからダウンロードしたフレームワークのファイルは↓のディレクトリに格納しています。
     C:\microchip\mla\v2017_03_06\apps\usb\device\hid_custom\firmware

    ここからプロジェクトに登録したファイルは↓の感じ。
     ・USB関連の主要なファイルは…\firmwareの下のdemo_srcのディレクトリからコピー
     ・PIC24FJ64GB004ファミリ用のフォルダ(…firmware\exp16_pic24fj64gb004_pim.x)内のファイルをコピー
     ・io_mapping.hをPIC24FJ64GB002に合わせて修正。
       
    CDIプロジェクトファイル

    コンパイルは通っているので、ファイルが足らないなんてことはないんですけどね。。。

    USBの通信はおよそ以下の手順で開始されるらしいです。詳しく知りたい人はググって下さい。

    ケーブル接続時に、PC(=ホスト)側がD+、D-ラインを一定時間Lowレベルとすることでリセットをかける。
    リセット後、ホストからGetdevicerequestなるコマンドが送信され、このコマンドを受信したことをデバイス側であるPICが返信。
    その後、PICのプログラム中に記述してある各種Discriptorの情報についてPC側と通信。
    これによりPC側がUSBデバイスの種類 (HIDとかMSDとか)を認識し、所望の条件での通信が可能な状態(=Configured State)になる。

    なんですが、最初のGetdevicerequestに対し、PIC側が応答していない模様。
    D+,D-ラインの波形を見ているとハードウエアのリセットはかかっている。

    こんな面倒なことを気にしなくてよいようにフレームワークとしてプログラムが提供されているはずなんですけどねぇ
    Microchipのプログラムがおかしいとも思えないので、何かが間違っているんでしょうね。
    仕事でやってるならすぐにメーカーさんにサポートをお願いするところですが、まあ、なんといってもプログラムも開発環境も全部タダな訳だし、個人がサポートしてくれと言っても相手にしてくれないだろうしね。

    とにかくこの手の話は自力で何とかするしかないんですよね。。。
    (*´Д`)。。。困った。。。


    とりあえずこんな感じということで。



    関連記事

    コメント

    非公開コメント