超ローコスト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
前へ
次へ
ホームページトップへ戻る