2024.11.29
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第166回]



●PIC18F2450/2550の書き込みテスト

このところずっとPIC WRITERについて書いています。
本来のテーマでありますところのPICBASICコンパイラからちょっと脱線してしまっています。
しかしPIC WRITERもそれなりに重要なテーマであります。
1年ほど前にも同様にして途中下車してしまいました。
そのときは書き込みを制御するCPUボードとしてND80Z3.5を使ってZ80アセンブラプログラムで制御を行ないました。
今回はその続きということになります。
今回はローコストPIC WRITERとしてCPUをPIC18F13K50に変えてPICアセンブラを使ってテストを行っています。
途中ちょっともたつきましたがなんとかZ80アセンブラからPICアセンブラへの移行も出来たように思います。
いい加減に本題に復帰してPICBASICコンパイラも完成させなければいけないのですが、せっかく出来上がりつつあるPIC WRITERもこのまま中途で休止してしまうとまた忘れてしまいます。
今ならPIC WRITERももう少し先まで進めそうです。
じきに師走です。
ここで本題のPICBASICコンパイラに戻って作業を再開しても製品化はどうせ来年のことになってしまいます。
それならばここはひとつ腰をすえてPIC WRITERに取り組んだほうがよさそうです。

昨年のPIC WRITER ND80Z3.5版はPIC18F13K50/PIC14K50用の書き込みプログラムを使ってPIC18F2450/2550の書き込みテストを行い、さらにはPIC18F4550の書き込みテストを行ないました。
ND80Z3.5版ではそこまではクリアできましたから今回のPICアセンブラ版でも多分そこまではいけると思います。
昨年の記事は[第60回][第76回]に書いています。
過去記事をあらためて読んでみましたらPIC18F14K22についても書き込みテストをやっていました([第72回])。
今回はそこは飛ばしてしまいましたから後日PIC18F14K22も書き込みテストをしてみるつもりです。
ということで手順として、まずはPIC18F2450の書き込みテストです。
いつもは実行中の画像をお見せしていますが今回のテストは画像をキャプチャせずに動作テストを行ってしまいましたので、同時に保存したログで説明をします。
logfile piciolog\1127180742.txt open
*** pic i/o ***
picio-30 connected
>/erase
endcode=01
>/hload bs2450_a.hex
loading bs2450_a.hex ...
i=4211,binbfend=1860
>/picwr
startcode=01
i=6,b=2,[04]0000*i=14,b=4,[00]0000*i=22,b=4,[00]0008*i=42,b=16,[00]0020*i=62,b=16,[00]0030*i=82,b=16,[00]
0040*i=102,b=16,[00]0050*i=122,b=16,[00]0060*i=142,b=16,[00]0070*i=162,b=16,[00]0080*i=182,b=16,[00]0090*i=202,b=16,[00]00a0*i=222,b=16,[00]
00b0*i=242,b=16,[00]00c0*i=262,b=16,[00]00d0*i=282,b=16,[00]00e0*i=302,b=16,[00]00f0*i=322,b=16,[00]0100*i=342,b=16,[00]0110*i=362,b=16,[00]
0120*i=382,b=16,[00]0130*i=402,b=16,[00]0140*i=422,b=16,[00]0150*i=442,b=16,[00]0160*i=462,b=16,[00]0170*i=482,b=16,[00]0180*i=502,b=16,[00]
0190*i=522,b=16,[00]01a0*i=542,b=16,[00]01b0*i=562,b=16,[00]01c0*i=582,b=16,[00]01d0*i=602,b=16,[00]01e0*i=622,b=16,[00]01f0*i=642,b=16,[00]
0200*i=662,b=16,[00]0210*i=682,b=16,[00]0220*i=702,b=16,[00]0230*i=722,b=16,[00]0240*i=742,b=16,[00]0250*i=762,b=16,[00]0260*i=782,b=16,[00]
0270*i=802,b=16,[00]0280*i=822,b=16,[00]0290*i=842,b=16,[00]02a0*i=862,b=16,[00]02b0*i=882,b=16,[00]02c0*i=902,b=16,[00]02d0*i=922,b=16,[00]
02e0*i=942,b=16,[00]02f0*i=962,b=16,[00]0300*i=982,b=16,[00]0310*i=1002,b=16,[00]0320*i=1022,b=16,[00]0330*i=1042,b=16,[00]0340*i=1062,b=16,[00]
0350*i=1082,b=16,[00]0360*i=1102,b=16,[00]0370*i=1122,b=16,[00]0380*i=1142,b=16,[00]0390*i=1162,b=16,[00]03a0*i=1182,b=16,[00]03b0*i=1202,b=16,[00]
03c0*i=1222,b=16,[00]03d0*i=1242,b=16,[00]03e0*i=1262,b=16,[00]03f0*i=1282,b=16,[00]0400*i=1302,b=16,[00]0410*i=1322,b=16,[00]0420*i=1342,b=16,[00]
0430*i=1362,b=16,[00]0440*i=1382,b=16,[00]0450*i=1402,b=16,[00]0460*i=1422,b=16,[00]0470*i=1442,b=16,[00]0480*i=1462,b=16,[00]0490*i=1482,b=16,[00]
04a0*i=1502,b=16,[00]04b0*i=1522,b=16,[00]04c0*i=1542,b=16,[00]04d0*i=1562,b=16,[00]04e0*i=1582,b=16,[00]04f0*i=1602,b=16,[00]0500*i=1622,b=16,[00]
0510*i=1642,b=16,[00]0520*i=1662,b=16,[00]0530*i=1682,b=16,[00]0540*i=1702,b=16,[00]0550*i=1722,b=16,[00]0560*i=1742,b=16,[00]0570*i=1762,b=16,[00]
0580*i=1782,b=16,[00]0590*i=1802,b=16,[00]05a0*i=1820,b=14,[00]05b0*i=1826,b=2,[00]2040*i=1832,b=2,[04]0000*i=1840,b=4,[00]0000*i=1846,b=2,[00]
0005*i=1856,b=6,[00]0008*
>/verify
startcode=01
i=6,b=2,[04]0000[01]01-01*i=14,b=4,[00]0000[01]01-01*i=22,b=4,[00]0008[01]01-01*i=42,b=16,[00]0020[01]01-01*i=62,b=16,[00]0030[01]01-01*i=82,b=16,[00]
0040[01]01-01*i=102,b=16,[00]0050[01]01-01*i=122,b=16,[00]0060[01]01-01*i=142,b=16,[00]0070[01]01-01*i=162,b=16,[00]0080[01]01-01*i=182,b=16,[00]
0090[01]01-01*i=202,b=16,[00]00a0[01]01-01*i=222,b=16,[00]00b0[01]01-01*i=242,b=16,[00]00c0[01]01-01*i=262,b=16,[00]00d0[01]01-01*i=282,b=16,[00]
00e0[01]01-01*i=302,b=16,[00]00f0[01]01-01*i=322,b=16,[00]0100[01]01-01*i=342,b=16,[00]0110[01]01-01*i=362,b=16,[00]0120[01]01-01*i=382,b=16,[00]
0130[01]01-01*i=402,b=16,[00]0140[01]01-01*i=422,b=16,[00]0150[01]01-01*i=442,b=16,[00]0160[01]01-01*i=462,b=16,[00]0170[01]01-01*i=482,b=16,[00]
0180[01]01-01*i=502,b=16,[00]0190[01]01-01*i=522,b=16,[00]01a0[01]01-01*i=542,b=16,[00]01b0[01]01-01*i=562,b=16,[00]01c0[01]01-01*i=582,b=16,[00]
01d0[01]01-01*i=602,b=16,[00]01e0[01]01-01*i=622,b=16,[00]01f0[01]01-01*i=642,b=16,[00]0200[01]01-01*i=662,b=16,[00]0210[01]01-01*i=682,b=16,[00]
0220[01]01-01*i=702,b=16,[00]0230[01]01-01*i=722,b=16,[00]0240[01]01-01*i=742,b=16,[00]0250[01]01-01*i=762,b=16,[00]0260[01]01-01*i=782,b=16,[00]
0270[01]01-01*i=802,b=16,[00]0280[01]01-01*i=822,b=16,[00]0290[01]01-01*i=842,b=16,[00]02a0[01]01-01*i=862,b=16,[00]02b0[01]01-01*i=882,b=16,[00]
02c0[01]01-01*i=902,b=16,[00]02d0[01]01-01*i=922,b=16,[00]02e0[01]01-01*i=942,b=16,[00]02f0[01]01-01*i=962,b=16,[00]0300[01]01-01*i=982,b=16,[00]
0310[01]01-01*i=1002,b=16,[00]0320[01]01-01*i=1022,b=16,[00]0330[01]01-01*i=1042,b=16,[00]0340[01]01-01*i=1062,b=16,[00]0350[01]01-01*i=1082,b=16,[00]
0360[01]01-01*i=1102,b=16,[00]0370[01]01-01*i=1122,b=16,[00]0380[01]01-01*i=1142,b=16,[00]0390[01]01-01*i=1162,b=16,[00]03a0[01]01-01*i=1182,b=16,[00]
03b0[01]01-01*i=1202,b=16,[00]03c0[01]01-01*i=1222,b=16,[00]03d0[01]01-01*i=1242,b=16,[00]03e0[01]01-01*i=1262,b=16,[00]03f0[01]01-01*i=1282,b=16,[00]
0400[01]01-01*i=1302,b=16,[00]0410[01]01-01*i=1322,b=16,[00]0420[01]01-01*i=1342,b=16,[00]0430[01]01-01*i=1362,b=16,[00]0440[01]01-01*i=1382,b=16,[00]
0450[01]01-01*i=1402,b=16,[00]0460[01]01-01*i=1422,b=16,[00]0470[01]01-01*i=1442,b=16,[00]0480[01]01-01*i=1462,b=16,[00]0490[01]01-01*i=1482,b=16,[00]
04a0[01]01-01*i=1502,b=16,[00]04b0[01]01-01*i=1522,b=16,[00]04c0[01]01-01*i=1542,b=16,[00]04d0[01]01-01*i=1562,b=16,[00]04e0[01]01-01*i=1582,b=16,[00]
04f0[01]01-01*i=1602,b=16,[00]0500[01]01-01*i=1622,b=16,[00]0510[01]01-01*i=1642,b=16,[00]0520[01]01-01*i=1662,b=16,[00]0530[01]01-01*i=1682,b=16,[00]
0540[01]01-01*i=1702,b=16,[00]0550[01]01-01*i=1722,b=16,[00]0560[01]01-01*i=1742,b=16,[00]0570[01]01-01*i=1762,b=16,[00]0580[01]01-01*i=1782,b=16,[00]
0590[01]01-01*i=1802,b=16,[00]05a0[01]01-01*i=1820,b=14,[00]05b0[01]01-01*i=1826,b=2,[00]2040[0f]09-ff*verify error!
i=1832,b=2,[04]0000[01]09-ff*i=1840,b=4,[00]0000[01]09-ff*i=1846,b=2,[00]0005[01]09-ff*i=1856,b=6,[00]0008[01]09-ff*
error! erc=54 
>/exit

