Küsimus:
Mis on EEPROMi tegelik eluiga?
Marlon Abeykoon
2014-02-15 10:09:14 UTC
view on stackexchange narkive permalink

ATMEL ütleb, et EEPROM-lahtri raku eluiga on umbes 100 000 kirjutamistsüklit / lahtrit. Kas see toimib tegelikult EEPROM-i looduses? see stress kogu elu? Näiteks kui kirjutan ikka ja jälle samasse lahtrisse väärtuse 0xFF , kas see erineb 0x00 , 0xFF , 0x00 jne

Viis vastused:
#1
+19
Cybergibbons
2014-02-15 13:33:52 UTC
view on stackexchange narkive permalink

Nagu märkite, on sisemise EEPROM-i eluiga 100 000 kirjutamistsüklit. See pole oletus - väga oluline osa ATmega328-st jõuab selle numbrini probleemideta. Olen varem katsetanud kolme protsessorit ja kõik jõudsid probleemideta 150 000 tsüklini.

Oluline on märkida EEPROMi tõrke režiimi. Enamik "EEPROM hävitaja" projekte loevad / kirjutavad korduvalt, kuni andmeid pole üldse kirjutatud. Enne seda punkti on EEPROM endiselt kahjustatud. See ilmneks siis, kui andmeid ei säilitataks mõistliku aja jooksul. Sel põhjusel ei ole mõistlik tugineda millelegi muule kui 100 000 kirjutamistsüklile.

EEPROM erineb ATmega RAM-ist. Sellesse kirjutamine ei ole lihtne ega kiire, kuid see on pakitud sõbralikku Arduino teeki, varjates seda keerukust kasutaja eest.

Esimene sirgendustasand on EEPROMi teek, mis on triviaalne lihtne], kutsudes lihtsalt lugemiseks ja kirjutamiseks veel kahte funktsiooni. See kutsub eeprom_write_byte, mille leiate siit.

See funktsioon kasutab tekstisisest montaaži, nii et seda ei pruugi hõlpsasti mõista. Siiski on kommentaar, mida saab hõlpsasti mõista:

Määra programmeerimisrežiim: kustuta ja kirjuta

See viitab ühele EEPROM-iga töötamise keerukusele - toit kirjutamiseks peate selle kõigepealt kustutama. See tähendab, et kui helistate EEPROM.write (), sooritab see kirjutamistsükli olenemata teie kirjutatavast väärtusest.

See tähendab, et korduval 0xFF-i kirjutamisel on tõenäoliselt sama efekt kui 0xFF, 0x00 kirjutamisel. , 0xFF, 0x00 jne.

Selle lahendamiseks on võimalusi - võite proovida enne EEPROM.write () -i kutsuda EEPROM.read (), et näha, kas väärtus on juba sama, kuid see nõuab täiendavat aeg.

EEPROM-i liigse kulumise vältimiseks on ka teisi tehnikaid, kuid nende kasutamine sõltub teie rakendusest.

EEPROM-i kulumise tasandamine: http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom
@Cybergibbons Püüan kindlaks teha, miks süsteemis olev EEPROM säilitab väärtust ainult sekunditeks. Nt kui loen väärtuse kohe tagasi, näib, et kirjutamine õnnestus. Kui loen selle mõne sekundi pärast tagasi, näen, et bitid lähevad vahemikku 1 kuni 0. Teie mainisite eespool: "Enne seda punkti on EEPROM ikkagi kahjustatud. See ilmneks siis, kui andmeid ei hoitaks mõistliku aja jooksul." Kas minu kirjeldatud rikke režiim kõlab nagu midagi, mis võib juhtuda suurest kustutus- / kirjutamistsüklite arvust konkreetsesse EEPROM-i asukohta?
#2
+9
TheDoctor
2014-02-15 10:47:55 UTC
view on stackexchange narkive permalink

Kord katsetasin välist EEPROM-i, kus oli maksimaalselt 1 miljon hinnatud tsüklit. Suuresti korrumpeerumiseks kulus umbes 6 miljonit tsüklit ja enne seda oli juhuslikult korruptiivselt arenenud.

Kui ütlete, et te ei muuda väärtust, eeldan, et kirjutate samu andmeid aadressile mitu korda. See rõhutaks elu kindlasti, kuigi see tõenäoliselt ümbritsevatele rakkudele ei tekitaks stressi.

#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/

Arduino ühendati seinatüügaga ja istus "paar kuud diivani taga". EEPROM nägi, et see oli esimene kirjutamisviga 47 päeva ja 1 230 163 tsükli järel. See on suurusjärgus parem kui atmeli andmelehe spetsifikatsioon, kuid sarnane sarnaste katsete tulemustega.

See tundub liiga kõrge. Ma olin varem kuulnud 150–200 000, kuid mitte kunagi seda: o
Probleem on selles, et see ei tuvasta kõiki rikke režiime. Kui EEPROM kahjustub, väheneb järk-järgult ajavahemik, mille jooksul see säilitab andmeid. 100 000 tsükli juures tagab Atmel 20-aastase andmete säilitamise. Lisaks vähendab andmete säilitamine. Kui jõuate 1,2 m tsüklini ja näete viga, on see kohe tõrge. 1230 160 tsükli juures ei pruugi olla olnud kohe viga, kuid andmeid võis säilitada vaid päevi.
#4
  0
Jorge
2019-11-26 15:02:22 UTC
view on stackexchange narkive permalink

Maagiline lahendus - kui te ei soovi enne kirjutamist kodeerida seda, mida Cybergibbons lugemise kohta ütles, on funktsioon EEPROM.update (). See teeb täpselt nii:

EEPROM.update (aadress, väärtus);

kirjutab ja rõhutab mälu ainult siis, kui väärtus erineb juba salvestatust.

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

Paar aastat tagasi tegin seadmele tööaja logi. Mälu sai rikutud 6 kuu pärast 40 tunni möödumist logitud 1s eraldusvõimega => 144000 kirjutab. Minu lahendus oli kirjutiste levitamine kogu eepromis.

Kas saaksite anda rohkem üksikasju selle kohta, kuidas te seda tegite?


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...