マイコン故障として、マイコン機能の高速CRC、汎用CRC、RAMパリティ・エラー検出、不正メモリ・アクセス検出の機能を取り入れます。
すべて、マイコン機能のため、新たに設計するようなところはありません。マイコンのハードウェアマニュアルに記載されている処理手順で実装します。
今回は、これらマイコンの安全機能についてどのような機能なのかの紹介と、どうやって実装するのかを考えたいと思います。
高速CRC
高速CRCは、起動時の初期化設定のときに、プログラム・メモリ空間と呼ばれる、ROMエリアの領域全体をチェックします。
高速CRCの演算方法は、CRC-16-CCITTに対応しています。
今回のマイコンは、R5F104LEですので、プログラム・メモリ空間は、00000H~0FFFFHです。領域全体をチェック対象にする設計とするため、高速CRCの演算の範囲は、00000H~0FFFBHとし、演算期待値の格納場所を最後の0FFFCH~0FFFDHに格納します。
高速CRCは、ROMエリア全体をチェックしますので、オンチップデバッグが有効の場合は、演算期待値と一致しなくなるので、オンチップデバッグでデバッグするときは、無効にするために、コンパイルSWで切り分けることをします。
高速CRCにて、演算結果と演算期待値が一致しない場合は、無限ループを行い、ウォッチドッグリセットによりマイコンをリセットさせます。
簡単ですが、高速CRCの設計については、以上です。
今回、基本的に、CS+のコード生成を使用しないため、直接、cstart.asmファイルに実装していきます。このため、アセンブラ言語が必須になります。なるべくアセンブラ言語がわからなくても、処理の流れだったり、どういう処理をしているのかを補足していきますので、アセンブラ言語が知らなくても大丈夫です。
汎用CRC
基本的に、高速CRCと同じです。ただし、使い方が少し異なることがあるので、補足します。
今回、高速CRCのほかに、汎用CRCを使用しますが、こちらは、高速CRCでは、起動時の初期設定時に行うのに対し、汎用CRCは、処理の動作中にROMチェックを実施を可能にしたものとなります。
汎用CRCの演算方法は、高速CRCと同様に、CRC-16-CCITTが使用されます。
また、高速CRCと同様に、ROMエリア全体をチェック対象に設計しますので、オンチップデバッグが有効の場合は、演算期待値と一致しなくなるため、オンチップデバッグでデバッグするときは、無効にするために、コンパイルSWで切り分けることをします。
汎用CRCにて、演算結果と演算期待値が一致しない場合も、高速CRCと同様に、無限ループを行い、ウォッチドッグリセットによりマイコンをリセットさせます。
簡単ですが、汎用CRCの設計については、以上です。
RAMパリティ・エラー検出
RAMチェックとして、RAMパリティ・エラー検出機能を使用します。
RAMパリティ・エラー検出を有効に設定するとマイコンが検出してくれます。異常を検出すると、割り込みを発生し、この割り込み処理に異常時の処理を記述します。
今回は、無限ループを行い、ウォッチドッグリセットによりマイコンをリセットさせます。
簡単ですが、RAMパリティ・エラー検出については、以上です。
不正メモリ・アクセス検出
RL78/G14マイコンが使用不可としているメモリ空間や、プログラム・メモリ空間への書き込みなど、マイコンにて不正アクセス対象としている空間に対して、検出します。
こちらは、マイコンが検出してくれますので、不正メモリ・アクセス検出の有効・無効を設定するのみです。
また、もし、不正メモリ・アクセス検出した場合、マイコンが勝手にリセットを発生させます。
マイコン故障の設計は、以上になります。
具体的な実装方法は、別途、実装するときに説明します。