リモート接続を終了しました
logfile closed at Wed Nov 27 18:13:52 2024

/ERASEを実行した後/PICWRを実行して最後に/VERIFYを実行しました。
あれ?
ベリファイの表示が終るあたりのところでエラーが発生しています。
もとのデータが09なのに書き込み後に読み出したデータはFFです。
書き込みプログラムを確認したところバグがみつかりました。
実はここの表示にはそれ以外にも問題があったのですがそのことについては後ほど書くことにします。
PICの書き込みプログラムを修正したあともう一度テストをしました。
PIC18F2450については上記の1箇所のみのエラーは書き込みプログラムのバグのせいで、そのほかは正しく書き込み読み出しが行なわれていることが確認できたので、PIC18F2450の書き込みテストはクリアできたと考えてもよいと思います。
そこでプログラム修正後のテストはPIC18F2550に対して行なうことにしました。
ところが。
logfile piciolog\1128110831.txt open
*** pic i/o ***
picio-30 connected
>/hload bs2450_a.hex
loading bs2450_a.hex ...
i=4211,binbfend=1860
>/picwr
startcode=01
i=6,b=2,[04]0000*i=14,b=4,[00]0000*i=22,b=4,[00]0008*i=42,b=16,[00]0020*i=62,b=16,[00]0030*i=82,b=16,[00]0040*i=102,b=16,[00]0050*i=122,b=16,[00]
0060*i=142,b=16,[00]0070*i=162,b=16,[00]0080*i=182,b=16,[00]0090*i=202,b=16,[00]00a0*i=222,b=16,[00]00b0*i=242,b=16,[00]00c0*i=262,b=16,[00]
00d0*i=282,b=16,[00]00e0*i=302,b=16,[00]00f0*i=322,b=16,[00]0100*i=342,b=16,[00]0110*i=362,b=16,[00]0120*i=382,b=16,[00]0130*i=402,b=16,[00]
0140*i=422,b=16,[00]0150*i=442,b=16,[00]0160*i=462,b=16,[00]0170*i=482,b=16,[00]0180*i=502,b=16,[00]0190*i=522,b=16,[00]01a0*i=542,b=16,[00]
01b0*i=562,b=16,[00]01c0*i=582,b=16,[00]01d0*i=602,b=16,[00]01e0*i=622,b=16,[00]01f0*i=642,b=16,[00]0200*i=662,b=16,[00]0210*i=682,b=16,[00]
0220*i=702,b=16,[00]0230*i=722,b=16,[00]0240*i=742,b=16,[00]0250*i=762,b=16,[00]0260*i=782,b=16,[00]0270*i=802,b=16,[00]0280*i=822,b=16,[00]
0290*i=842,b=16,[00]02a0*i=862,b=16,[00]02b0*i=882,b=16,[00]02c0*i=902,b=16,[00]02d0*i=922,b=16,[00]02e0*i=942,b=16,[00]02f0*i=962,b=16,[00]
0300*i=982,b=16,[00]0310*i=1002,b=16,[00]0320*i=1022,b=16,[00]0330*i=1042,b=16,[00]0340*i=1062,b=16,[00]0350*i=1082,b=16,[00]0360*i=1102,b=16,[00]
0370*i=1122,b=16,[00]0380*i=1142,b=16,[00]0390*i=1162,b=16,[00]03a0*i=1182,b=16,[00]03b0*i=1202,b=16,[00]03c0*i=1222,b=16,[00]03d0*i=1242,b=16,[00]
03e0*i=1262,b=16,[00]03f0*i=1282,b=16,[00]0400*i=1302,b=16,[00]0410*i=1322,b=16,[00]0420*i=1342,b=16,[00]0430*i=1362,b=16,[00]0440*i=1382,b=16,[00]
0450*i=1402,b=16,[00]0460*i=1422,b=16,[00]0470*i=1442,b=16,[00]0480*i=1462,b=16,[00]0490*i=1482,b=16,[00]04a0*i=1502,b=16,[00]04b0*i=1522,b=16,[00]
04c0*i=1542,b=16,[00]04d0*i=1562,b=16,[00]04e0*i=1582,b=16,[00]04f0*i=1602,b=16,[00]0500*i=1622,b=16,[00]0510*i=1642,b=16,[00]0520*i=1662,b=16,[00]
0530*i=1682,b=16,[00]0540*i=1702,b=16,[00]0550*i=1722,b=16,[00]0560*i=1742,b=16,[00]0570*i=1762,b=16,[00]0580*i=1782,b=16,[00]0590*i=1802,b=16,[00]
05a0*i=1820,b=14,[00]05b0*i=1826,b=2,[00]2040*i=1832,b=2,[04]0000*i=1840,b=4,[00]0000*i=1846,b=2,[00]0005*i=1856,b=6,[00]0008*
>/verify
startcode=01
i=6,b=2,[04]0000[01]*i=14,b=4,[00]0000[01]*i=22,b=4,[00]0008[0f]*verify error! 0,28-08
i=42,b=16,[00]0020[0f]*verify error! 8,a4-80
i=62,b=16,[00]0030[0f]*verify error!20,58-08
i=82,b=16,[00]0040[0f]*verify error!30,8e-82
i=102,b=16,[00]0050[0f]*verify error!41,ef-6e
i=122,b=16,[00]0060[0f]*verify error!50,7d-2c
i=142,b=16,[00]0070[0f]*verify error!61,f0-00
i=162,b=16,[00]0080[01]*i=182,b=16,[00]0090[01]*i=202,b=16,[00]00a0[01]*i=222,b=16,[00]00b0[01]*i=242,b=16,[00]00c0[01]*i=262,b=16,[00]
00d0[01]*i=282,b=16,[00]00e0[01]*i=302,b=16,[00]00f0[01]*i=322,b=16,[00]0100[01]*i=342,b=16,[00]0110[01]*i=362,b=16,[00]0120[01]*i=382,b=16,[00]
0130[01]*i=402,b=16,[00]0140[01]*i=422,b=16,[00]0150[01]*i=442,b=16,[00]0160[01]*i=462,b=16,[00]0170[01]*i=482,b=16,[00]0180[01]*i=502,b=16,[00]
0190[01]*i=522,b=16,[00]01a0[01]*i=542,b=16,[00]01b0[01]*i=562,b=16,[00]01c0[01]*i=582,b=16,[00]01d0[01]*i=602,b=16,[00]01e0[01]*i=622,b=16,[00]
01f0[01]*i=642,b=16,[00]0200[01]*i=662,b=16,[00]0210[01]*i=682,b=16,[00]0220[01]*i=702,b=16,[00]0230[01]*i=722,b=16,[00]0240[01]*i=742,b=16,[00]
0250[01]*i=762,b=16,[00]0260[01]*i=782,b=16,[00]0270[01]*i=802,b=16,[00]0280[01]*i=822,b=16,[00]0290[01]*i=842,b=16,[00]02a0[01]*i=862,b=16,[00]
02b0[01]*i=882,b=16,[00]02c0[01]*i=902,b=16,[00]02d0[01]*i=922,b=16,[00]02e0[01]*i=942,b=16,[00]02f0[01]*i=962,b=16,[00]0300[01]*i=982,b=16,[00]
0310[01]*i=1002,b=16,[00]0320[01]*i=1022,b=16,[00]0330[01]*i=1042,b=16,[00]0340[01]*i=1062,b=16,[00]0350[01]*i=1082,b=16,[00]0360[01]*i=1102,b=16,[00]
0370[01]*i=1122,b=16,[00]0380[01]*i=1142,b=16,[00]0390[01]*i=1162,b=16,[00]03a0[01]*i=1182,b=16,[00]03b0[01]*i=1202,b=16,[00]03c0[01]*i=1222,b=16,[00]
03d0[01]*i=1242,b=16,[00]03e0[01]*i=1262,b=16,[00]03f0[01]*i=1282,b=16,[00]0400[01]*i=1302,b=16,[00]0410[01]*i=1322,b=16,[00]0420[01]*i=1342,b=16,[00]
0430[01]*i=1362,b=16,[00]0440[01]*i=1382,b=16,[00]0450[01]*i=1402,b=16,[00]0460[01]*i=1422,b=16,[00]0470[01]*i=1442,b=16,[00]0480[01]*i=1462,b=16,[00]
0490[01]*i=1482,b=16,[00]04a0[01]*i=1502,b=16,[00]04b0[01]*i=1522,b=16,[00]04c0[01]*i=1542,b=16,[00]04d0[01]*i=1562,b=16,[00]04e0[01]*i=1582,b=16,[00]
04f0[01]*i=1602,b=16,[00]0500[01]*i=1622,b=16,[00]0510[01]*i=1642,b=16,[00]0520[01]*i=1662,b=16,[00]0530[01]*i=1682,b=16,[00]0540[01]*i=1702,b=16,[00]
0550[01]*i=1722,b=16,[00]0560[01]*i=1742,b=16,[00]0570[01]*i=1762,b=16,[00]0580[01]*i=1782,b=16,[00]0590[01]*i=1802,b=16,[00]05a0[01]*i=1820,b=14,[00]
05b0[01]*i=1826,b=2,[00]2040[01]*i=1832,b=2,[04]0000[01]*i=1840,b=4,[00]0000[01]*i=1846,b=2,[00]0005[01]*i=1856,b=6,[00]0008[01]*
error! erc=0 
>/exit

