EEPROM với độ bền cao


8

Tôi hiện đang làm việc trên một dự án nhúng trong đó tôi có một bộ đếm sẽ hoạt động mọi lúc. Nếu mất điện thì tôi cũng phải lưu trạng thái bộ đếm cuối cùng và tải lại trong lần khởi động tiếp theo. Vì vậy, tôi đã lên kế hoạch sử dụng EEPROM, trong đó tôi sẽ liên tục viết giá trị truy cập của mình. Nhưng tôi đã đọc được ở đâu đó rằng EEPROM có độ bền đọc / ghi ở mức khoảng 100.000 và tôi sẽ cập nhật bộ đếm đó có thể là 120.000 mỗi 24 giờ. Vì vậy, tôi đang tìm giải pháp thay thế để hoàn thành nhiệm vụ này. xin vui lòng cho tôi đề nghị của bạn để làm như vậy.


4
Sử dụng một eprom lớn và làm cân bằng mặc?
PlasmaHH


6
Bạn có thể sử dụng RAM + phát hiện mất điện? Đó là những gì thường được thực hiện.
Bryan Boettcher

1
EEPROM có lẽ không phải là một giải pháp phù hợp nhất. Ngoài ra, bạn có thể thử giảm tần suất viết nếu yêu cầu của bạn cho phép điều này. Ngoài ra, bạn có thể muốn thực hiện ghi vào các địa chỉ ngẫu nhiên / đang chạy thay vì cùng một địa chỉ (chắc chắn bạn sẽ phải đưa ra một số cấu trúc dữ liệu có thể truy xuất dữ liệu đó sau đó.)
Eugene Sh.

2
Có các loại NVRAM khác ngoài EEPROM hoặc flash. Hãy thử tìm kiếm chip FRAM hoặc MRAM - những chip này có độ bền cao hơn nhiều lần.
Turbo J

Câu trả lời:


12

Một giải pháp khác có thể là sử dụng một vi điều khiển với FRAM không bay hơi. FRAM không gặp phải những hạn chế tương tự đối với các chu trình ghi như EEPROM.

Một số sản phẩm MSP430 từ TI có sẵn với FRAM, đây là liên kết đến một ứng dụng tương tự như những gì bạn mô tả:

MSP430 với trạng thái lưu FRAM khi mất điện

Đây là bài viết Wikipedia về FRAM: FRAM


Đó hoàn toàn không phải là giải pháp, bởi vì việc ghi nhiều byte vẫn sẽ bị hỏng khi mất điện. Hay bạn đang đề nghị OP giới hạn bản thân trong một byte đơn?
ultimA

1
@ultimA Thư viện NVS đảm bảo ghi 16 bit, OP không cho biết bộ đếm của anh ta lớn như thế nào. Đây chỉ là một ví dụ, các kỹ thuật khác có thể cho phép lưu trữ các cấu trúc dữ liệu lớn hơn: Lưu trữ không bay hơi (NVS): Thư viện giúp xử lý dữ liệu không bay hơi dễ dàng và mạnh mẽ chống mất điện gián đoạn hoặc đặt lại thiết bị không đồng bộ. Các thiết bị MSP430 với bộ nhớ không bay hơi FRAM đảm bảo ghi 16 bit trong mọi tình huống. Thông thường dữ liệu được lưu trữ là một cấu trúc lớn hơn. NVS chứa các chức năng lưu trữ dữ liệu theo cách được đảm bảo để phục hồi mục nhập hợp lệ cuối cùng mà không bị hỏng.
John D

5
FRAM là một giải pháp tuyệt vời cho vấn đề này. Tôi vui mừng khi thấy một câu trả lời ở đây cho thấy việc sử dụng nó. Nếu không có tôi sẽ viết một câu trả lời tương tự. Các giải pháp của tôi sử dụng FRAM luôn lưu trữ hai bản sao dữ liệu theo tuần tự. Chỉ một trong số đó có thể sẽ bị hỏng. FRAM cũng viết cách nhanh hơn EEPROM. Mỗi bản sao của dữ liệu cần một cách để xác nhận rằng nó là chính xác. Điều đó có thể được thực hiện bằng XOR CRC đơn giản hoặc đối với tập dữ liệu nhỏ, bạn có thể chỉ cần lưu trữ dữ liệu và phần bổ sung của nó trong mỗi bộ dữ liệu. Khi khởi động, bạn chỉ cần kiểm tra bản sao của dữ liệu được lưu trữ xác nhận.
Michael Karas

Ngẫu nhiên một số người đã nói đùa rằng sử dụng bộ nhớ lõi. FRAM là phiên bản hiện đại của công nghệ hoạt động tương tự như cách hoạt động của bộ nhớ lõi.
Michael Karas

