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


超ローコストPICWRITERの製作

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

[第289回]



●PIC16F54(7)リバースエンジニアリング(3)

秋月のPICプログラマの解析を行なったことでかえって泥沼にはまってしまった原因はPIC16F54のDocumentをしっかり読まなかったことがそもそもの原因だったので誰に文句を言う筋合いではないのですけれど。
ひとこと言いたいです。
PIC16F54用のDocumentに間違いがありました。
ま。ときどきあることなのですけれど(困るぅ)。
それに振り回されてしまいました。


[出典]Microchip Technology Inc. PIC16F5X Memory Programming Specification

図の上から2つ目[Increment Address]が違っています。
これはおかしいです。
この通りにプログラムするとBulk EraseもプログラムのWriteもできません。
おかしいとは思ったのですけれど。
たまたま私の書いたプログラムにもバグがあったために正しい判断ができないまま泥沼になってしまったのでした。
上図の場合[Increment Address]はその位置ではなくてその下の[Bulk Erase]の次に置かれるべきです。
今までのPICの場合Bulk EraseコマンドはConfigアドレスで発行されるのが通例です。
よくよくPIC16F54のDocumentを読んでみましたら。
ちゃんとそのように書いてありました。
今までと同じだろうと思ったのでここは読んでいませんでした。


[出典]Microchip Technology Inc. PIC16F5X Memory Programming Specification

ただしこの場合にはEraseされるのはUserのプログラムエリアとConfigのみです。
User IDはEraseされません。
User IDを含めて全て消去するためには下のようにする必要があります。


[出典]Microchip Technology Inc. PIC16F5X Memory Programming Specification

なんだかなあという感じです。
毎度のことながらMicrochip様は何でも有りです。
User IDを含めて全消去するにはUser IDアドレス(200)でEraseコマンドを発行します。

そういうことだったのでした。
秋月のPICプログラマは当然User IDを含めて全部のエリアをクリアするために上の図の通りの手続きをしていたのです。
PIC16F54の場合Vppをアクティブにすることでプログラム/ベリファイモードになってそのときプログラムアドレスカウンタはConfigアドレス(3FF)にセットされます(前回引用Document 2.4.1)。
そこでIncrementコマンドを1回送出するとプログラムアドレスは000になります(前回引用Document 2.4.2.3)。
そこからアドレス200にプログラムカウンタを進めるにはさらにIncrementコマンドを200(16進数)回発行する必要があります。
つまり合計201(16進数)回です。
そこでEraseコマンドを発行するとUser IDを含めて全消去します。
やっと。
納得です。
なお現在作成中のPICWRITERプログラムではUSER IDの消去や書き込みは考慮しません。
個人ユーザーの場合USER IDなどを設定することは多分ないだろうとの判断からですし、できるだけ簡単なプログラムにしたいという考えからでもあります。

次回に続きます。

超ローコストPICWRITERの製作[第289回]
2025.5.27 upload

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