人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

アドレスバスの異常検知方法

ワンボードのマイコンシステムで、アドレスバスの異常検知をどうすればいいのか考えています。
マイコンと外部メモリをつなぐアドレスバスについて、その内の1本が断線している場合、プログラムで異常を検出できないでしょうか?

例えば、アドレスバスとデータバスが各々16bitであるとして
メモリ領域が
0000h?
0FFFh
まで使えるとします。

データバスについては、適当なアドレスに対して
AA55hを書いた後読み戻す
55AAhを書いた後読み戻す
というような手順で、バス断線を検出できると思います。

一方で、アドレスバス断線の場合は、例えばbit0が断線したとして
チェックのつもりで0FFFhをアクセスしても実際は0FFEhにアクセスしてしまい、0FFEhのデータを読み戻すだけなので異常かどうかを検出できません。

断線によりメモリ領域外(例:1FFFh)を指せば異常を検出できるかもしれませんが、異常によりメモリ領域内の違うアドレスを指してしまう場合にも何かエラー検知できないでしょうか?

●質問者: GM91
●カテゴリ:コンピュータ 科学・統計資料
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

使えるツールが欲しいということではなくて
アルゴリズムというか考え方を知りたいという趣旨です。
よろしくおねがいします。


1 ● a-kuma3
ベストアンサー

こんな特許がありました(既に切れてる)。

アドレス・バス5のすべてがロウ状態(L)でアクセスされるメモリに特定データ「00」を書込み、次いで、テストしたいアドレス・バスのみがハイ状態(H)になるメモリに特定データ以外の任意データを書込んだ後、すべてロウ状態(L)でアクセスされるメモリの内容をチェックして結線の良否を判定する。

マイクロコンピュータに於けるRAMアドレス・バスの結線テスト方法 - 特開平6?110723 | j-tokkyo

アドレスバスのビット数分だけの read / write で判定できる、ということですが、まっさらな状態じゃないと使えないですね。
想定しているのは、稼働中でのチェックでしょうか。


GM91さんのコメント
ありがとうございます。 確かに、初期化だけに限定すればあらかじめ別の値で埋めておいて後でチェック、というのは使えそうですね。 今設計中の装置でネックになりそうなのは、メモリ領域が不揮発RAMでそこには過去のデータが残っているので、いったんどっかに保存してから処理するとかそういうことをすればなんとかなるかもしれないですね。もうちょっと考えてみます。 詳細をもう少し説明すると、今設計している(ていうか人が設計したのをあれこれ審議してるとこ)装置は別の装置の監視役というか異常検知した時にログを残す係みたいな位置づけです。 で、まあ自分自身の健全性をどう確保するのか?っていう議論になって、バスチェックは単なるW/Rだとアドレスバスのエラーはわからんでしょ、既存の手法がなんかあると思うから探してみたら?みたいなことを言い放ったのはいいのですが、いざ自分だったらどうするか考えてみたときに具体案が浮かばなかったので質問した次第です。

a-kuma3さんのコメント
いちおう、ググる前に小一時間ほど考えてはみました(酔った頭で)。 初期状態だと、全アドレスに異なるデータ、例えばアドレス自身を書き込んで読みだす、という力技があるので、稼働状態での話だろうな、とは想像してました。 初期状態だと、チェックにかかる時間的なコストは最優先ではないだろうけれど、それでも効率とか、チェック用のコード自体に必要なメモリサイズを抑えたいとか。 で、思ったのが、こんな方法。 + 使えるアドレス幅のビットが ON になったアドレスは、稼働時には使わない + ビットが全て ON になったアドレスに、適当なデータを書き込む + ビットがひとつだけ OFF になったアドレスでデータを読み込む + 2. のデータと同じだったら、怪しい + 2?4 を、データを変えて何度か繰り返して、全て同じだったら、そのビットが断線してる可能性大 アドレスバスに不具合があれば、0FFFh に書き込んだつもりが別のアドレスに書き込むことになって、稼働中の回路だったら使ってる領域も壊しちゃうじゃん、って感じですが、そもそも、アドレスバスがいかれてるなら、別の領域を壊しても問題ない(というか、他に大きい問題を抱えてる)かなあ、と。 ただ、本ちゃんの方ではなく、チェック用の CPU のアドレスバスのセルフチェックだとすると、問題ありですね。 となると、使わないアドレスをいくつか決めておいて、固定のデータを入れておく。 それを読みだして、正しいデータが取れるかどうかを確認する、という感じでしょうか。 例えば、 0FFFh , 0555h , 0AAAh あたりを使わない、と決めておいて、それぞれ任意のデータ(ALL ZERO よりは、適当にビットが立っていた方が良い、かな)をあらかじめ書き込んでおき、随時読み出して、書き込んだデータと一致してるかどうかを診断に使う、とか。

GM91さんのコメント
>使わないアドレスをいくつか決めておいて、固定のデータを入れておく。 なるほど…ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