こんにちは、ファルコンM です。
PIC マイコンでデバックする方法について。
最終的にデバックはできたが、いろいろエラーも発生したので、その解決方法も備忘録としてメモする。
開発環境
- PIC 32 MZ0512EFE
- PIC Kit3
- MPLAB X IDE v4.01
回路構成の詳細は略。
を参考にした。外部クロック( オシレータ ) は使用しない。また、外部電源も使用しない。
プロジェクトの作成
作成方法は以下の記事を参照
ただし今回はシミュレータではなく、PICKit 3 を使用する。PICKit3 を接続した状態で行う。
※ FN: XXXXX は、PICKit3 を接続していないと表示されない。
初期プログラムの作成
main.c に以下の関数を追加
int main(void) { while(1); }
これでデバック実行。
Projects ツリーでプロジェクトを右クリック → Debug とするとDebug 実行できる。
と思いきや、エラー発生!
電源エラーが発生
「Target device was not found (could not detect target voltage VDD). You must connect to a target device to use PICkit 3.」
と出力された。電源の設定が上手くいっていないようだ。これは検索すると、すぐに解決方法が分かった。
プロジェクトツリーでプロジェクトを右クリック→Properties 。
Categories : PICKit3
Option categories : Power
を選択し、Power target circuit from PICkit3 のチェックボックスを有効にする。
この設定で、エラーは発生しなくなった。だが、次またエラーが発生した。
接続エラー
「Unable to connect to the target device.」
「Failed to get Device ID」
接続できない。Device ID が見つからない。と言われている。
接続できていないから、Device IDを見つけられないのだ。おそらくDevice ID を取得することでデバッカが接続を認識しているのだろう。
文字通り接触不良が原因。接触は気をつけないと。。
それでできるかなと思ったが、またまたエラーが発生した。
Failed to program device
デバイスのプログラムに失敗した?
なんのこっちゃ??いろいろ検索してもよく分からず。。
Debug でなく、Run 実行( デバックでない通常実行 ) をしてみる。
Projects ツリーでプロジェクトを右クリック→Run で実行する。
と、「Programming/Verify complete」と表示された。
つまり、PICとの接続、書き込みは上手くいっている。Debug ができないのだ。
それで、なぜDebugだけができない?という視点で調べると、configuration の設定をしなければいけないということが分かった。
とりあえず、main.c を変更する。
int main(void) { #pragma config DEBUG = 0 while(1); }
参考マニュアル
コンフィグレーションレジスタのDEVCFG0/ADEVCFG0のDEBUG の設定を0 にする。すなわち、デバックを許可する。
DEVCFG0/ADEVCFG0のデフォルトは1にリセットされるようだ。つまり、ここを設定してやらないとデバックモードにならないのね。
これで、今度こそできるか!?と思ってデバック実行したが、またまたまたエラーが発生した。
コンフィグレーション設定エラー
「Programming/Verify complete」
「The target device is not ready for debugging. Please check your configuration bit settings and program the device before proceeding. The most common causes for this failure are oscillator and/or PGC/PGD settings.」
書き込みはできたが、デバックの設定がまだ足りないようだ。PGC/PGD settings と書いてあったので、こっちの設定が足りないのか?
ということで、マニュアルを調べるとICESEL というのを見つけた。
デフォルトは、PGEC1/PGED1 pair となっているようだ。
PGEC1/PGED1はピンの名称だと分かった。( 最初から気づけよ! )
で回路図を調べると、デバッカのPGC、PGD ピンはそれぞれマイコンのPGEC2、PGED2 に接続されているようだ。
つまり、ここのコンフィグも変えてやらないといけない。
main.c をさらに修正する。
int main(void) { #pragma config DEBUG = 0 #pragma config ICESEL = 2 while(1); }
今度こそ実行できるか!?とデバック実行してみると、できたーー
while(1)でbreak で止まった。
まとめ
はまりまくったができてよかった。
よく考えたら、当たり前の設定をしていなかっただけっぽい。
こういうことは、組み込みシステムやっていたらよく発生することなので気にせずやっていこう!
コメントを残す