EEPROMで失敗した話(続)
2025.02.09
電源電圧低下の対策も最初から設計に織り込んであるし、これからは安心してバッテリーバックアップSRAMやEEPROMが使えると思ったら、まだ安心するのは早い。

落とし穴は意外と有る。
言われてみればそうだねと思うけど、言われないとなかなか最初気づかないこともある。

たとえばEEPROMに設定値を入れておく。端末番号とか、通信パラメータとか、IPアドレス等いろいろあるだろう。よくある使い方だ。

ところが・・・デバッグに使っていた試作機は正しく動くのに、量産で作った物に書き込んだら正常に動かない。なぜ?

そこで、EEPROMやバックアップRAMの初期値について考えたか?

EEPROMの話に絞って書くと、まっさらの新品のEEPROM、マイコンに内蔵されているEEPROMも、たいていは全番地FFhだと思う。

一方、設定値は例えば0~4の範囲だとする。もし初期化ルーチンでFFhを読み込んでプログラムが走ったらどうなる? 想定外の値でどうなるやら。

まあ分かっている人には当たり前なんだが、まずEEPROMの値を読み込んで範囲チェックをする。このパラメータについては0~4の範囲で、FFhは有り得ないから異常と判断する。日付だとしたら、0月とか13月とか32日は無いから、異常となる。
そこでデフォルト値に書き換えてやるといった処理が必要になる。

バックアップSRAMも、いまの保存データが本当に正しいものか、整合性をチェックしてから利用するという手順は欠かせない。
製作されて一度も動かしておらず、バックアップ処理をしたことのない状態のSRAMの内容をそのまま飲み込むわけにはいかない。初期化が必要だ。

色々な事態を想定するとややこしくなってくるが、たとえば同じデータを離れた番地にも置いて二重化するとか、それを読み込み時に照合して一致したら採用するとか。

もし特定の番地が書き込めなくなったらどうする、代替処理をするとしても、その処理の中で使っている番地が書き換えられなくなったり化けてしまったら・・・なんてところまで考えると心配で夜も眠れないが・・・

そういえば修理の仕事の中でもEEPROMの初期値について考慮されていなかった製品があり、他社さんが部品を交換しても何をどうやっても動かなかったものがあった。
自分もなかなか最初わからなかったが、ひょっとして?と思って、確か中古か借用した別の個体からEEPROMを差し替えてみると動いたので、確信した。

だからデータが異常かどうかをチェックして、自分でデフォルト値に書き換えるようなプログラムにしておけば、こんなふうに使えなくなることもなかったのに。
この時は正常な個体のデータを書き込み、さらにキャリブレーションが必要だったので手順を確認しながら実行して、正常な状態へ持っていった。
さらに、やはりリセット回路がモロに手抜きだったので、電圧検出ICを組み込んだ回路を追加して化け対策をした。
トラックバックURL
トラックバック一覧
コメント一覧
コメント投稿

名前

URL

メッセージ

- CafeLog -