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


超ローコストPICWRITERの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
「PICBASICコンパイラ」からスピンオフ!!
過去記事を参照することなどを考えて該当する過去記事は「PICBASICコンパイラ」のまま連載回もそのままとします。
以後は前回記事からの流れで[第236回]からとします。
「PICBASICコンパイラ」はなるべく早く連載を再開したいと考えています。
PICはローコスト、高機能で種類も豊富なお手軽マイコンですがプログラムを書き込むためのWRITERが必要です。
それをできるだけ安価に作ってしまおうというプロジェクトです。
最終的には製品化を考えています(組立キット、完成品)。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第249回]



●PIC16F88(7)CP(コピープロテクト)

今回はPIC16F88WRITERプログラムの最後のテストです。
CP(コピープロテクト)がかかったプログラムをPIC16F88に書き込んで、それが読み出せないことを確認してから/ERASEで全消去します。
下はCPをかけたテストプログラムのソースプログラムリスト(部分)です。
;;;PIC 16F88  testprogram
;09/12/31
;25/1/17 3/29 3/30 4/2
;clock=4MHz
        #include <p16f88.inc>
;
;Program Configuration Register 1
        __CONFIG _CONFIG1,_CP_ALL & _LVP_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_CLKOUT
        __CONFIG _CONFIG2,
;
w=0
f=1
c=0
z=2
;

[第247回]のプログラムの_CONFIG1の行の_CP_OFFを_CP_ALLに書き換えました。
そのほかの部分はもとのプログラムと同じです。
このプログラム(16F88TEST1G2.ASM)をMPLABでアセンブルしてHEXプログラムファイル16F88TEST1G2.HEXを作成しました。

前回テストを行なったPIC16F88をWRITER回路にセットして/PICRDを実行しました。
logfile piciolog\0402080537.txt open
*** pic i/o ***
picio-30 connected
>/picrd
400C[71][3F][FC][3F][FF][3F]
type=04,uadrs=00
[08]
0000[10][05][28][FF][3F][FF][3F][FF][3F][FF][3F][83][16][12][28][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][6C][30][1A][28][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][8F][00][00][30][9B][00][86][00][85][00][83][12]
0040[10][21][08][85][00][27][20][A2][0B][22][28][A1][03][20][28][FA][30]
0050[10][A0][00][86][06][A0][0B][29][28][08][00][FF][3F][FF][3F][FF][3F]
0060[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]


07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[71][3F][FC][3F]
[10]
>

前回のテストで書き込んだプログラムが読み出されました。

/ERASEを実行してからもう一度/PICRDを実行しました。
>/erase
400C[71][3F][FC][3F][FF][3F]
>/picrd
400C[71][3F][FC][3F][FF][3F]
type=04,uadrs=00
[08]
0000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]


07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[FF][3F][FF][3F]
[10]
>

全て消去されました。

CPをかけたテストプログラム16F88TEST1G2.HEXを/HLOADコマンドで読み込んで/PICWRを実行し続いて/VERIFYを実行しました。
>/hload 16f88test1g2.hex
loading 16f88test1g2.hex ...
i=234,binbfend=94
>/picwr
400C[FF][3F][FF][3F][FF][3F]
i=6,b=2,[04]0000
[05][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=12,b=2,[00]0000
[05][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]
i=20,b=4,[00]000a
[05][00][04][00][0A][83][16][12][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[01]


i=84,b=2,[00]400e
[05][00][02][40][0E][71][1F][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[03]
i=90,b=2,[00]4010
[05][00][02][40][10][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
[03]
picwrend

>/verify
inbfend=0
400C[FF][3F][FF][3F][FF][3F]
i=6,b=2,[04]0000
[06][04][02][00][00][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(01)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
i=12,b=2,[00]0000
[06][00][02][00][00][05][28][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(02)(00)(00)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[x][x]error!


i=90,b=2,[00]4010
[06][00][02][40][10][00][00][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF][FF]
(10)(FC)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
[x][x]error!
vfend
error=42
>

コピープロテクトがかかっているので書き込んだ値を読み出すことができません。
ベリファイエラーになってしまいました。

念のために/PICRDを実行しました。
>/picrd
400C[FC][3F][FF][3F][FF][3F]
type=04,uadrs=00
[08]
0000[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
0010[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
0020[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
0030[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
0040[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]


07E0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
07F0[10][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]
[01]
type=04,uadrs=01
[08]
400E[71][1F][FC][3F]
[10]
>

最後のCONFIGの値だけは読み出せますがそれ以外は全て[00]になってしまいます。

ここまで確認ができましたから最後に/ERASEで全消去をしてからもう一度念のために/PICRDで読み出してみます。
>/erase
400C[71][1F][FC][3F][00][00]
>/picrd
400C[71][1F][FC][3F][00][00]
type=04,uadrs=00
[08]
0000[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0010[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0020[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0030[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
0040[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]


07E0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
07F0[10][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F][FF][3F]
[01]
type=04,uadrs=01
[08]
400E[FF][3F][FF][3F]
[10]
>/exit

リモート接続を終了しました
logfile closed at Wed Apr 02 08:07:47 2025

以上でテスト完了です。

超ローコストPICWRITERの製作[第249回]
2025.4.2 upload

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