Làm thế nào để tăng tuổi thọ của EEPROM?


7

Tôi muốn lưu trữ một vài (8 cái bây giờ) mã IR vào EEPROM của Hội đồng quản trị của tôi. Sẽ thật tuyệt nếu ai đó có thể gợi ý một vài mẹo để tối đa hóa tuổi thọ.

Các mã IR trong bản phác thảo của tôi được lưu trong một loạt các dấu dài không dấu.

Tôi biết rằng số lần tôi sẽ viết cho EEPROM sẽ << 100.000 lần, nhưng vẫn muốn tối ưu hóa bản phác thảo của tôi. + sẽ giúp trong các dự án trong tương lai


3
Chỉ vì hứng thú, tôi đã cố gắng "làm hao mòn" EEPROM của mình một lúc trước. Phải mất khoảng 1,5 triệu lượt viết trước khi bắt đầu thất bại.
Nick Gammon

@NickGammon, thất bại như thế nào? Dữ liệu ngẫu nhiên?
James Waldby - jwpat7

Thất bại một chút, từ bộ nhớ.
Nick Gammon

Có thể là nếu bạn vượt quá các thông số kỹ thuật, bộ nhớ có thể trở nên kém tin cậy hơn. Tôi đã không kiểm tra điều đó. Có thể hình dung bạn có thể thấy rằng, sau một tháng, một chút sẽ thay đổi. Phát hiện của riêng tôi là bạn có thể vượt quá mức xếp hạng được đề xuất một lượng đáng kể và vẫn đọc lại byte bạn đã viết, một lát sau.
Nick Gammon

Câu trả lời:


4

Tôi có thể nghĩ về một vài:

  1. không bật nguồn trừ khi bạn phải làm vậy;
  2. đừng viết thư cho nó trừ khi bạn phải làm vậy;
  3. viết càng ít dữ liệu cho bạn càng tốt - nén dữ liệu; chỉ viết thư cho nó trong khi tắt hoặc tắt nguồn, ...;
  4. cấp độ ghi cho càng nhiều ô càng tốt - tăng địa chỉ ghi với lần ghi tiếp theo;
  5. sử dụng một eeprom lớn;
  6. sử dụng fram;
  7. sử dụng sram + pin dự phòng;

...

3 - 7 thực sự là những ví dụ về việc thực hiện # 2.


7

Câu trả lời khác đề cập đến một số ý tưởng chung; đây là một vài ghi chú cụ thể hơn

• Bạn có thể định hướng việc ghi các byte đơn thông qua một thói quen đọc ô EEPROM trước khi ghi vào nó và nếu giá trị của nó không thay đổi, thì không nên viết.

• Để cân bằng tải, bạn có thể chia không gian địa chỉ EEPROM thành các nhóm k, trong đó k = E / (n + 1), với n = kích thước mảng dữ liệu và kích thước E = EEPROM. Khởi tạo một thư mục, một mảng gồm m byte được đặt thành k, với m = En · k. Khi thiết bị của bạn khởi động, nó sẽ đọc qua thư mục cho đến khi tìm thấy mục hiện tại, một byte không bằng k. [Nếu tất cả các mục nhập thư mục bằng k, hãy khởi tạo đầu tiên thành 0 và tiếp tục từ đó.] Nếu mục nhập thư mục hiện tại chứa j, thì xô j chứa dữ liệu hiện tại. Khi bạn cần ghi dữ liệu mới, bạn lưu trữ j + 1 vào mục nhập thư mục hiện tại; nếu điều đó làm cho nó bằng k, hãy khởi tạo mục nhập thư mục tiếp theo thành 0 và tiếp tục từ đó. Lưu ý rằng các byte thư mục nhận được cùng một lượng hao mòn như các byte xô vì 2 · k> m k.


Cảm ơn, tôi cũng sẽ thử và thực hiện cân bằng tải cho bản phác thảo của mình. Giải thích tuyệt vời. Tôi kiểm tra xem các giá trị có giống nhau trước khi viết không, vì vậy phần đó được quan tâm.
karx

2

Nếu dữ liệu của bạn chỉ chiếm một phần nhỏ trong EEPROM của bạn, bạn có thể sử dụng một trong các thuật toán cân bằng hao mòn . Bản chất của các thuật toán này là viết vào một vị trí khác nhau mỗi lần, do đó, ghi được trải rộng trên một số vị trí trong khi mỗi vị trí nằm dưới giới hạn 100.000 ghi.

Có một số thuật toán như vậy được thảo luận ở đây , mà bạn có thể tự thực hiện. Ngoài ra, bạn chỉ có thể sử dụng một thư viện như thế này .


1
Đây là những liên kết tuyệt vời Dmitry! Cảm ơn. Dù sao, bây giờ tôi đang sử dụng ~ toàn bộ EEPROM cho dữ liệu. Thao tác ghi rất hiếm trong mã của tôi và chỉ xảy ra trong khi bắt đầu vòng đời (thời gian cấu hình của thiết bị của tôi). Vòng đời chủ yếu chỉ bao gồm các hoạt động đọc. Khi kích thước của các tệp cấu hình của tôi tăng lên, tôi hiện đang tìm kiếm các kỹ thuật tối ưu hóa bộ nhớ để phù hợp với tất cả những gì trong EEPROM và không cần thêm bất kỳ dung lượng lưu trữ nào.
karx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.