PIC[1] ラズパイ→PIC 書込み方法まとめ

PICをC言語でプログラミングするのに、MPLAB X IDE を使用しています。数十年前にPICを触っていたときは秋月電子のPIC WRITERを使っていました。今回、PIC12F1822を使うにあたって、すでにこれで書き込むことができない事がわかりました。MAPLAB純正の書込機「PICkit 5 インサーキット デバッガ/プログラマ」は2万円超え、サードパーティせいだと3000円位からありますが、どうも評判が悪い。色々調べると、ラズパイに書込ソフト pickle というのがあることがわかりました。これだと追加費用することなくPICの書き込みができるし、ボード実装後もプログラムが書けるようなのでこれで書き込むことにしました。

ラズパイ→PIC 書込み方法まとめ(ICSP/LVP中心)

■ 接続(基本ICSP): VDD, VSS, PGC, PGD, MCLR(VPP)。近年の多くのPICはLVP時にPGM不要(PGC/PGDへキーシーケンス)※PGM要否は型番次第。LVPビットが1ならLVP入れる。手順と要点はMicrochip公式のLVP解説が参考になる。

■ 12F1822のICSP端子例: ICSPDAT=GP0, ICSPCLK=GP1, MCLR=GP3(データシート準拠。周辺回路の影響を受けやすいのでPGC/PGDは基板上で他回路と干渉させない)

■ 注意: 以前にLVPを無効で書いた個体はLVPで入れない→HVPツールが必要(MCLRへ~12VのVPP)

方法A: ラズパイGPIO直結でLVP書込み(p14/“pickle”ツール)

ツール導入: wget http://wiki.kewl.org/downloads/pickle-4.20.tgz→make→sudo make install(※Pythonのpickleとは無関係のPIC書込ユーティリティ)。

配線: ラズパイGPIO(例)→PICのVPP/PGC/PGD/(必要ならPGM)を接続。記事の例では.pickle設定ファイルにGPIOを割り当てる。

設定例(~/.pickle):

DEVICE=RPI2     # Piの世代に合わせてRPI0/RPI1/RPI2等
SLEEP=1
BITRULES=0x4F00 # 既定でOKなことが多い
VPP=9           # VPP(MCLR)に割当てるGPIO
PGC=10          # PGC
PGD=11          # PGD
PGM=-1          # 多くのデバイスで不要。必要ならGPIO番号

コマンド例:

p14 lvp program bwup.X.production.hex
p14 verify bwup.X.production.hex

Raspberry Pi ↔ PIC12F1822 ICSP(LVP)配線

PIC12F1822 ピン番号ピン名機能 (ICSP)Raspberry Pi GPIO例
1VDD電源 +5V(または 3.3V)Pi の 5V ピン or 3.3V ピン※
8VSSGNDPi の GND ピン
7GP0 / ICSPDATデータ (PGD)GPIO 11 (SPI_MOSI) など任意
6GP1 / ICSPCLKクロック (PGC)GPIO 10 (SPI_MISO) など任意
4GP3 / MCLR/VPPリセット/プログラミングGPIO 9 など任意(プルアップ必須)

※ LVP では PGM ピンは不要(12F1822 は GP3=MCLR のみでOK)。