Raspberry Piを使ってPIC32MXのフラッシュ書き込みを行う方法  投稿者:ケンケン  投稿日:2020年 3月29日(日)22時18分59秒 NE0356lan33.rev.em-net.ne.jp 返信・引用
  Raspberry Piに直結してPIC32MXのフラッシュメモリに書き込みができる「Pickle」という
ソフトを紹介します。以前も書きましたが、リンク切れがあったり、うまく書き込めないという
指摘がありましたので、調査しなおして再度投稿します。

これを使えば、PICkit3などがなくてもRaspberry Piとわずかな部品だけでPIC32含め、
様々なPICマイコンに書き込むことができるようです。


■Pickle Microchip PIC ICSP
https://wiki.kewl.org/dokuwiki/projects:pickle

■PickleでPIC32シリーズへの書き込み手順
・ラズパイ上で以下をダウンロード
http://wiki.kewl.org/downloads/pickle-4.20.tgz
・適当な場所に展開
・そのディレクトリに移動して、以下実行
make
sudo make install

・~/.pickleというディレクトリを作成

・展開したsrc/dotconf/のRPIをconfigというファイル名で上記ディレクトリにコピーし、
以下のように書き換える。

    DEVICE=RPI2
    SLEEP=1
    BITRULES=0x4F00
    VPP=9
    PGM=-1
    PGC=10
    PGD=11

・以下の3つのファイルをダウンロードし、~/.pickleディレクトリに展開する。
http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_06_000201.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_11_000301.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_15_000502.zip

PIC32の場合はprogramming executiveという機能に対応していて、これを使うと書き込みが
大幅に速くなります。

・以下のピン間を470Ω程度の抵抗を挟んで接続(私は330Ωを使用)

ラズパイ側       PIC側
GPIO9 (21番) -R- MCLR
GPIO10(19番) -R- PGECx(xは1や2,3など)
GPIO11(23番) -R- PGEDx(xは1や2,3など)

PGECxとPGEDxのxは同じ組み合わせにする必要があります。

・ラズパイの3.3VとGNDをPICの各電源ピンに接続。PICのアナログ電源ピンも忘れずに。

ラズパイ側       PIC側
+3V3 (1番)  --- VDD
GND  (39番) --- GND

・PICの基板上にICSPとして6ピンの端子がある場合は以下の接続となります。

ICSP
1 MCLR
2 VDD
3 GND
4 PGEDx
5 PGECx
6 -


・PIC32のVCAPピンの10μFは必須です。
MachiKaniaの基板などでコンデンサをハンダ付け済みの場合はそのままで問題ありません。

・つなぎ終わったらラズパイで以下のコマンド実行(HEXファイル名がxxx.hexの場合)
p32 program xxx.hex
p32 verify xxx.hex

書き込み中は特に表示がないので、終了まで待ちます。


以下はなぜうまく書き込めない場合があったかの考察ですので、特に読む必要はありません。

■Verifyで問題なく書き込めているのにうまく動作しない場合について
PICkit3などで書き込むと動作するHEXファイルが、なぜかPickleで書き込むと、Verifyしても
正常書き込みできているのに動作しない場合があることが判明しました。

PIC32のCONFIGRATIONビットのDEVCFG0の第1:0ビット(DEBUGビット)が通常は「3」(11b)
でなければ動作しませんが、ソースプログラムの書き方によって「2」(10b)となっていることが
あるようです。問題はPICkit3などマイクロチップ社の書き込みツールでは自動的に「3」に
変換して書き込まれるため、気が付かないことです。
対策としてはソースプログラムのCONFIG設定を以下のように変更してビルドすることです。

#pragma config DEBUG = OFF
↓
#pragma config DEBUG = 3

データシート上は「3」でも「2」でも問題ないように記載されており、マイクロチップ社の
嫌がらせなのかもしれません。

データシートのDEVCFG0の記載

DEBUG<1:0>
1x = Debugger is disabled
0x = Debugger is enabled

MachiKania type Mのブートローダがまさに上記で引っ掛かっていたため、修正をしました。