ATMELによると、EEPROMセルのセル寿命は1セルあたり約100,000書き込みサイクルです。これは実際にEEPROMが実際にどのように機能するのですか?
セルの値を変更しない場合、これは寿命に影響しますか?たとえば0xFF
、同じセルに何度も値を書き込むと、、などの書き込み0x00
と0xFF
は異なりますか?0x00
ATMELによると、EEPROMセルのセル寿命は1セルあたり約100,000書き込みサイクルです。これは実際にEEPROMが実際にどのように機能するのですか?
セルの値を変更しない場合、これは寿命に影響しますか?たとえば0xFF
、同じセルに何度も値を書き込むと、、などの書き込み0x00
と0xFF
は異なりますか?0x00
回答:
述べているように、内部EEPROMの寿命は100,000書き込みサイクルです。これは推測ではありません。ATmega328のかなりの割合が問題なくこの数に達します。以前に3つのプロセッサをテストしましたが、すべてが問題なく150,000サイクルに達しました。
EEPROMの故障モードに注意することが重要です。ほとんどの「EEPROM destroyer」プロジェクトは、データがまったく書き込まれないまで繰り返し読み取り/書き込みを行います。この時点までに、EEPROMはまだ破損しています。これは、データが合理的な期間保持されないことで明らかになります。この理由から、100,000を超える書き込みサイクルに依存することは賢明ではありません。
EEPROMはATmegaのRAMとは異なります。それへの書き込みは簡単でも迅速でもありませんが、使いやすいArduinoライブラリにまとめられており、この複雑さをユーザーから隠しています。
インダイレクションの最初のレベルはEEPROMライブラリです。これは非常に簡単です。]読み取りと書き込みのために他の2つの関数を呼び出すだけです。ここにある eeprom_write_byteを呼び出します。
この関数はインラインアセンブリを使用するため、簡単に理解できない場合があります。ただし、簡単に理解できるコメントがあります。
プログラミングモードの設定:消去と書き込み
これは、EEPROMを処理する複雑さの1つを示唆しています。書き込みを行うには、まず消去する必要があります。これは、EEPROM.write()を呼び出すと、書き込む値に関係なく書き込みサイクルを実行することを意味します。
これは、0xFFを繰り返し書き込むと、0xFF、0x00、0xFF、0x00などを書き込むのと同じ効果がある可能性が高いことを意味します。
これを回避する方法があります-EEPROM.write()の前にEEPROM.read()を呼び出して、値がすでに同じかどうかを確認できますが、これにはさらに時間がかかります。
EEPROMの過剰な磨耗を回避する他の手法がありますが、それらの使用はアプリケーションによって異なります。
http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/
Arduinoは壁のいぼに差し込まれ、「数か月間ソファの後ろに」座っていました。EEPROMは、47日と1,230,163サイクル後に最初の書き込みエラーを検出しました。これは、atmelデータシートの仕様よりも1桁優れていますが、同様の実験の結果に似ています。