Otázka:
Jaká je skutečná životnost EEPROM?
Marlon Abeykoon
2014-02-15 10:09:14 UTC
view on stackexchange narkive permalink

ATMEL říká, že životnost buňky EEPROM je přibližně 100 000 cyklů zápisu / buňka. Je to vlastně to, jak EEPROM funguje ve volné přírodě?

Pokud nezměním hodnotu buňky, dělá tento stres na celý život? Například pokud znovu a znovu zapíšu hodnotu 0xFF do stejné buňky, liší se to od psaní 0x00 , 0xFF , 0x00 atd.

Pět odpovědi:
Cybergibbons
2014-02-15 13:33:52 UTC
view on stackexchange narkive permalink

Jak uvádíte, interní EEPROM má životnost 100 000 cyklů zápisu. To není odhad - velmi významná část ATmega328 dosáhne tohoto čísla bez problémů. Předtím jsem testoval tři procesory a všechny dosáhly 150 000 cyklů bez problémů.

Je důležité si uvědomit režim selhání EEPROM. Většina torpédoborců „EEPROM“ projektuje opakovaně čtení / zápis, dokud nejsou data zapsána vůbec. Před tímto bodem bude EEPROM stále poškozena. To by se projevilo tím, že údaje nebudou uchovávány po přiměřenou dobu. Z tohoto důvodu není moudré spoléhat se na něco více než 100 000 cyklů zápisu.

EEPROM se liší od RAM v ATmega. Zápis do něj není jednoduchý ani rychlý, ale je zabalen v přátelské knihovně Arduino, která tuto složitost skrývá před uživatelem.

První úroveň nepřímá je EEPROM library, což je triviálně jednoduché], stačí volat dvě další funkce pro čtení a zápis. Toto volá eeprom_write_byte, které najdete zde.

Tato funkce používá vložené sestavení, takže nemusí být snadno pochopitelné. Existuje však snadno srozumitelný komentář:

Nastavit režim programování: mazat a psát

To naznačuje jednu ze složitostí práce s EEPROM - Chcete-li psát, musíte jej nejprve vymazat. To znamená, že pokud zavoláte EEPROM.write (), provede cyklus zápisu bez ohledu na hodnotu, kterou píšete.

To znamená, že opakované psaní 0xFF bude mít pravděpodobně stejný účinek jako zápis 0xFF, 0x00 , 0xFF, 0x00 atd.

Existují způsoby, jak to obejít - můžete zkusit volat EEPROM.read () před EEPROM.write (), abyste zjistili, zda je hodnota již stejná, ale to vyžaduje další čas.

Existují i ​​jiné techniky, jak se vyhnout nadměrnému opotřebení EEPROM, ale jejich použití závisí na vaší aplikaci.

Vyrovnání opotřebení pro EEPROM: http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom
@Cybergibbons Snažím se zjistit, proč si EEPROM v systému zachovává hodnotu pouze na několik sekund. Např. pokud okamžitě přečtu hodnotu zpět, vypadá to, že zápis byl úspěšný. Pokud si to přečtu o několik sekund později, začnu vidět bity přecházet z 1 na 0. Zmínili jste výše „Před tímto bodem bude EEPROM stále poškozena. To by se projevilo tím, že data nebudou uchována po rozumnou dobu.“ Zní poruchový režim, který popisuji, jako něco, co by mohlo nastat z vysokého počtu cyklů mazání / zápisu do konkrétního umístění EEPROM?
TheDoctor
2014-02-15 10:47:55 UTC
view on stackexchange narkive permalink

Jednou jsem provedl experiment na externí EEPROM s maximálně 1 milionem cyklů. Trvalo asi 6 milionů cyklů, než se stalo velkým poškozením, a předtím to pokročilo a mělo sporadické množství korupce.

Když řeknete, že hodnotu nezměníte, předpokládám, že píšete stejná data na adresu několikrát. To by téměř jistě stresovalo život, i když by to pravděpodobně nezatěžovalo okolní buňky.

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

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

Arduino bylo zapojeno do bradavice a seděl, „za gaučem na pár měsíců.“ Na EEPROM došlo k první chybě zápisu po 47 dnech a 1230 163 cyklech. Toto je řádově lepší než specifikace v datovém listu atmel, ale podobné výsledkům podobných experimentů.

To se zdá být příliš vysoké. Slyšel jsem o 150 000 až 200 000 dříve, ale nikdy toto: o
Problém je v tom, že to nezjistí všechny režimy selhání. Když se EEPROM poškodí, stane se to, že doba, po kterou si uchová data, se postupně snižuje. At 100 000 cyklů zaručuje Atmel 20leté uchovávání dat. Kromě toho se snižuje retence dat. Když je dosaženo 1,2 m cyklů a uvidíte chybu, jedná se o okamžitou chybu. při 1230 160 cyklech možná nedošlo k okamžité chybě, ale data mohla být uchována pouze několik dní.
Jorge
2019-11-26 15:02:22 UTC
view on stackexchange narkive permalink

Kouzelné řešení - pokud nechcete kódovat, co Cybergibbons řekl o čtení před zápisem, je funkce EEPROM.update (). Dělá to přesně takto:

EEPROM.update (adresa, hodnota);

zapíše a zvýrazní paměť pouze v případě, že se hodnota liší od již uložené.

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

Před pár lety jsem vyrobil záznamník běhu pro vybavení. Paměť byla poškozena po 6 měsících, 40 hodin protokolováno s rozlišením 1 s => 144 000 zápisů. Mým řešením bylo rozložit zápisy na celou eeprom.

Můžete poskytnout více podrobností o tom, jak jste to udělali?


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...