PICの「コードプロテクト」問題


 マイクロチップ・テクノロジー・ジャパン社のホームページをみると、窓付きデバイス(JW、CL)とOTPデバイスは、パッケージがちがうだけでおなじチップであり、コードプロテクトはOFFで使用することを推奨している。理由は、コードプロテクトをONにしたデバイスは、プログラム書きこみができなくなる、窓付きデバイスは開発用として紫外線消去、プログラム書きこみを繰り返して使用するが、それができなくなる、というものです。その他の注意事項として、窓付きデバイスを紫外線消去するまえに、工場出荷時にプログラム・メモリに格納されている内部RC発振器用のキャリブレーションデータや、A/Dコンバータ用のキャリブレーションデータを読みこんで、メモしておくこと、窓付きデバイスを動作させるときは、窓をシールなどでカバーして光を当てないようにしないと、RAMが初期化されたり、消費電流が変化したり、ページの切り替えが動作しないことなどをあげています。

が実地にためしてみなくてはいけません。空理空論は、なんの役にもたちません。

 というわけで、FENG3の推測を、実験してみました。実験には、PICライタ5号機を使用しました。

PICライタ5号機

 PICライタ5号機のZIPソケットの32番ピンは、28ピンのPICの20番ピンにあたるので、本来はVddを結線しなければならないのですが、なにも接続されておりません。かわりに、11番ピンがVddに接続されています。正直いいますと、FENG3は、40ピンのPICのVdd端子と28ピンのPICのVdd端子がはじめはまったくおなじ位置にあるとおもいこんでいたのです。18ピンのPICの11番ピンが28ピンのPICのVdd端子である20番ピンとぶつかるので、反対側の11番ピンをVddに接続すればいいとおもったのです。しかし、40ピンのPICには両側にVdd端子がありますが、28ピンのPICには片側にしかありません。しかも、28ピンのPICの11番ピンは、RC0というI/Oピンです。エッチングもおわった時点でこの点に気づいたのですが、組み立ててみると、なんの問題もなくPICへの書きこみができました。

 推測その1の実験です。

 実験には、PIC16F84Aを使用しました。まず、PICにVddを接続しなくてもプログラミングできるのかどうかを実験するために、Vddのピンを切断しました。実際には、PICのピンを切断すると、もったいないので、18ピンのICソケットのほうのピンを切断しました。

実験につかったPIC16F84A

 ピンを切断するときには、このつぎから保護めがねを着用したほうがよさそうです。切れ端が飛んで、眼にささるおそれがあるからです。「安全第一」です。

 このPIC16F84AをPICライタ5号機にセットし、プログラムの書きこみテストをおこないました。ライタソフトはIC−Prog1.05A(日本語化パッチ適用)を使用しました。

 まず、「すべて消去」を実行しました。「デバイスは消去済み」と表示されました。つぎに、「ブランクのチェック」を実行しました。「デバイスはブランク」と表示されました。じつは、実験に使用したPIC16F84Aには、あらかじめプログラムを書きこんでおきました。じっさいには、「すべて消去」を実行しても、プログラムは消去されていませんでしたが、「デバイスは消去済み」と表示されたのです。また、ブランクでもないのに、「デバイスはブランク」と表示されたのです。Vddが供給されるように、PIC16F84AをICソケットからはずしてPICライタ5号機に直接、装着してセットしなおし、再度ブランクチェックを実行すると、やはり「次アドレスはブランクでありません 0000h!」という表示がでました。このままの状態で、「すべて消去」を実行し、「ブランクのチェック」を実行しました。これでほんとうにブランクになったわけです。

 つぎに、ブランクになったPIC16F84AをVdd端子を切断したICソケットに装着しなおし、PICライタ5号機にセットして、プログラムの書きこみテストをおこないました。「次のアドレスで照合に失敗 0000h!」という結果になりました。つまり、PICにVddがまったく供給されていない状態では、プログラムの読み書きはまったくできないということです。

 推測その2の実験です。

 こんども、PIC16F84AをVdd端子を切断したICソケットに装着して実験しました。こんどは、ジャンパ線をつかって、Vddの供給されているZIPソケットのコンタクトから、PICのVdd、Vss、MCLR、RB7、RB6の5つをのぞいた他の端子にVddを接続してみました。

Vddを他のピンに接続

 実験をまねされる場合は、自己責任でおこなってください。各信号線がどの位置にあるのか、よく確認することが必要です。PICが破損したり、ライタが壊れたり、パソコンが発火して壊れることがあるかもしれません。

 プログラムの書きこみはうまくいきました。

IC−Progの画面

 書きこみテストに使用したプログラムは、玄関ドアのコードロックのプログラムです。

 この実験の結果から、Vdd端子ではなくて、MCLR、Vss、RB7、RB6をのぞく、Vdd端子以外の端子に電源が供給されておれば、PICへのプログラミングは可能だとおもわれます。ただし、正規のVdd端子以外の端子に電源を供給することがPICに与える悪影響については、検証しておりません。ですが、これで、PICライタ5号機で悪戦苦闘したZIPソケットまわりの配線の問題の解決に光明がさしてきたわけです。本家のJDMプログラマの回路図をみても、Vddが本来の端子以外の端子にも接続されているなぞが、すこしは解けてきたわけです。

 この実験の結果をとりいれて、PICライタ5号機の「廉価版」(ICソケット版)のソケットまわりの配線をおこないました。つまり、「Vdd問題」とは、わたしにとっては、プログラミングのさいに未使用となるピンのあつかいの問題なのです。機会があれば、わたしがさいしょにつくったPICライタ5号機(ZIPソケット版)の回路の見直しもおこないましたので、回路図とパターン図もそのうち公開したいとおもっていますが、まずPICライタ6号機を完成させることを優先したいとおもいます。

 付録の実験

 Vddの問題は、自分なりに納得しました。ところで、Vppではどうでしょうか? Vppの場合は、PICのセレクタスイッチをなくせないものかと考えて実験したものですが、Vppを本来のVpp端子以外の端子にも供給すると、LEDランプはすべて暗くなり、PICにプログラムを書きこむことはできませんでした。

(2003年4月15日)