AVR の EEPROM データが壊れるのを防ぐには

909クローンのファームウェアの開発中、eeprom に書き込んだリズムパタンが書き込んだ後に崩れる現象がまあまあ頻繁に発生して、最初はファームウェアのバグのせいかと思っていたのですが、バグにしてはどうにも発生場所がランダムだったり発生の契機が読めなかったりで、これはプロセッサの誤動作なのでは?と考え始め、発生条件をもっとよく調べてみたら、どうも電源を落として立ち上げると何の書き込みをしていなくてもちょいちょい壊れるらしい。そういうわけで何の問題でどう対策すれば良いのか調べました。

調べてみると意外とあっさりと、EEPROM データ崩壊について Microchip の FAQ が出されているのが見つかりました。

https://microchipsupport.force.com/s/article/Prevent-EEPROM-corruption

EEPROM のデータ崩壊はよく知られている問題らしく、電源電圧が中途半端に低いと EEPROM が誤動作してデータが書き換わってしまうらしいです。電源を入れる時と落とすときにこの状態に陥りやすいのでデータが良く壊れるとのこと。

これを防ぐには、電源電圧が低くなる時にはプロセッサをリセット状態にしておけば良いそうです。手っ取り早く実現するには、プロセッサの Brown-out Detector (BOD) を動かしておけば良いようです。

そういうわけで、ヒューズビットを変更して BOD を動かし、Brown-out 電圧を 4.0V に設定しました:

ヒューズを変更した後、今のところ EEPROM のデータ壊れは起きていません。しばらく様子見します。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください