שְׁאֵלָה:
מהו חייו האמיתיים של EEPROM?
Marlon Abeykoon
2014-02-15 10:09:14 UTC
view on stackexchange narkive permalink

ATMEL אומר כי חיי התא של תא EEPROM הוא כ 100,000 מחזור כתיבה / תא. האם זה באמת איך ה- EEPROM מתבצע בטבע?

אם אני לא משנה את הערך של התא, האם הלחץ הזה לכל החיים? לדוגמא, אם אני כותב את הערך 0xFF לאותו תא שוב ושוב, האם זה שונה מהכתיבה 0x00 , 0xFF , 0x00 וכו '

חָמֵשׁ תשובות:
#1
+19
Cybergibbons
2014-02-15 13:33:52 UTC
view on stackexchange narkive permalink

כפי שאתה מציין, ל- EEPROM הפנימי יש חיים של 100,000 מחזורי כתיבה. זה לא ניחוש - חלק משמעותי מאוד מ- ATmega328 יגיע למספר זה ללא בעיות. בדקתי שלושה מעבדים בעבר, וכולם הגיעו ל -150,000 מחזורים ללא בעיות.

חשוב לציין את מצב הכשל של EEPROM. רוב הפרויקטים של "משחתת EEPROM" קוראים / כותבים שוב ושוב עד שהנתונים כלל לא נכתבים. לפני נקודה זו, ה- EEPROM עדיין ייפגע. זה יתבטא בכך שהנתונים לא נשמרים לתקופה סבירה. זה לא חכם להסתמך על יותר מ 100,000 מחזורי כתיבה מסיבה זו.

EEPROM שונה מזיכרון ה- RAM ב- ATmega. הכתיבה אליו אינה פשוטה או מהירה, אך היא עטופה ב ספריית ארדואינו ידידותית, ומסתירה את המורכבות הזו מהמשתמש.

הרמה הראשונה של הכוונה היא ה ספריית EEPROM, שהיא פשוטה באופן טריוויאלי], ופשוט קוראת לשתי פונקציות אחרות לקריאה וכתיבה. זה קורא eeprom_write_byte, נמצא כאן.

פונקציה זו משתמשת בהרכבה מוטבעת, כך שאולי לא ניתן להבין אותה בקלות. יש הערה שניתן להבין בקלות אם כי:

הגדר מצב תכנות: מחק וכתב

זה רומז לאחת המורכבות של ההתמודדות עם EEPROM - כדי לכתוב טיט, ראשית עליך למחוק אותו. המשמעות היא שאם תתקשר ל- EEPROM.write (), הוא יבצע מחזור כתיבה ללא קשר לערך שאתה כותב.

פירוש הדבר שלכתיבה חוזרת ונשנית 0xFF תהיה ככל הנראה השפעה זהה לכתיבת 0xFF, 0x00 , 0xFF, 0x00 וכו '

יש דרכים לעקוף את זה - אתה יכול לנסות להתקשר ל- EEPROM.read () לפני EEPROM.write () כדי לראות אם הערך כבר זהה, אבל זה לוקח עוד זְמַן.

ישנן טכניקות אחרות כדי למנוע שחיקה מוגזמת של EEPROM, אך השימוש בהן תלוי ביישום שלך.

פילוס לבוש עבור EEPROM: http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom
@Cybergibbons אני מנסה לקבוע מדוע EEPROM במערכת שומר רק על ערך למשך שניות. לְמָשָׁל. אם אני קורא את הערך מיד בחזרה נראה שהכתיבה הצליחה. אם אקרא אותו בחזרה שניות לאחר מכן, אני מתחיל לראות ביטים עוברים מ -1 ל 0. הזכרת לעיל "לפני נקודה זו, ה- EEPROM עדיין ייפגע. הדבר יתבטא בכך שהנתונים לא יישמרו לתקופה סבירה." האם מצב הכישלון שאני מתאר נשמע כמו משהו שיכול להתרחש ממספר גבוה של מחזורי מחיקה / כתיבה למיקום EEPROM מסוים?
#2
+9
TheDoctor
2014-02-15 10:47:55 UTC
view on stackexchange narkive permalink

ערכתי פעם ניסוי ב- EEPROM חיצוני עם מיליון מחזורים מדורגים מקסימליים. נדרשו כשישה מיליון מחזורים עד שהושחתו באופן משמעותי, ולפני כן היא התקדמה עם כמויות ספורדיות של שחיתות.

כאשר אתה אומר שאתה לא משנה את הערך, אני מניח שאתה כותב את אותם נתונים לכתובת מספר פעמים. זה כמעט בוודאות ילחץ את החיים, אם כי זה כנראה לא ילחיץ את התאים שמסביב.

#3
+2
80HD
2014-02-15 14:47:32 UTC
view on stackexchange narkive permalink

http://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/

הארדואינו היה מחובר ליבלת קיר וישב, "מאחורי ספה במשך כמה חודשים." ה- EEPROM ראה שגיאת כתיבה ראשונה לאחר 47 יום ו -1,230,163 מחזורים. זהו סדר גודל טוב יותר מהמפרט בגליון הנתונים atmel, אך דומה לתוצאות ניסויים דומים.

זה נראה גבוה מדי. שמעתי על 150 עד 200 אלף בעבר, אבל אף פעם לא את זה: o
הבעיה היא שזה לא מזהה את כל מצבי הכשל. כאשר EEPROM נפגע, מה שקורה הוא משך הזמן שהוא ישמור על נתונים יורד בהדרגה. ב- 100,000 מחזורים, Atmel מבטיחה שמירה על נתונים למשך 20 שנה. מעבר לכך שמירת הנתונים פוחתת. כשמגיעים למחזורים של 1.2 מ ', ואתה רואה שגיאה, זו שגיאה מיידית. ב -1,230,160 מחזורים, ייתכן שלא הייתה טעות מיידית, אך ייתכן שהנתונים נשמרו רק במשך ימים.
#4
  0
Jorge
2019-11-26 15:02:22 UTC
view on stackexchange narkive permalink

פתרון הקסם - אם אינך רוצה לקודד את מה שהסייבריבונס אמר על הקריאה לפני הכתיבה, הוא פונקציית EEPROM.update (). זה עושה בדיוק את זה:

EEPROM.update (כתובת, ערך);

יכתוב ויתאמץ רק על הזיכרון אם הערך שונה מזה שכבר נשמר.

#5
  0
Sasquatch
2020-01-03 01:49:34 UTC
view on stackexchange narkive permalink

לפני כמה שנים הכנתי לוגר ריצת זמן לציוד. הזיכרון נפגם לאחר 6 חודשים שנרשם 40 שעות ברזולוציה של 1s => 144000 כותב. הפיתרון שלי היה להפיץ כתבים על פני כל פרום.

האם תוכל לספק פרטים נוספים על האופן שבו עשית זאת?


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...