อายุการใช้งานที่แท้จริงของ EEPROM คืออะไร


21

ATMEL กล่าวว่าอายุการใช้งานเซลล์ของเซลล์ EEPROM อยู่ที่ประมาณ 100,000 รอบการเขียน / เซลล์ นี่เป็นสิ่งที่ EEPROM ทำงานจริงหรือไม่?

ถ้าฉันไม่เปลี่ยนค่าของเซลล์สิ่งนี้จะทำให้เครียดตลอดชีวิตหรือไม่? ตัวอย่างเช่นถ้าผมเขียนค่า0xFFไปยังเซลล์เดียวกันอีกครั้งและอีกครั้งนี้จะแตกต่างจากการเขียนใด ๆ0x00, 0xFF, 0x00ฯลฯ

คำตอบ:


19

ในขณะที่คุณระบุ EEPROM ภายในมีอายุการเขียน 100,000 รอบ นี่ไม่ใช่การเดา - สัดส่วนที่สำคัญของ ATmega328 จะมาถึงจำนวนนี้โดยไม่มีปัญหา ฉันได้ทดสอบโปรเซสเซอร์สามตัวมาก่อนและทั้งหมดถึง 150,000 รอบโดยไม่มีปัญหา

เป็นสิ่งสำคัญที่จะต้องทราบโหมดความล้มเหลวของ EEPROM โครงการ "EEPROM Destroyer" ส่วนใหญ่จะอ่าน / เขียนซ้ำ ๆ จนกว่าจะไม่มีการเขียนข้อมูลเลย ก่อนถึงจุดนี้ EEPROM จะยังคงได้รับความเสียหาย สิ่งนี้จะถูกแสดงออกมาโดยข้อมูลที่ไม่ถูกเก็บไว้ในช่วงเวลาที่เหมาะสม มันไม่ฉลาดที่จะพึ่งพาอะไรมากกว่า 100,000 รอบการเขียนด้วยเหตุผลนี้

EEPROM แตกต่างจาก RAM ใน ATmega การเขียนมันไม่ง่ายหรือรวดเร็ว แต่ถูกห่อหุ้มในห้องสมุด Arduino ที่เป็นมิตรซ่อนความซับซ้อนนี้จากผู้ใช้

ระดับแรกของการอ้อมคือห้องสมุด EEPROMซึ่งง่ายมาก] แค่เรียกฟังก์ชั่นอื่นอีกสองฟังก์ชั่นสำหรับการอ่านและเขียน สายนี้ eeprom_write_byte พบที่นี่

ฟังก์ชั่นนี้ใช้ชุดประกอบแบบอินไลน์ดังนั้นอาจไม่เข้าใจได้ง่าย มีความคิดเห็นที่เข้าใจได้ง่ายว่า:

ตั้งค่าโหมดการเขียนโปรแกรม: ลบและเขียน

คำแนะนำนี้เป็นหนึ่งในความซับซ้อนของการจัดการกับ EEPROM - หากต้องการเขียนถึงมันคุณต้องลบมันก่อน ซึ่งหมายความว่าถ้าคุณเรียก EEPROM.write () มันจะทำการเขียนรอบโดยไม่คำนึงถึงค่าที่คุณกำลังเขียน

ซึ่งหมายความว่าการเขียนซ้ำ 0xFF อาจมีผลเช่นเดียวกับการเขียน 0xFF, 0x00,0xFF, 0x00 เป็นต้น

มีวิธีแก้ไขปัญหานี้ - คุณสามารถลองโทร EEPROM.read () ก่อน EEPROM.write () เพื่อดูว่าค่านั้นเหมือนเดิมหรือไม่ แต่ใช้เวลาเพิ่มเติม

มีเทคนิคอื่น ๆ เพื่อหลีกเลี่ยงการสึกหรอ EEPROM มากเกินไป แต่การใช้งานจะขึ้นอยู่กับแอปพลิเคชันของคุณ


3
สวม leveling สำหรับ EEPROM: electronics.stackexchange.com/questions/60342/…
jippie

9

ฉันเคยทำการทดลองกับ EEPROM ภายนอกด้วยรอบการจัดอันดับสูงสุด 1 ล้านรอบ ใช้เวลาประมาณ 6 ล้านรอบในการที่จะเกิดความเสียหายครั้งใหญ่และก่อนหน้านั้นก็มีการคอร์รัปชั่นเป็นระยะ

เมื่อคุณบอกว่าคุณไม่เปลี่ยนค่าฉันถือว่าคุณกำลังเขียนข้อมูลเดียวกันไปยังที่อยู่หลายครั้ง สิ่งนี้เกือบจะแน่นอนความเครียดชีวิตแม้ว่ามันอาจจะไม่ความเครียดเซลล์รอบข้าง


2

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

Arduino เสียบเข้ากับหูดที่ผนังและนั่ง“ อยู่หลังโซฟาเป็นเวลาสองเดือน” EEPROM เห็นว่ามันเป็นข้อผิดพลาดในการเขียนครั้งแรกหลังจาก 47 วันและ 1,230,163 รอบ นี่เป็นลำดับความสำคัญที่ดีกว่าข้อมูลจำเพาะในแผ่นข้อมูล atmel แต่คล้ายกับผลลัพธ์ของการทดลองที่คล้ายกัน


ดูเหมือนว่าจะสูงเกินไป ฉันเคยได้ยินมาก่อนถึง 150k ถึง 200k แต่ไม่เคยทำเช่นนี้เลย: o
asheeshr

5
ปัญหาคือไม่สามารถตรวจจับโหมดความล้มเหลวทั้งหมดได้ เมื่อ EEPROM เกิดความเสียหายสิ่งที่เกิดขึ้นคือระยะเวลาที่จะเก็บข้อมูลจะลดลงเรื่อย ๆ ที่ 100,000 รอบ Atmel รับประกันการเก็บรักษาข้อมูล 20 ปี นอกเหนือจากนี้การเก็บข้อมูลลดลง เมื่อถึงรอบ 1.2m และคุณเห็นข้อผิดพลาดนี่เป็นข้อผิดพลาดทันที ที่ 1,230,160 รอบ, อาจไม่มีข้อผิดพลาดเกิดขึ้นทันที, แต่ข้อมูลอาจถูกเก็บไว้เป็นเวลาหลายวันเท่านั้น
Cybergibbons

0

วิธีแก้ปัญหาเวทย์มนตร์ - หากคุณไม่ต้องการเขียนโค้ดที่ Cybergibbons พูดเกี่ยวกับการอ่านก่อนเขียนเป็นฟังก์ชัน EEPROM.update () มันทำอย่างนั้น:

EEPROM.update (ที่อยู่, ค่า);

จะเขียนและเน้นถึงหน่วยความจำหากค่าแตกต่างจากที่เก็บไว้แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.