Code protection
ホビーレベルでは使う機会の無い機能の筆頭、かと思います。PicWriterUSBでもBULK ERASE PROGRAM MEMORYとBULK ERASE DATA MEMORYの両コマンドを使用していますので、/CP、/CPDの状態に関わらずFlashもEEPROMも全て消してから書込みを行います。
BULK ERASE PROGRAM MEMORYを使用する際には事前にLOAD CONFIGURATIONを実行しますので、8000h〜のUser IDも消去されます。EEPROMもUser IDも新しいHEXファイルにデータがあればもちろんそれを書込みますが、FlashエリアのみアップデートしEEPROMやUser IDをそのまま残すといったユースケースは想定していません。
(将来的には何かオプションとして対応するかもしれません)
EEPROM
EEPROMも書込みに際しての留意点があります。
- EEPROMはデータ長8bitだが、LOAD DATA FOR DATA MEMORYコマンドにて書込む際には上位に0埋めした14bitのワードデータとして扱う
- Multiple Word Programmingには対応していない=データラッチは1つしか無いので、LOAD DATA FOR DATA MEMORYコマンドとPROGRAMMINGコマンドは必ず対で用い、1バイト(ワード)ずつ書込む必要がある
- 書込みにINTERNALLY TIMED PROGRAMMINGを用いると該当するアドレスのEEPROMを消してから書込みを行う。EXTERNALLY TIMED PROGRAMMINGでは消去を行わなず書込みのみ行う。EXTERNALLY TIMED PROGRAMMINGの方が処理時間が短いため、BULK ERASE DATA MEMORYにてEEPROMに全域を消去してからEXTERNALLY TIMED PROGRAMMINGを用いて書込みを行うと早い。
Flashエリアの書込みで折角複数のデータラッチを使用するプログラムを作ったのに、それが使えないのはちょっと残念ですが、仕方無いかなというところです。PicWriterUSBにてEEPROMを含めたPIC16F1823の全域の書込みを行うと800msec強かかります。(Flashエリアのみの場合の2倍程)
ちなみに下記のフローはさすがに間違いですよね。これだと最後の1バイトしか書き込まれない。。
※コマンドの例:PIC16F1823 Memory Programming Specificationより抜粋
Configuration Memory
PIC16F1823ではワードオフセットアドレス8000h〜のConfiguration Memoryエリアで書込み出来るのは、User ID0〜3(8000h〜8003h)、Configuration Word1,2(8007h, 8008h)の6ワードのみです。留意点は下記になります。
- INTERNALLY TIMED PROGRAMMINGのみ使用可能(EXTERNALLY TIMED PROGRAMMINGは使用不可)
- こちらもMultiple Word Programmingには対応しておらず、1ワードずつ書込みを行う必要がある
コメント