Như bạn nêu, EEPROM nội bộ có vòng đời 100.000 lần ghi. Đây không phải là một phỏng đoán - một tỷ lệ rất đáng kể ATmega328 sẽ đạt đến con số này mà không có vấn đề gì. Tôi đã thử nghiệm ba bộ xử lý trước đó và tất cả đều đạt 150.000 chu kỳ mà không gặp vấn đề gì.
Điều quan trọng cần lưu ý là chế độ thất bại của EEPROM. Hầu hết các dự án "khu trục EEPROM" liên tục đọc / ghi cho đến khi dữ liệu hoàn toàn không được ghi. Trước thời điểm này, EEPROM vẫn sẽ bị hỏng. Điều này sẽ được biểu hiện bằng dữ liệu không được giữ lại trong một khoảng thời gian hợp lý. Thật không khôn ngoan khi dựa vào bất cứ điều gì hơn 100.000 chu kỳ viết vì lý do này.
EEPROM khác với RAM trên ATmega. Viết cho nó không đơn giản hay nhanh chóng, nhưng nó được gói gọn trong một thư viện Arduino thân thiện , che giấu sự phức tạp này khỏi người dùng.
Cấp độ gián tiếp đầu tiên là thư viện EEPROM , đơn giản không đáng kể], chỉ cần gọi hai chức năng khác để đọc và viết. Điều này gọi eeprom_write_byte, được tìm thấy ở đây .
Hàm này sử dụng lắp ráp nội tuyến, vì vậy có thể không dễ hiểu. Có một nhận xét dễ hiểu mặc dù:
Đặt chế độ lập trình: xóa và viết
Điều này gợi ý cho một trong những phức tạp của việc xử lý EEPROM - để viết cho nó, trước tiên bạn cần xóa nó. Điều này có nghĩa là nếu bạn gọi EEPROM.write (), nó sẽ thực hiện chu trình ghi bất kể giá trị bạn đang viết là gì.
Điều này có nghĩa là việc viết nhiều lần 0xFF có thể sẽ có tác dụng tương tự như viết 0xFF, 0x00,0xFF, 0x00, v.v.
Có nhiều cách để giải quyết vấn đề này - bạn có thể thử gọi EEPROM.read () trước EEPROM.write () để xem giá trị này có giống nhau không, nhưng việc này cần thêm thời gian.
Có các kỹ thuật khác để tránh hao mòn EEPROM quá mức, nhưng việc sử dụng chúng phụ thuộc vào ứng dụng của bạn.