1
Nếu có đủ không gian, việc giữ một bộ đếm theo cách có thể được cập nhật một cách an toàn có thể được thực hiện theo một số cách đơn giản. Một cách đơn giản là có hai bản sao của bộ đếm cũng như một chỉ báo cho bản sao nào là hợp lệ; nếu chỉ báo chỉ thay đổi khi cả hai bản sao hợp lệ và trước khi thay đổi mã sao chép sẽ đặt chỉ báo cho biết bản sao khác là hợp lệ (và sau khi viết, chỉ báo hiển thị cả hai đều hợp lệ), thì nó sẽ không thành vấn đề được đọc từ một cái gì đó đã được viết trong thời gian mất điện.
supercat

11

Tôi có vấn đề này trong một dự án hiện tại.

Cách tôi xử lý là giữ giá trị trực tiếp của bộ đếm trong RAM. Tôi đã thêm một chút phần cứng để vi điều khiển có thể phát hiện ra rằng điện áp nguồn đầu vào thấp. Nếu vậy, nó dừng những gì nó đang làm, lưu giá trị bộ đếm trực tiếp trong EEPROM, sau đó chờ xem điện áp nguồn thô. Nếu nó đi lên, với một số độ trễ, thì vi cơ bản sẽ khởi động lại. Mặt khác, nếu nguồn điện tiếp tục giảm, micro cuối cùng sẽ bị dừng lại. Trong lần khởi động lại tiếp theo, giá trị bộ đếm được tải từ EEPROM, sau đó được sử dụng lại trong RAM cho đến khi tắt nguồn tiếp theo.

Sẽ không mất nhiều thời gian để viết một giá trị nhỏ vào EEPROM. Rất có thể hệ thống cung cấp năng lượng hiện tại của bạn có đủ bộ lưu trữ năng lượng để bạn có thể phát hiện điện áp xuống thấp và vẫn có đủ thời gian chạy được đảm bảo trước khi cấp nguồn cho vi mô xuống dưới ngưỡng ghi hoạt động hoặc EEPROM.

Trong trường hợp của tôi, phần cứng bổ sung duy nhất là một diode Schottky để ngăn chặn nguồn điện DC hút điện từ nguồn cục bộ trên đường xuống và hai điện trở làm bộ chia điện áp để micro có thể đọc điện áp đầu vào thô. Phần còn lại là phần sụn.

Điều quan trọng cần lưu ý là bạn nên xem điện áp trên đầu vào cho bất kỳ nguồn cung cấp cuối cùng nào cung cấp năng lượng cho micro, chứ không phải điện áp nguồn của micro. Vào thời điểm sau này xuống thấp, nó có thể là quá muộn. Hy vọng rằng có một phạm vi điện áp dưới mức tồi tệ nhất khi mọi thứ hoạt động chính xác, và trên mức cung cấp năng lượng của vi mô để đảm bảo điện áp quy định cho vi mô. Trong trường hợp của tôi, nguồn cung cấp của micro là một bộ điều chỉnh buck được cung cấp từ 48 V, do đó, có một phạm vi lớn dưới mức bình thường nhưng nơi mà micro vẫn có thể hoạt động đáng tin cậy.


4

Giải pháp cũ cũ, bộ đếm cmos + pin lithium hoặc Ram + pin lithium.

Nguồn cung cấp cho phần tử lưu trữ đến từ nguồn cung cấp bình thường khi có sẵn hoặc pin khi không có.

Rất nhiều micros hiện đại trong giấc ngủ sẽ duy trì trạng thái của chúng với nguồn cung hiện tại rất thấp. Vì vậy, bạn có thể sử dụng kỹ thuật này với tính năng phát hiện tắt nguồn để đi ngủ sau đó sử dụng pin để duy trì trạng thái trong thời gian ngủ trong khi nguồn cung cấp chính bị tắt.


2
Một giải pháp thậm chí cũ hơn là bộ nhớ lõi từ.
glen_geek

Chỉ muốn trả lời giống nhau :) Đây là thiết bị sử dụng datasheets.maximintegrated.com/en/ds/DS1307.pdf
Ẩn danh

1
@glen_geek Thậm chí tôi không nhớ sử dụng nó. :)
RoyC

4

Microchip có một loạt các bộ phận "EERAM" I 2 C sẽ cho phép lưu trữ dữ liệu trong SRAM, sau đó ghi nó vào EEPROM (sử dụng năng lượng được lưu trữ trong tụ điện) khi mất điện, được nạp khi mất điện. Điều này có vẻ như nó sẽ là hoàn hảo cho ứng dụng của bạn.

Một ví dụ đại diện cho những bộ phận này là 47L04 .


