PIC32MX270F256B (HARMONY)

  Microchip社のフォーラムでPIC24からPIC32へ移る方が良いという指摘がありました。ところが、これからPIC32を扱うとなると、HARMONY環境に慣れなければいけません。そこで、HARMONYの練習として、PIC32MX270F256BでBluetoothドングルを制御し、Windows7(64ビット  Professonal)とHIDプロファイルBR/EDR接続しました。以下に示すファームウェアを少し手直すると、Windows8とも接続できますし、CQ出版社の「インターフェース」2013年5月号誌で紹介したファームウェアを参照し、それを少し手直しすれば、Windows7や8などともLE接続もできます。

  PIC32MX270F256Bは、28ピンで、大きなメモリー容量(プログラムメモリーが256KBでデータメモリーが64KB)を持っているので、メモリーを必要とするHARMONY環境でも使用できます。ただ、PICにファームウェアを書き込んでいる間だけ、UART出力から、おかしなシグナルが出てきます。いまのところPIC自身の問題で、12、14、18番ピンが異常と考えています。PICにファームウェアを書き込んでいる間、12番ピンは約1V、14番ピンは約3V、18番ピンは0-3Vのパルス列が出ています。ピンをアナログ、デジタルIN、デジタルOUTに変えても異常状態は同じです。これらのピンの使用は慎重に。PICにファームウェアを書き込んでしまった後は、正常に稼働します。

目次


PIC回路とデバック・アダプタ

  回路図と実際の回路を以下に示します。手配線の場合、PICはDIPタイプがよいでしょう。以下、この回路を「PIC回路」と呼ぶことにします。

  回路図に中のピンヘッドJP2には、既存のプロジェクトの利用方法(MPLAB X)の章で紹介した「USB シリアル変換器」回路(PIC16F1455の章で紹介した回路が元)を接続します。デバック情報をTera Termでモニターするために使用します。念のため、回路を以下に示します。以後、この回路を単に「デバック・アダプタ」と呼ぶことにします。ファームウェアのデバックをしない場合には、このアダプタを作成する必要はありません。

上記、「デバック・アダプタ」の左側に、4ピンのピンヘッドがありますが、上から1,2,3,4番ピンと呼ぶことにします。「PIC回路」のピンヘッドJP2も1番ピンから4番ピンまであります。両ピンヘッドの1,2,4番ピンどうしを、それぞれ接続します。3番ピンはどこにも配線されていませんので、接続する必要はありません。


MHC環境

  MPLAB X IDE v2.30をインストールした後、MPLAB XC32 Compiler v1.33MPLAB XC32 Compiler Part-Support v1.33をインストールしておきます。 さらに、MPLAB Harmony Integrated Software Framework v1.01をインストールし、そのあと、MPLAB Harmony Confugulator(MHC)をプラグインとして、MPLAB X IDEに組み込みます。組み込み方法は、MPLAB Harmonyをインストールした時に、最後に表示されます。Webを検索をすれば、日本語での解説もありますので、そちらを参考にしてください。ところで、XC32(Ver.1.33)のリンクが切れています。以下のファームウェアはXC32(Ver.1.34)では、エラーがでる可能性がありますので、 XC32(Ver.1.33)XC32(Part-Support v1.33)からダウンロードしてください。

  次に、MHC環境を整えます。Harmonyのバージョンがv1.01で、MHCのバージョンが0.8.0でなければいけません。Harmony v1.01の中の幾つかのファイルを書き換えますので、もしHarmony v1.01をすでにインストールしている方は、v1_01なるフォルダーごとコピーをとり、コピーしたものをバックアップとして保存しておいてください。setup.zipをダウンロードして解凍し、\microchip\harmony\v1_01フォルダーの中で上書き保存してください。これで、MHC環境が整います。なお、setup.zipに含まれるファイル構成は、コンフィグレーション.pdfの1ページ目に書いておきました。


