イーサーネット・トランシーバ(Microchip社のLAN8740Ai)をPIC32MZ2048EFM064-I/PTで制御してみました。
注意1:MPLAB Code Configurator(Harmony)章の中のプロジェクトの作成を参考にして、下図のように、net、crypto、wolfsslの3つのパッケージをインストールします。
注意2:もしMHC環境を整えていなければ、整えておきます。
注意3:以下のファームウェア(zipファイル)を解凍するとフォルダーが出てきますので、そのフォルダーをまるごと、必ずHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。
回路図は次の通りです。PIC32MZ Embedded Connectivity with Floating Point Unit (EF) Family Starter Kit のマニアルの27ページを参照しました。
なお、同マニアルの23ページを見ると、50MHzのクリスタル発振器を使用するようになっています。ここでは、PICの47番ピンから50MHzのパルスを出力し(REFCLKO1)、これを50MHzのクリスタル発振器の出力の代わりとしています。つまり、50MHzのクリスタル発振器は不要となります。
注1:IC3とR25とC21とで構成されているリセット回路ですが、立ち上がり時間が短い3.3V電源の場合は必要ありません。今回は、電源としてACアダプターを使用していて、その立ち上がり時間が長いようでPOR(パワー・オン・リセット)が掛ってくれません。そこで、マイクロチップ社のリセットIC(MCP121T-270E/LB(2.63V))を用いたリセット回路を付加しています。
注2:回路図中、PIC #58などと書かれたところが11箇所ありますが、これはPIC32MZ2048EFM064-I/PTの該当するピン番号に(PIC #58ならば、58番ピンに)接続するという意味です。PIC #58などの意味は以下の図を参照してください。
注3:抵抗群(R6、R7、R8)で、LAN8740AiのMODE[2:0] を 111 (デフォルト値)とし、抵抗群(R11、R12、R13)で、LAN8740AiのPHYA[2:0] を 000 (デフォルト値)としています。また、抵抗R10でLAN8740AiがRMII(reduced media independent interface)で動作するようにしています。
実際の回路を次の2枚の写真で示します。
注1:基板にはタカス電子製作所のIC-701-74Nを使用しています。
注2:RJ-45コネクタには、秋月電子通商のパルストランス内蔵モジュラージャックDIP化キットを用いました。
注3:LAN8740Aiはマルツ・オンラインから入手しました。また、それをDIP化するのにaitendoのピッチ変換基板(0.5/32P) [QFN05-32P]を用いています。LAN8740Aiの裏面に33番目の電極があります。これをGNDに接続する必要があります(上の写真の33-GNDと書いた配線に着目)。LAN8740Aiの33番目の電極をピッチ変換基板に半田付けするために、クリーム半田(aitendoのソルダペーストはんだ [XG-50])を使いました。 クリーム半田を溶かすために、グリルパン(山善YGA-012E)を使用しています。温度制御ダイアルを「切」の状態から、ネオンランプが点く位置まで回します。ネオンランプが消えたら、またネオンランプが点く位置まで少し回します。以下、これを繰り返します。温度制御ダイアルの設定が「160度」以下でクリーム半田が溶け始めますので、溶けてから30秒ほど待って、温度制御ダイアルを「切」の位置に戻します。後は、ピンセットなどで、基板をグリルパンから取り出すだけです。なお、温度制御ダイアルをいきなり「160度」に設定してはいけません。もし、そのようにすると、温度がおおきく160度を越えてしまいます(オーバーシュート)ので、基板を焦がす恐れがあります。
2.PIC32MZ2048EFM064-I/PT (HARMONY: v2.06 USB DEVICE)の章の回路動作確認の要領で動作確認を行います。
3.MMHC環境を整えた後、USBケーブルでPCと接続し、同章のHIDマウスの項目を実行してUSB通信ができていることを確認します。
4.RJ-45コネクタとLAN8740Aiを取り付けます。LANケーブルで、RJ-45コネクタとハブまたはルータに接続します。
5. PICに書き込むファームウェアはweb_net_server_nvm_mpfs_MZ0.zipです。これを解凍して出てくるweb_net_server_nvm_mpfs_MZ0フォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。このファームウェアは、Harmony3\net_apps_pic32mz\apps\web_net_server_nvm_mpfsを参考にして、Harmony Configulator で最初から作成したものです。
6.ファームウェアをPICに書き込み、実行します。
7.PCとPIC基板はUSB(CDC)で接続されます。 Windows10(21H2)では、CDC用標準デバイスドライバ(Usbser.sys)を使用するようです。つまり、PIC基板とPCをUSBケーブルで接続すると自動的にこのドライバーが組み込まれまれるようです(別途ドライバーを組み込む必要がない)。
8.PC上でTera Termを起動して、メニューから”設定->シリアルポート”を選択すると、シリアルポート設定画面が以下の様に現れるので、ボーレートを921600 bps、データビットを8ビット、 パリティはなし, ストップビットを1、フロー・コントロールはなし、と設定してください。 設定が終わったら、シリアルポート設定画面を閉じ、メニューから”設定->設定の保存”を選択して、シリアルポート設定内容をファイルに保存しておくと、次回の接続時には、自動的に保存した設定内容が反映されます。
9.キーボードから適当なキーを押すと、Tera Term上に以下のようなメッセージが現れます。ここで、キーボードのリターンキーを押すとプロンプト(>)が表示されます。プロンプトの後に、キーボードからnetinfoと打ち込と、ネット情報が表示されます。
10.PC上でブラウザーを立ち上げ、URLを"http://mchpboard_e"としてWebページを読み込みます。次のようなページが現れます。
11.ここで、LED2ボタンを押すごとに、PICの22番ピンがON(3.3V)になったりOFF(0V)になったりを繰り返します。それとともに、PICの22番ピンの状態を読み取ります。その結果がONの場合には、上のページでのLED2が緑となり、OFFの場合には、それが灰色となります。
HTTPサーバーを実現します。PICに書き込むファームウェアはweb_net_server_nvm_mpfs_MZ.zipです。web_net_server_nvm_mpfs_MZ.zipを解凍して出てくるweb_net_server_nvm_mpfs_MZフォルダーをHarmonyProjectsフォルダーの中に入れます。このファームウェアは、Harmony3\net_apps_pic32mz\apps\web_net_server_nvm_mpfsを参考にして、Harmony Configulator で最初から作成したものです。
1.USBケーブルでPCと接続し、LANケーブルで、RJ-45コネクタとハブまたはルータに接続します。 そして、ファームウェアをPICに書き込み、実行します。
2.Tera Termを起動すると、回路動作確認のところの9項目と同じメッセージが現れます。
3.PC上でブラウザーを立ち上げ、URLを"http://mchpboard_e"としてWebページを読み込みます。次のようなWebページが現れます。
4.Webページ上に、そのページの使用方法が書いてありますので、お試しください。
注意:ファームウェアを書き換えて、それを実行することを何回か繰り返すと、IPアドレス(3つ上の図で192.168.0.24の所)が変わることがあります。その結果、http://mchpboard_eとIPアドレスの対応がとれず、Webページが表示されなくなります。この対応情報はPC内部に一定期間格納(キャッシュ)されているので、IPアドレスが変わった場合、この対応情報を消して、対応を取り直す必要があります。対応情報を消すためには、コマンドラインでnbtstat -Rを管理者権限で実行します。なお、現在の対応情報は、コマンドラインでnbtstat -cを実行すると表示されます。
Webページデータは、下図のように、web_pagesフォルダー(例えば、C:\Users\yts\HarmonyProjects\web_net_server_nvm_mpfs_MZ\firmware\src\web_pagesフォルダー)の中に作成します。
このフォルダーの中のデータをマイクロソフト社独自のフォーマットでファイル(pfs_net_img.c)化します。このファイルをMPFS(Microchip Proprietary File System)イメージング(ファイル)と呼んでいます。そして、「イメージングファイルとこれを運用するためのファイル(http_net_print.h, http_net_print.c, http_net_print.idx)」をプロジェクトに追加します。この作業をするためのJavaプログラムがmpfs_net.jarです。mpfs_net.jarはHarmony3\net\utilities\mpfs_generatorフォルダーの中にあります。
このプログラムをMPLABX IDEから実行する方法を以下に説明します。
MPLABX IDEにて、プロジェクトのプロパティ画面を表示させます(プロジェクト名をマウスで右クリックするとサブメニューが現れるので、そこでPropertiesをクリックする)。赤矢印で示すように、プロパティ画面のCategoriesでBuildingを選択します。すると下図のような画面になります(web_net_server_nvm_mpfs_MZでの例)。
この画面にて黒矢印で示すように、Execute this line before build(ビルド前に、このコマンド行を実行するという意味)という名のチェックボックスにチェックが入っており、その下の四角の中には、
java -jar C:\Users\yts\Harmony3\net\utilities\mpfs_generator\mpfs_net.jar /c /z "snmp.bib" "C:\Users\yts\HarmonyProjects\web_net_server_nvm_mpfs_MZ\firmware\src\web_pages" "C:\Users\yts\HarmonyProjects\web_net_server_nvm_mpfs_MZ\firmware\src" "mpfs_net_img.c"
と書かれています。ここで、青字の部分がWebページデータが入っているフォルダーで、緑字の部分が「イメージングファイルとこれを運用するためのファイル」を格納するフォルダーです。ここでは、絶対パスで書いていますが、相対パスでも構いません。詳しい使用方法は、Harmony3\net\doc\help_harmony_tcpip.chmを参照してください。
これで、プロジェクトをビルドしようとした時に、ビルドされる前に、常にmpfs_net.jarが実行されるようになります。これにより、Webページデータは、他のapp.cなどと同じようにMPLABX IDE上で編集でき、編集が終わったらプロジェクトをビルドするだけで良いことになります。
なぜならば、必ずビルドの前にmpfs_net.jarが実行されるので、編集されたWebページデータから「イメージングファイルとこれを運用するためのファイル」が新たに作られ、その後ビルドが実行されるからです。
バークレイAPI(Application Programming Interface)関数群を使って、インターネット・サーバを構築します。単純なデータのやり取りだけならば、この関数群だけで十分でしょう。
1.PICに書き込むファームウェアはberkeley_tcp_server_MZ.zipです。berkeley_tcp_server_MZ.zipを解凍して出てくるberkeley_tcp_server_MZフォルダーをHarmonyProjectsフォルダーの中に入れます。このファームウェアは、Harmony3\net_apps_pic32mz\apps\berkeley_tcp_serverを参考にして、Harmony Configulator で最初から作成したものです。
2.USBケーブルでPCと接続し、LANケーブルでRJ-45コネクタとハブまたはルータに接続します。 そして、ファームウェアをPICに書き込み、実行します。
3.Tera Termを起動してキーボードから適当なキーを押すと、以下のような画面が現れますので、IPアドレスを記録しておきます。
4.berkeley_tcp_server_MZフォルダー内に、ClientSample1フォルダーがありますので、その中のClientSample1.exeをPC上で実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、下のボックスに現れるはずです。
5.もし、正常に動作していない場合には、ClientSample1フォルダーの中のClientSample1フォルダーの中のForm1.csをテキスト・エディタで開き、ipOrHost = "192.168.0.15";の箇所を、上記の項目3で記録したIPアドレスで書き直し、Visual Studio Community 2019や2022で再度コンパイルしてください。
ところで、ホスト名をmchpboard_eとしているので、このホスト名からIPアドレスを得てPCとLAN接続ができるはずです。つまり、IPアドレスがどのような値でも、それを意識することなくLAN接続ができるはずです。PICに書き込むファームウェアはberkeley_tcp_server_MZ_2.zipです。berkeley_tcp_server_MZとの違いは、berkeley_tcp_server_MZ_2フォルダーの中のsettingsの中の3.pngに示すようにNBNSコンポーネントを追加しただけです(コンポーネント内の設定はデフォルトのまま)。一方、PC上で動くアプリケーション・プログラムはberkeley_tcp_server_MZ_2フォルダー内のClientSample2フォルダーの中のClientSample2.exeです。実行してからダイアログが出てくるまで2,3秒かかります。