Kysymys:
Mikä on EEPROMin todellinen käyttöikä?
Marlon Abeykoon
2014-02-15 10:09:14 UTC
view on stackexchange narkive permalink

ATMEL sanoo, että EEPROM-solun solun elinikä on noin 100 000 kirjoitusjaksoa / solu. Onko EEPROM todellakin luonnossa?

Jos en muuta solun arvoa, tämä stressi koko eliniän? Esimerkiksi, jos kirjoitan arvon 0xFF samaan soluun uudestaan ​​ja uudestaan, onko tämä erilainen kuin kirjoittamalla 0x00 , 0xFF , 0x00 jne.

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

Kuten sanot, sisäisen EEPROM: n elinikä on 100 000 kirjoitusjaksoa. Tämä ei ole arvaus - erittäin merkittävä osa ATmega328: sta saavuttaa tämän numeron ilman ongelmia. Olen testannut kolmea prosessoria aiemmin, ja kaikki saavuttivat 150000 jaksoa ilman ongelmia.

On tärkeää huomata EEPROM-järjestelmän vikatila. Useimmat "EEPROM hävittäjä" -projektit lukevat / kirjoittavat toistuvasti, kunnes tietoja ei ole kirjoitettu lainkaan. Ennen tätä kohtaa EEPROM vaurioituu. Tämä ilmenisi siitä, että tietoja ei säilytetä kohtuullisen ajan. Tästä syystä ei ole viisasta luottaa mihinkään yli 100 000 kirjoitusjaksoon.

EEPROM eroaa ATmegan RAM-muistista. Kirjoittaminen sille ei ole yksinkertaista tai nopeaa, mutta se on kääritty ystävälliseen Arduino-kirjastoon piilottaen tämän monimutkaisuuden käyttäjältä.

Ensimmäisen suuntasuunnan taso on EEPROM-kirjasto, joka on triviaalin yksinkertainen], kutsumalla vain kaksi muuta toimintoa lukemiseen ja kirjoittamiseen. Tämä kutsuu eeprom_write_byte, joka löytyy täältä.

Tämä toiminto käyttää sisäistä kokoonpanoa, joten sitä ei välttämättä ymmärretä helposti. On kuitenkin kommentti, joka on kuitenkin helposti ymmärrettävissä:

Aseta ohjelmointitila: pyyhi ja kirjoita

Tämä viittaa yhteen EEPROMin käsittelyn monimutkaisuudesta - kirjoittaa toit, sinun on ensin poistettava se. Tämä tarkoittaa, että jos soitat EEPROM.write (), se suorittaa kirjoitusjakson kirjoitettavasta arvosta riippumatta.

Tämä tarkoittaa, että toistuvalla 0xFF-kirjoituksella on todennäköisesti sama vaikutus kuin kirjoittamalla 0xFF, 0x00. , 0xFF, 0x00 jne.

On olemassa tapoja kiertää tämä - voit yrittää kutsua EEPROM.read () ennen EEPROM.write () nähdäksesi, onko arvo jo sama, mutta tämä vie lisää aika.

EEPROM-liiallisen kulumisen välttämiseksi on muitakin tekniikoita, mutta niiden käyttö riippuu sovelluksestasi.

EEPROM: n kulumisen tasoitus: http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom
@Cybergibbons Yritän selvittää, miksi EEPROM järjestelmässä säilyttää arvon vain sekunteja. Esim. jos luen arvon takaisin heti, näyttää siltä, ​​että kirjoitus onnistui. Jos luen sen sekuntia myöhemmin, aloin nähdä bittien siirtyvän arvosta 1 arvoon 0. Mainitsit edellä "Ennen tätä kohtaa EEPROM vaurioituu. Tämä ilmenisi siitä, että tietoja ei säilytetä kohtuullisen ajan." Kuulostaako vikamoodi, jota kuvaan, sellaisena kuin se voisi tapahtua suuresta määrästä pyyhintä- / kirjoitusjaksoja tiettyyn EEPROM-sijaintiin?
#2
+9
TheDoctor
2014-02-15 10:47:55 UTC
view on stackexchange narkive permalink

Suoritin kerran kokeilun ulkoisella EEPROM-laitteella, jossa oli miljoona enimmäisjaksoa. Kesti noin 6 miljoonaa sykliä korruptoitumaan, ja ennen sitä se oli edennyt satunnaisesti korruptiolla.

Kun sanot, ettet muuta arvoa, oletan, että kirjoitat samoja tietoja osoitteeseen useita kertoja. Tämä melkein varmasti korostaa elämää, vaikkakaan se ei todennäköisesti stressaantaisi ympäröiviä soluja.

#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 liitettiin seinän syylään ja istui "parin kuukauden ajan sohvan takana". EEPROM näki ensimmäisen kirjoitusvirheen 47 päivän ja 1230 163 jakson jälkeen. Tämä on suuruusluokkaa parempi kuin atmel-tietolomakkeen tekniset tiedot, mutta samanlainen kuin vastaavien kokeiden tulokset.

Tämä tuntuu aivan liian korkealta. Olin aiemmin kuullut 150–200 000, mutta en koskaan tätä: o
Ongelmana on, että tämä ei havaitse kaikkia vikatiloja. Kun EEPROM vaurioituu, tapahtuu sitä, kuinka kauan se säilyttää tietoja. 100 000 jaksolla Atmel takaa tietojen säilymisen 20 vuoden ajan. Tämän lisäksi tietojen säilyttäminen vähenee. Kun saavutat 1,2 metrin jaksot ja näet virheen, tämä on välitön virhe. 1.230.160 jaksolla ei ehkä ole tapahtunut välitöntä virhettä, mutta tietoja on ehkä säilytetty vain päiviä.
#4
  0
Jorge
2019-11-26 15:02:22 UTC
view on stackexchange narkive permalink

Maaginen ratkaisu - jos et halua koodata sitä, mitä Cybergibbons sanoi lukemisesta ennen kirjoittamista, on EEPROM.update () -toiminto. Se tekee juuri näin:

EEPROM.update (osoite, arvo);

kirjoittaa ja korostaa muistia vain, jos arvo eroaa jo tallennetusta.

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

Pari vuotta sitten tein ajoaikarekisterin laitteelle. Muisti vioittui 6 kuukauden 40 tunnin kirjautumisen jälkeen 1s-tarkkuudella => 144000 kirjoitusta. Ratkaisuni oli levittää kirjoituksia koko eepromiin.

Voitteko antaa lisätietoja siitä, miten teitte tämän?


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...