PIC[4] MAPLAB Snap
Snapを購入した経緯(背景)
これまでの環境
使用PIC:PIC12F1822
書込みツール:PICkit3
運用方針:
通常は LVP運用
万一に備えて HVP(12V)対応回路も設計済み
LVP / HVP 両対応基板構成
発生していた課題
PICkit3で:
3.3Vが安定して出ない
「Connection Failed」「Failed to program device」が頻発
MCLRが引き込まれて動作不安定になるケースあ
結論として:
PICkit3は世代的に古く、USB・電源まわりの信頼性が低下
将来運用に不安が残る
導入目的
PICkit3の代替として、現行サポートされている書込みツールへ更新
LVP運用を安定させたい
将来の開発環境の健全化
万一のHVP復旧手段は自作治具で対応する方針
→ その結果、MPLAB Snap を購入
MPLAB Snap
① 初期症状(購入直後)
(以下、前回まとめと同じ)
SnapをUSBに挿すとACTIVE LEDが一瞬点灯してすぐ消える
Windowsで安定認識されない
IPEで:
Toolは見えることがある
Power / Voltage設定が出ない
こんなエラー:You have entered an invalid value (null) for the Voltage Level ... Connection Failed.
② Snap ファーム更新(復旧ポイント)
Snapのファームを書き直し
MAPLAB IPEの advance mode →Tools→Hardware Tool Emaghency Boot Firarmware Recovery を選択
MAPLAB Snap を選択
やり方は書いてあるので、そのままやればOK。
Snap をリカバリーブートモードに切り替えるには、次の手順を実行します。
Micro-B USB ケーブルを Snap に接続します。
USBケーブルのもう一方の端は、PC に接続してください。
ピンセットまたは曲げた細いワイヤを使って、ジャンパ J3 の2つの穴を約1秒間ショートさせます。
その後、ピンセットまたはワイヤを外します。
少なくとも10秒待ってから、Snap から USB ケーブルを抜きます。
すぐに USB ケーブルを Snap に再接続します。
これで Snap は リカバリーブートモード に入ります。
この状態では Snap の両方の LED は消灯したまま になります。
ACTIVE LEDが常時点灯するように復帰
USB認識が安定
③ Invalid Device ID エラー発生Target Device ID (0x3fe0) is an Invalid Device ID. Snap tool cannot detect external power
通信フェーズには進んだが、電源・信号条件が不正
④ 配線・電源まわりの修正
ICSP VDDを浮かせていた → ターゲット3.3Vへ接続
MCLRが未プルアップ → 10kΩでVDDへプルアップ
⑤ IPEでの書込み成功Programming/Verify complete *** Hold In Reset mode is enabled ***
消去・書込み・Verifyすべて成功
⑥ IDE側の挙動(参考)
MPLAB X IDE 6.25 で Program フローが不安定
BUILDは成功している
実害はなし(書込みはIPE運用で対応)
現在の安定構成
ICSP VDD ← ターゲット3.3V
GND共通
MCLR:10kプルアップ
Snap FW更新済み
書込み:IPE使用
今回の学び
プロジェクトフォルダPATHに日本語入れると失敗する。(結構重要)
SnapはVDD検出必須(浮かせ不可)PICCKIT3も同じ
MCLRは必ずプルアップ
SnapはACTIVE LED挙動で健全性判断できる
FW再書込みで復旧する事ができる。
IDEよりIPEの方が安定な書き込みができるみたい。
書込エラーになったら一回SnapやPICKIT3を抜いてみるのも効果あり
LVP OFFのPICを戻すにはPICKIT3は有用なので、用意しておくといい。ただし、最新IDEでは動かないので、PICKIT用にMPLAB X 5.45を入れておく。以下は空のソースコード。Eraseするなら、IPEから。
#include <xc.h>
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF
#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = ON
#pragma config BORV = LO
#pragma config LVP = ON
int main(void)
{
while(1){
}
}

