답변:
상태에 따라 내부 EEPROM의 수명은 100,000 쓰기주기입니다. 이것은 추측이 아닙니다. ATmega328의 상당 부분이 문제없이이 숫자에 도달 할 것입니다. 나는 전에 세 개의 프로세서를 테스트했으며 모두 문제없이 150,000 사이클에 도달했습니다.
EEPROM의 실패 모드를 기록하는 것이 중요합니다. 대부분의 "EEPROM destroyer"프로젝트는 데이터가 전혀 쓰여지지 않을 때까지 반복적으로 읽기 / 쓰기를합니다. 이 시점 이전에는 EEPROM이 여전히 손상됩니다. 이는 합리적인 기간 동안 데이터가 유지되지 않는 것으로 나타납니다. 이런 이유로 쓰기주기가 10 만회 이상인 것은 현명하지 않습니다.
EEPROM은 ATmega의 RAM과 다릅니다. 간단하게 작성하는 것은 아니지만 친숙한 Arduino 라이브러리 에 싸여 있어 사용자에게 이러한 복잡성을 숨길 수 있습니다.
간접적 인 수준의 첫 번째 수준은 EEPROM 라이브러리 인데, 이는 간단하고 읽기와 쓰기를 위해 두 개의 다른 함수를 호출합니다. 여기서 eeprom_write_byte를 호출 합니다 .
이 함수는 인라인 어셈블리를 사용하므로 쉽게 이해할 수 없습니다. 이해하기 쉬운 주석이 있습니다.
프로그래밍 모드 설정 : 지우기 및 쓰기
이것은 EEPROM을 다루는 복잡성 중 하나를 암시합니다-쓰기 위해서는 먼저 지워야합니다. 즉, 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 데이터 시트의 사양보다 훨씬 우수하지만 유사한 실험 결과와 유사합니다.