ワンボードのマイコンシステムで、アドレスバスの異常検知をどうすればいいのか考えています。
マイコンと外部メモリをつなぐアドレスバスについて、その内の1本が断線している場合、プログラムで異常を検出できないでしょうか?
例えば、アドレスバスとデータバスが各々16bitであるとして
メモリ領域が
0000h~
0FFFh
まで使えるとします。
データバスについては、適当なアドレスに対して
AA55hを書いた後読み戻す
55AAhを書いた後読み戻す
というような手順で、バス断線を検出できると思います。
一方で、アドレスバス断線の場合は、例えばbit0が断線したとして
チェックのつもりで0FFFhをアクセスしても実際は0FFEhにアクセスしてしまい、0FFEhのデータを読み戻すだけなので異常かどうかを検出できません。
断線によりメモリ領域外(例:1FFFh)を指せば異常を検出できるかもしれませんが、異常によりメモリ領域内の違うアドレスを指してしまう場合にも何かエラー検知できないでしょうか?
こんな特許がありました(既に切れてる)。
アドレス・バス5のすべてがロウ状態(L)でアクセスされるメモリに特定データ「00」を書込み、次いで、テストしたいアドレス・バスのみがハイ状態(H)になるメモリに特定データ以外の任意データを書込んだ後、すべてロウ状態(L)でアクセスされるメモリの内容をチェックして結線の良否を判定する。
マイクロコンピュータに於けるRAMアドレス・バスの結線テスト方法 - 特開平6-110723 | j-tokkyo
アドレスバスのビット数分だけの read / write で判定できる、ということですが、まっさらな状態じゃないと使えないですね。
想定しているのは、稼働中でのチェックでしょうか。
こんな特許がありました(既に切れてる)。
アドレス・バス5のすべてがロウ状態(L)でアクセスされるメモリに特定データ「00」を書込み、次いで、テストしたいアドレス・バスのみがハイ状態(H)になるメモリに特定データ以外の任意データを書込んだ後、すべてロウ状態(L)でアクセスされるメモリの内容をチェックして結線の良否を判定する。
マイクロコンピュータに於けるRAMアドレス・バスの結線テスト方法 - 特開平6-110723 | j-tokkyo
アドレスバスのビット数分だけの read / write で判定できる、ということですが、まっさらな状態じゃないと使えないですね。
想定しているのは、稼働中でのチェックでしょうか。
いちおう、ググる前に小一時間ほど考えてはみました(酔った頭で)。
初期状態だと、全アドレスに異なるデータ、例えばアドレス自身を書き込んで読みだす、という力技があるので、稼働状態での話だろうな、とは想像してました。
初期状態だと、チェックにかかる時間的なコストは最優先ではないだろうけれど、それでも効率とか、チェック用のコード自体に必要なメモリサイズを抑えたいとか。
で、思ったのが、こんな方法。
アドレスバスに不具合があれば、0FFFh に書き込んだつもりが別のアドレスに書き込むことになって、稼働中の回路だったら使ってる領域も壊しちゃうじゃん、って感じですが、そもそも、アドレスバスがいかれてるなら、別の領域を壊しても問題ない(というか、他に大きい問題を抱えてる)かなあ、と。
ただ、本ちゃんの方ではなく、チェック用の CPU のアドレスバスのセルフチェックだとすると、問題ありですね。
となると、使わないアドレスをいくつか決めておいて、固定のデータを入れておく。
それを読みだして、正しいデータが取れるかどうかを確認する、という感じでしょうか。
例えば、 0FFFh , 0555h , 0AAAh あたりを使わない、と決めておいて、それぞれ任意のデータ(ALL ZERO よりは、適当にビットが立っていた方が良い、かな)をあらかじめ書き込んでおき、随時読み出して、書き込んだデータと一致してるかどうかを診断に使う、とか。
>使わないアドレスをいくつか決めておいて、固定のデータを入れておく。
なるほど…ありがとうございます。
いちおう、ググる前に小一時間ほど考えてはみました(酔った頭で)。
初期状態だと、全アドレスに異なるデータ、例えばアドレス自身を書き込んで読みだす、という力技があるので、稼働状態での話だろうな、とは想像してました。
初期状態だと、チェックにかかる時間的なコストは最優先ではないだろうけれど、それでも効率とか、チェック用のコード自体に必要なメモリサイズを抑えたいとか。
で、思ったのが、こんな方法。
アドレスバスに不具合があれば、0FFFh に書き込んだつもりが別のアドレスに書き込むことになって、稼働中の回路だったら使ってる領域も壊しちゃうじゃん、って感じですが、そもそも、アドレスバスがいかれてるなら、別の領域を壊しても問題ない(というか、他に大きい問題を抱えてる)かなあ、と。
2016/01/09 16:50:10ただ、本ちゃんの方ではなく、チェック用の CPU のアドレスバスのセルフチェックだとすると、問題ありですね。
となると、使わないアドレスをいくつか決めておいて、固定のデータを入れておく。
それを読みだして、正しいデータが取れるかどうかを確認する、という感じでしょうか。
例えば、 0FFFh , 0555h , 0AAAh あたりを使わない、と決めておいて、それぞれ任意のデータ(ALL ZERO よりは、適当にビットが立っていた方が良い、かな)をあらかじめ書き込んでおき、随時読み出して、書き込んだデータと一致してるかどうかを診断に使う、とか。
>使わないアドレスをいくつか決めておいて、固定のデータを入れておく。
2016/01/10 07:09:43なるほど…ありがとうございます。