ArduinoでPIC32プログラムライターを作ってみる

Create a PIC32 program writer with Arduino Nano
 
PICマイコンにコンパイルしたプログラムデータを書き込むには、マイクロチップ謹製のPickit4を使うが定番ですが、比較的オープンなアーキテクチャを採用しているPIC32シリーズではArduinoをPICライターにすることができます。

まずはArduino Nanoを用意します。300円前後のNano互換ボードでもOKですが、CH340Gチップを搭載しているモデルには当たり外れがある(USBデバイスとして認識されないことがある)ので気をつけましょう。
続いてPIC32マイコンとArduinoをつなぐための回路を作ります。必要なのはユニバーサル基板と、100Ω抵抗x2、3.3KΩ抵抗x3、ツェナーダイオード(3.3v)x1、いくつかのピンヘッダです。ユニバーサル基板に半田付けする際は、4番目のピンを除くすべてのワイヤーが電源端子につながるようにします。ダイオードには向きがあるので間違えないように。基板を作ったら、NanoのGNDがダイオードのあるピンに、D7が反対の端のピンとつながるようにブレッドボードへ差し込みます。
Arduinoにファームウェアを書き込みます。写真のように5vピンとRSTピンをショートさせてUSBによるリセット操作を無効にしたら、Serge Vakulenko氏の開発したPIC32ライターユーティリティ「pic32prog.exe」をダウンロードします。一部のアンチウイルスソフトでは警告が表示されることがあるので、そのときはセーフリストに加えましょう。

ArduinoとパソコンをUSBケーブルでつなげたら、対象の機器が持っているCOMポートの番号を控えます。下のスクリーンショット場合は「3」になります。
コマンドラインを開いたらpic32progのあるフォルダーに移動(cdコマンド)し、「pic32prog -d ascii:com# -b3」と打ち込みます(#はAdruinoが所有しているポート番号)。以下のようなメッセージが出たらファームウェアの書き込みは完了です。5vとRSTをショートしていた線を外してください。
ではプログラムを書き込んでみましょう。中央のピンから外側に向かってMLCR、ICSPDAT/PGD、ICSPCLK/PGC、GNDのピンに、独立した1ピンはVDDに割り当てます。
コマンドラインより「pic32prog -d ascii:com# binary.hex」と入力(#はポート番号、"binary.hex"はMPLABなどの開発ツールで作成したPIC向けプログラム、もしくはファームウェア)して、対象のhexファイルを書き込みます。手っ取り早く試したい人は、私が書いたLチカプログラムのhexファイル(RB0ピンのオン・オフが1秒単位で切り替わります。詳しい回路図は近日公開します)を使ってください。

書き込みが成功すると以下のメッセージが表示されます。マイコンが認識されない場合は、ArduinoでRSTピンがショートしたままであったり、PICマイコンでコンデンサーを正しく付けていない可能性があります。
プログラムを書き込んだら、ArduinoのRSTとGNDピンをショートさせて、Arduinoのライター機能を無効にします。これにより、PIC32マイコンのプログラムの動作が始まるとともに、ArduinoのTX/RXピンを介してのUSBシリアルモニターを利用することができるようになります。

2018/09/20