ファームウェアとアプリケーション・ソフトウェア

  ファームウェアは、HidGenClasic1.zipです。解凍して出てきたフォルダーをmicrochip\harmony\v1_01\appsフォルダーの中にいれます。デバック情報を出力する場合は、app.cの中にある//#define DEBUG_MODEのコメント//を消してください。

  接続方法は、これまでと同じです。つまり、最初の接続は、PIC回路にて、タクトスイッチ(SW1)を押しながら、電源を入れます。ドングルのLEDが青く光るまでタクトスイッチを押し続けます。 その後、パーソナル・コンピュータから接続します。接続が完了すると、LED(D1)が点灯します。時によって、接続に時間が掛かります。2回目以降の接続は、タクトスイッチ(SW1)を離したまま、PIC回路の電源を入れるだけです。

  パーソナル・コンピュータ用のアプリケーション・ソフトウェアは、これも以前と同じですが、Application.zipを解凍すると得られます。PICkit2_1フォルダーは[Visual C++用]で、VS2005フォルダー[Visual C++/CLI用]です。PIC回路をパーソナル・コンピュータと接続したあと、それぞれのフォルダーの中にあるReleaseフォルダーの中にある実行ファイル(PICkit2.exeかGenericHIDSimpleDemo.exe)を実行します。すると、2つのエディット・ボックスと1個の送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のエディット・ボックスに123と入れて、送信ボタンをクリックすると、下のエディット・ボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、現れるはずです。

  なお、HidGenClasic1は、microchip\harmony\v1_01\apps\usb\host\cdc_basicを元に開発しました。そのため、HidGenClasic1の中にCDCやcdcなる文字列がでてきます。好みでなければ、それぞれGENやgenの置き換えてください。また、関数名も適当に変えてください。


解説

  先にも書きましたが、ファームウェアHidGenClasic1は、microchip\harmony\v1_01\apps\usb\host\cdc_basicを元に開発しました。この後者のcdc_basicは、まだ開発途上にあり、幾つかの問題を抱えています。

問題1.PIDとVIDによるenumerationができない。

問題2.ClassとSubclassによるenumerationを行っているが、CDCの2番目のインターフェースのClassとSubclassによるenumerationを行ってしまっている。そのため論理的にenumerationに失敗するけれども、論理的に失敗したときに、実質的にそれを救済してenumerationに導いている。つまり、行き当たりばったりで作成したファームウェアとなっている。(usb_host.c)

問題3.エンドポイントEP1のIN(インターラプト転送)がサポートされていない。(usb_host_cdc.cのUSB_HOST_CDC_SerialStateNotificationGet関数)

  問題1は、ドングルをClassとSubclassで認識させるので関係ありません。今後、修正されることを期待しましょう。問題2に関して、CDC以外のClassとSubclassによるenumerationは論理的に成功しますが、成功したとしても、その後実行する関数が定義されていないので、PICはハングアップします。そこで、強制的に、論理的にenumerationを失敗させます(usb_host.cで、1875行目にdriverFoundStatus=false;を1行挿入する)。すると、実質的にenumerationに導いてくれ、救済されます。問題3は、usb_host_cdc.cに書かれている他のエンドポイントに対する関数をまねて手直ししましたが、インターラプトではなくバルク転送のようになってしまいました。つまり、データを読もうとしても、本当にデータが来なければ読めないということです。

  さて、cdc_basicの問題点は、以上のように対処できましたが、HarmonyのMHC環境を整える必要があります。Bluetoothドングルは、Host Genericで制御します。ところが、Harmonyには、まだHost Genericに関するMHC環境がありません。そこで、Host Generic用のMHC環境を作成しました(上記のsetup.zip)。Harmonyでのアプリケーション開発は、MHC環境にとても強く依存しています。両者を切り離すことはできません。MHC環境が整っていなければ、たとえ、ファームウェアが開発できたとしても、それに新たな機能(入出力機能やADC機能等)を追加することは不可能です。作成したMHC環境についての簡単な解説は、コンフィグレーション.pdfの2ページ目以降に書いておきましたので参照ください。MHC環境の作成方法の一般的な解説は、help_harmony_v1_01.pdfの5115ページ以降のMHC Developer's Guideの章に書いてあります。

  Host Generic用のMHC環境を使用するには、MPLAB Xを実行し、メニューからTools->Embedded->MPLAB Harmony Configulatorを選択して、出てきたダイアログ・ウィンドウでOpenボタンを押します。そして、Harmony Configulatorの中で以下の図のように、Use GENERAL Host Driverにチェックを入れます。

最後に、CDC Hostを理解するためには、まずusb_host_cdc.cを理解するとこから始めるとよいと思います。

戻る