リモート接続を終了しました
logfile closed at Thu Nov 28 11:13:23 2024

/PICWR実行後のベリファイでいくつかエラーが出てしまいました。
なんで?
よくよくログを確認したところ原因がわかりました。
今回はうっかりして/ERASEを実行しないでいきなり/PICWRを実行してしまいました。
ターゲットのPIC18F2550には以前のテストで短いプログラムを書き込んでそれが残っていたようです。
それを消去しないで上書きしてしまったためベリファイでエラーになってしまいました。
中身を消去しないでそこに上書きするとすでに書き込まれているデータのビットが1のところに0を上書きすることはできますが、すでに0になっているビットに1を上書きすることはできません。
今回発生したエラーはそれが原因だったのですが。
上のほうにちょっと書きましたが、実は今回のエラー表示にはそれとは全く別の問題があることがわかりました。
ベリファイエラーが発生した場合にそのエラーの内容が確認できるように、書き込み元のデータと書き込み後に読み出したデータを比較表示しています。
データだけではそのエラーが発生している位置がどこであるかが正確には把握できません。
そこでそのアドレスも表示できるとなお良いと考えて、ついでにそこのところもプログラムを変更しました。
最初にエラーが発生したところの表示は
i=22,b=4,[00]0008[0f]*verify error! 0,28−08
です。
ここの表示がおかしいのです。
i=22はもとのファイルの22バイト目のデータでb=4は書き込みをするデータが4バイトあって、[00]はそれがHEXファイルの行コードで通常のデータであることを示していて、0008は書き込みデータの先頭アドレスを示しています。
そこまでがWindows側からのUSB送信データです。
そのあとの[0F]はPIC側からの応答コードでエラーが発生したことを示します。
0,はそのアドレスの下位8ビットを示していて、28−08はもとのデータと書き込み後に読み出したデータです。
ここで問題なのは下位アドレスの0です。
HEXファイルの1行のデータは最大16バイトなのでその行の開始アドレスが0008の場合その行のアドレスは0008〜0017です。
ここで下位アドレス0はおかしいです。
一体なにが起きているのか?
またしても悪霊のしわざなのか?
もういい加減にしてほしいのですよねえ。
え?
どいういことなの?
よくわからんぞお。
はい。
詳細については次回に説明いたします。
なかなかにしんどいことであります。

PICBASICコンパイラ[第166回]
2024.11.29 upload

前へ
次へ
ホームページトップへ戻る