PIC18FではPICのPinにハード機能を割り付けるPPSという機能がある。
PPS機能にはLOCK機構があり、セットするとPPS機能が変更ができなくなる。
PPSをLockする場合、マニュアルではシーケンスがあると記述があるが、うまく機能していないようである。
シーケンスは55h,AAhを先行して書き込んだあとビットをセットするものであり、ハード的にデータをコンペアしてEnableを出す、数十年前からある手法ではある。
結論から言うと、55h,AAhにかかわらず、PPSLOCKビットは動作するようである。
LOCKすると、PPSの設定は無効となる。
55h,AAhの書込み先はPPSLOCKレジスタとなっているが、これについてはLockビットと同じアドレスへの書き込みということ自体疑問である。
ANではPPSLOCKレジスタではなく、EEPROMのLOCKレジスタとなっている。
いずれも試したがLOCK自体は有効で、シーケンスの有無による変化はない。
推測ではあるが、 シーケンス書き込みが別のアドレスなのかもしれない。
また、リセットで初期値に戻ってしまうようである。
本来PPS設定はEEPROMに保存され、電源ON直後から自動的に有効になってほしい機能である。
Power On Reset後のポートが切り替わる(リセットはHiZ)までの極短い間ではあるが、電源が立ち上がったあとでポートの出力データにごみが入ってしまうことになる。