3

Giải pháp khác.

Phát hiện mất điện và sử dụng siêu tụ điện hoặc siêu nắp để giữ năng lượng trong vài mili giây. Sử dụng thời gian này để viết giá trị truy cập của bạn vào EPROM. Chỉ viết thư cho EPROM khi mất điện. Số chu kỳ EPROM = không có chu kỳ giảm điện.


3

Sử dụng chip FRAM như FM24C04B. Họ có độ bền viết rất cao và không dễ bay hơi.

https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf

Bạn cũng có thể sử dụng mô-đun SRAM (NVRAM) được hỗ trợ bằng pin. Ví dụ: M48Z02-150PC1

https://www.mouser.com/ds/2/389/m48z02-955115.pdf


Tôi không chắc chắn về các khu vực khác, nhưng ở đây digikey Vương quốc Anh là nhiều rẻ hơn so với Mouser cho các bộ phận FRAM. Và như mọi khi, miễn là bạn có thể tìm được nhà cung cấp mà bạn có thể tin cậy (hoặc nếu bạn chỉ cần một cuộc điều hành nhỏ và có thể sống với cơ hội giao dịch với nhà cung cấp có khả năng không đáng tin cậy), có rất nhiều nhà cung cấp Trung Quốc có thể cải thiện đáng kể cả giá cả.
Jules

1

Tôi đã quyết định đi với "DS1307 RTC". Bởi vì nó có 54byte SRAM được hỗ trợ năng lượng. cho phép chu kỳ đọc / ghi vô hạn.


0

Nếu dự án nhúng của bạn có NIC trên đó, hãy gửi bộ đếm của bạn đến máy tính / máy chủ từ xa. Có vẻ như 120.000 lần lặp trong 24 giờ là khoảng một lần lặp trong 0,72 giây, sẽ ổn cho lưu lượng mạng.

Máy chủ sẽ luôn có giá trị cuối cùng của bộ đếm được lưu trữ. Không có tham nhũng giá trị truy cập khi mất điện vì gói hợp lệ cần được phát hành để cập nhật giá trị trên máy chủ; tuy nhiên yêu cầu kết nối liên tục hoặc giao thức hết thời gian đặc biệt phải được thiết kế. Ngoài ra, như một phần thưởng, bạn sẽ có thể điều khiển thiết bị của mình từ xa nếu cần thiết.


1
Nếu yêu cầu là thực hiện bộ đếm khung để ngăn chặn các cuộc tấn công phát lại và nếu không thì đảm bảo tuân thủ giao thức, bạn sẽ gửi giá trị đến thiết bị như thế nào?

0

A) Sử dụng tụ 100 100F (hoặc lớn hơn) để tăng sức mạnh cho bộ đếm trong thời gian tắt. Hoặc bất cứ logic nào được yêu cầu để giữ giá trị truy cập.

B) Sử dụng bộ nhớ lõi từ , chúng có thể là một chút iffy để thiết lập.

C) Tạo một chiết áp điều khiển động cơ (như servo), đến một lúc nào đó bộ đếm của bạn sẽ tràn ra, phải không? Bản đồ đến 360 độ. Sau đó tạo một vòng phản hồi để bạn có thể đặt giá trị của chiết áp kỹ thuật số và đọc kỹ thuật số.

D) Gửi giá trị truy cập của bạn một lần mỗi phút đến một số máy chủ hoặc máy chủ và để họ nhớ giá trị cho bạn trong thời gian nghỉ. Sau đó, một khi điện trở lại, lấy lại giá trị truy cập.


1
Bạn thậm chí vẫn có thể mua bộ nhớ lõi?
BeB00

@ BeB00 Tôi không biết, đó là trước thời gian của tôi. Nhưng tôi sẽ sử dụng đai ốc lục giác cho các thanh ren 2 mm với một số dây quấn xuyên qua nó giống như một cuộn dây hình xuyến. - Và sau đó quay trở lại bất kỳ mạch nào thường được sử dụng với bộ nhớ lõi. Tôi cho rằng chỉ cần một ADC là đủ tốt để đọc, khi độ trễ của lõi đi theo hướng khác và giải phóng năng lượng.
Harry Svensson

Ý tôi là ... có thể là một thử nghiệm sẽ rất vui, nhưng tôi chắc chắn sẽ không bao giờ sử dụng nó trong một hệ thống mà tôi cần để làm việc
BeB00

@ BeB00 ebay.com/bhp/vousing-core-memory Ồ, có vẻ như nó tồn tại trong trường hợp ai đó muốn những thứ chất lượng cao.
Harry Svensson

: P Tôi không chắc là nó được bảo hành trong 60 năm
BeB00
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.