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


超ローコストPICWRITERの製作

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

[第242回]



●PIC16F1503(6)CP(コピープロテクト)

一件落着ではありませんでした。
まだCP(コピープロテクト)が残っていました。
PICの場合CPをかけるとそこに書かれたプログラムを読み出すことはできなくなります。
CPを解除する手段はありません。
CPを外すためにはBULK ERASEするしかありません。
CPが解除されると同時にそこに書かれていたプログラムも消去されてしまいます。
完璧なコピーガードです。
/ERASEコマンドではBULK ERASEを実行しているはずですがそれを確認するためにはPIC16F1503にCPをかけたプログラムを書いて/ERASEでそれが消去されるかどうかを確認する必要があります。
今回はその確認です。
テストのためにCPをかけたプログラムを用意しました。
16F1503TEST2.ASMです。
[第238回]で紹介した16F1503TEST.ASMのCONFIG行に_CP_ONを追加しただけです。
;;;PIC 16F1503  testprogram
;25/03/25
;clock=4MHz
        #include <p16f1503.inc>
;
        __CONFIG _CONFIG1, _WDTE_OFF & _FOSC_INTOSC & _CP_ON
;
cntr0=20
cntr1=21
;
     org 00
     goto start
;
     org 05
start
    banksel OSCCON;bank 1
        movlw 68;=4MHz
        movwf OSCCON
    clrf TRISC
        banksel ANSELC;bank3
        clrf ANSELC
        banksel PORTC;bank0
;
t1s:
        call t1ms
        call t1ms
        call t1ms
        call t1ms
        movf cntr1,w
        movwf PORTC
        incf cntr1
        goto t1s
;
t1ms
        call t256us
        call t256us
        call t256us
        call t256us
        return
;
t256us
        nop;1/4
        decfsz cntr0;1/4
        goto t256us;2/4
        return   
;
    end
;

これをアセンブルしてできた16F1503TEST2.HEXを/HLOADで読み込んで/PICWRと/VERIFYを実行しました。
事前にターゲットのPIC16F1503は/ERASEを実行して消去済みです。
>/hload 16f1503test2.hex
loading 16f1503test2.hex ...
i=225,binbfend=92
>/picwr
400C[E2][2C][FF][3F]
********picwrend

>/verify
inbfend=0
400C[E2][2C][64][3F]
(01)(E2)(2C)(64)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
(02)(00)(00)(64)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(06)(00)(00)(00)(00)(00)(00)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
error!
(10)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)
error!
(10)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)
error!
(0A)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)
error!
(03)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)(00)
(10)(64)(3F)(FF)(3F)(3F)(33)(BD)(19)(FF)(3F)(FF)(3F)(FF)(3F)(FF)(3F)
vfend
error=41
>

/PICWRと/VERIFYはいままでデバッグのために送受信データを表示させていましたが大体その目的は達成したと判断して表示をすっきりさせました。
CPがかかっているので/VERIFYを実行しても読み出したプログラムは全て[00]になってしまいます。
ということはコピープロテクトをかけるとベリファイはできなくなるということになります。
なるほど。
つうことは定番通りPIC18F13K50のWRITERプログラムの中でプログラムの書き込み後にベリファイをしなければならないということになります。
CPは最後に書き込むCONFIGの中で定義します。
そのあたりはよく考えてみたいと思います。

念のために/PICRDを実行しました。
冗長になりますから途中を省略してあります。
>/picrd
400C[E2][2C][64][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]


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
[03]
400E[64][3F]
[10]
>

読み出したデータは全て[00]です。
最後に読み出したCONFIGだけはそのままの値が読み出されています。
値は3F64です。
CPをかけていないプログラムではここは3FE4になっていました(前回参照)。
CPはCONFIGのbit7にあります。

[出典]Microchip Technology Inc.PIC16F1503 Data Sheet

CPをONにするとbit7=0になります。

そこまで確認できましたので続いて/ERASEを実行し、もう一度確認のため/PICRDを実行しました。
>/erase
400C[E2][2C][64][3F]
>/picrd
400C[E2][2C][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]
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
[03]
400E[FF][3F]
[10]
>

CPがクリアされてCONFIGが3FFFになるとともにプログラムも消去されて全部が3FFFになりました。
BULK ERASEが正しく実行されたことが確認できました。

今度こそ本当に。
一件落着です。

超ローコストPICWRITERの製作[第242回]
2025.3.25 upload

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