ORANGE pico で遊ぶ (4):Raspberry Pi でファームウェアを書き込む

(2016年7月3日)

 PIC32MX シリーズを使う上で、一つのハードルとなるのが、書き込み器の問題。PicKit3 と MPLAB X を使えば Windows, Mac OS X, Linux で開発ができるので、問題ないっちゃあないんですが、純正の PicKit3 は 5,700 円もする(秋月価格、2016/7/3 現在)。オレンジピコショップで取り扱われている「互換品」は 2,980 円なので手頃ではあるが、PIC の書き込みに「しか」使えないものにこれだけの投資はちょっと辛い。PicKit に頼らない書き込み方法を研究しておきたい。

 手始めに、Pickle というツールを使って、Raspberry Pi を使った書き込みを試してみた。基本は、ケンケンさんMachikania の作者)の掲示板にある通り → http://8130.teacup.com/kenken/bbs/387 。ただし、ORANGE pico のファームウェアの書き込みでは、少し手を入れる必要があった。

1. Raspberry Pi を準備

 今回試したのは、Model A+。無線 LAN のドングル(プラネックスの GW-USNano2)を挿して、パソコンからは ssh で接続する。

2. Raspberry Pi と ORANGE pico の接続

 小さなブレッドボードを1つ用意して、下のように配線する。

3. Pickle をダウンロード

 Pickle Microchip PIC ICSP https://wiki.kewl.org/dokuwiki/projects:pickle の "Installation" のところにダウンロードのリンクがある。最新版(2016/7/3 時点で pickle-4.0d.tar.gz)をダウンロードして、Raspberry Pi に転送する(または、Raspberry Pi 上でダウンロード)。

 展開して、src ディレクトリに移動する。

$ tar xfz pickle-4.0d.tar.gz; cd pickle/src

 ビルド、インストールする。

$ make; sudo make install

 ホームディレクトリ (/home/pi) に .pickle/config というディレクトリを作り、その中に設定ファイルを置く。dotconf/gpio-RPI をそのまま使えばよい。

$ mkdir -p ~/.pickle/config; cp dotconf/gpio-RPI ~/.pickle/config

4. ORANGE pico のファームウェアを一部変更する

 配布されている ORANGE pico のファームウェア hex ファイルをそのまま書き込むと、なぜか動作しない。次の1行を探し出して、変更する。(現時点での最新版 v0.56 では12行目)

(変更前):040bfc00faffff7f7e
(変更後):040bfc00fbffff7f7d

 この1行は、PIC のコンフィギュレーションレジスタ0 (DEVCFG0) の値を設定するもの。上の変更によって、値が 0x7FFFFFFA から 0x7FFFFFFB になる。PicKit3 で書き込むと、この hex ファイルのままでも 0x7FFFFFFB として書き込まれるのだが、Pickle で書き込むと、元の hex ファイルのまま 0x7FFFFFFA として書き込まれ、動作しない。何だかよくわからないが、上のように変更すれば動作することは確かめてある。

5. 書き込む

 上のように変更したファームウェアを Raspberry Pi に転送し、Raspberry Pi 上で p32 コマンドを使って書き込む。

$ p32 program ORANGEpicoV056_FB.hex

 1分40秒ぐらいかかるが、その間何も表示が出ないので、ちょっとどきどきする。

 ベリファイは下のようにする。2分30秒ぐらいかかった。

$ p32 verify ORANGEpicoV056_FB.hex

6. Programming Executive を使った書き込みの高速化

 これもケンケンさんの掲示板からの情報。下の3つのファイルをダウンロード・解凍して、Raspberry Pi の ~/.pickle ディレクトリに入れておくと、書き込み・ベリファイが高速になる。

 やってみると、確かに速い。書き込みは10秒、ベリファイは7秒で終了した。これなら途中に何も表示が出なくても、まあ我慢できるかな。

pi@raspberrypi:~/Documents/Development $ date; p32 program ORANGEpicoV056_FB.hex ; date
Sun  3 Jul 12:27:36 UTC 2016
Total: 191544
Sun  3 Jul 12:27:46 UTC 2016
pi@raspberrypi:~/Documents/Development $ date; p32 verify ORANGEpicoV056_FB.hex ; date
Sun  3 Jul 12:28:10 UTC 2016
Total: 191544 Fail: 0
Sun  3 Jul 12:28:17 UTC 2016
pi@raspberrypi:~/Documents/Development $