A proci EEPROMja a 100.000-es írás. A külső az 1.000.000.
De a külső I2C-s EEPROM-ban 1 lap (page) egyszerre íródik! Azaz ha 1 byte-t változtatsz, akkor is a teljes page (mind a 16/32 vagy 64 byte) újraírásra kerül!
Javaslom, hogy ebbe az élettartam dologba egy kicsit menjünk bele. Minden cellának 100.000 írás a garantált élettartama, vagy az eszközhöz fordulhatok garantáltan 100.000 szer, és utána nem garantált a hibátlan működés. Ez nem tűnik nagy különbségnek, de érdemes ezen egy kicsit tornázni. Tegyük fel, hogy egy bájt adatot kell elraknom egy 1k-s belső eepromban. Gondoskodom róla, hogy a mentés helye folyamatosan vándoroljon az eepromban, és hogy meg is találjam a mentett értéket amikor szükségem van rá, miután az új helyére beírtam az adatot, a régi címere 0xFF-et írok. Amikor az élet indul, megkeresem, hol van értelmes adat az eepromban, és örülök az értéknek, amit onnan kiolvasok. Ebben az esetben minden cellát kétszer írok egy körülfordulás alatt, miközben az eszközhöz összesen 512 alkalommal fordulok írással. Tételezzük fel, hogy az eepromban, egy adott helyen elkölönítek két bájtot, ahol minden körülfordulásnál növelem az értéket. Ez lesz az élettartam számláló. Innem tudhatom, hány kanyar futott már, mennyi életem van még a 100.000-ből. Ezek után az eszköz élettartama az hogyan alakul? Az egész kérdés nem kérdés, ha minden alkalommal ugyan oda írok. Élettartam 100.000 és balra a kijárat. Utána ne számítsak rá, hogy stabil az eszközöm. De ha gondoskodom a bitek egyenletes "koptatásáról" akkor kihasználhatom a teljes élettartamot? Szóval mennyi is az annyi?
Pontosítás:
A mikrokontroller (uc) belső eepromja BYTE szervezésű. A külső EEPROMok szervezése _mindig_ PAGE alapú. 1-1 lap mérete a 16 byte ... 512 byte méret közt változik (chipenként azonos mindíg, adatlapból puskázható.)
Azaz ha uC 1. byte-jét érom, akkor a többi véltozatlan marad. Se nem íródik, se nem olvasódik. Az írás folyamata:
1. EEPROM cím megadásra kerül (ún. mutató)
2, EEPROM beírás (adott címre, adott byte-t)
3, 3.3 ms (vagy 5 ms)
4, EEPROM írás kész
Flash memóriába írás
1, hova kell írni (cím megadása)
2, az adott címet _tartalmazó_ teljes PAGE kiolvasása belső SRAM-ba
3, adott módosítandó byte kicserélése a kiolvasott lap SRAM tartalmában
4, teljes SRAM lap visszaírása a régi page helyére
Azaz az 1 page-n levő _összes_ byte a FLASHban újraíródik!
És a kérdésed a belső EEPROM-ra:A szűk keresztmetszet az a címmentés, azaz ahova jegyzed hogy hol jársz. Trükk: tedd ezt SRAM-ba és csak _kikapcsoláskor_ vagy minden 10..50. íráskor mentsd el. Kikapcsolás: tápfesz kezd csökkenni és van még 1-5 sec-d a kikapcsolásig És ekkor fut a vészleállítás projekt...
De minek mented hol jársz? Az utolsó adat _után_ írj FF-t. És bekapcsoláskor scanneld végig a memóriát. Ahol FF van az a köv. szabad cella.
_Cellánként_ van a 100.000 írás, nem az össz. EEPROM celláinak összességére.
Azaz amit a legtöbbször írsz, az kopik a leggyorsabban.
De nem számoltál:
- adathiba a kozmikus sugárzás hatására
- a 0. byte _véletlen_ írási metódusa
Ha kritikus a rendszer, tegyél be FRAM-ot. Az érzéketlen az írásszámra.
És gyors. Igaz 512kbit a max kapacitása....
Külső memória esetén (24LC256) a 60+15 napos tanfolyam elkészült 9.leckéjéből:
"A gyűjtendő adatok mentését is meg kell oldani. Egy ideig - és az első kikapcsolásig - a memóriába is menthetünk. Ha nem vagyunk ennyire bevállalósak, akkor az EEPROM terület is szóba jöhet.
E két megoldásnak nagy hátránya, hogy alig lehet használni, mert kevés adat fér bele...
Itt jön képbe a külső nemfelejtő memória. Az Ext1 áramkörök a 24LC256 jelű chip 256 kbit (azaz 64 kbyte) tárhellyel rendelkeznek: a letárolás a 0. címtől a 32767. címig tart. Az egy lépésben mentendő adat dátum (6 byte), egész + tizedfok (2 byte), megvilágítás (2 byte), feszültség-ADC (2 byte), azaz összesen 12 byte hely egy adatcsomag. A későbbi bővítésre gondolva egy csomag legyen mondjuk 16 byte...
A mentés trükkje: ha már van elmentett adatunk, akkor csak a következő üres helyre lehet a mért adatsort letárolni! Ennek fejbentartása nem olyan egyszerű. A PC-s világban ezt a filerendszert leíró tábla tartalmazza - itt viszont ilyen nincs. Ezért valami mást kell kitalálni.
Az üres chip tartalma: tiszta FF. A bejegyzés első byte-ja biztosan nem FF, mivel az időadatban ilyen érték nincs. A legegyszerűbb megoldás: olyan bejegyzés vagy adatblokk helyet keresünk, ahol az első byte értéke FF. Így elég minden első byte-t megnézni: 0, 16, 32, 48, (n-1)*16, n*16... És nmax = 32768/16!
Így a program indulásakor ezt megkeressük és tudjuk hova kerül a következő írás..."
.
.
.
"16 byte byte-módú beírásakor a teljes blokk minden lépésben újraíródik (azaz 16 írás hajtódik végre és a chip is fokozottabban használódik el).
Ha figyelembe vesszük, hogy az EEPROM cellái 1.000.000 alkalommal írhatóak, akkor:
- 16 írás adatblokkonként,
- minden 32768/16 = 2048. írás esetén kerülök azonos cellára.
Így a chip írási öregedésből való elhasználódása 1.000.000/16 * 2048 = 128 M adatblokk írás. És a jelzőbyte miatt ennek felével számolhatunk (FF értékű cella). Ha 1 sec egy írás és folyamatosan írom, akkor 740 nap alatt megy tönkre a chip (ez kb. 2 év folyamatos üzem). Ha blokkos írásban gondolkodunk, akkor ez 32 évre nő!
"
Az EEPROM egyéb cellák annyiszor íródnak, ahányszor a körülfordulásszámoló - azaz nem kezelem külön.
Egyetlen cella 100.000x írható, ha a chipet határon járatod és statisztikailag vesszük.
A beírható adatmennyiség:
100.000 x 509 = 50.900.000 darab írás.
És ha 1 sec-enként írsz, akkor ez bizony: 589 nap. (nincs napszél. áramszünet)
És a garancia általában 1 év - azaz piacradobhatod
Kösz, magam is így gondoltam. Gazdálkodni érdemes az eszközzel, ami remek lehetőséget ad a siker élményre.
Robi! A 60+15 Arduino már fut? A +15 érdekel, a 60 egyszer már megvolt. Persze ismerem a Tudás családfáját. Az Ismétlés az aki anyai ágon a közvetlen ős. Vagyis Ő a tudásnak a jó édes anyja. Csak az idő keletkezésének mikéntjét kéne még megismerni, arra szerintem sokan vagyunk kíváncsiak. De amire szánunk arra mindíg jut idő. Most például +15-re jutna.
Most olvasgatom a fórumot és észbe kapok, hogy pont így jártam én is és vagy 2órát eltöltöttem vele és nem boldogultam. Tehát 24LC16B -vel is ugyanaz a helyzet, hogy nem használja az A0,A1,A2 lábait , vagy legalábbis nem a chip egyedi címzésére.A monitor programban úgy ahogy Macsek írta elfoglalja az 50-57 címet. Egyébként írni csak úgy lehet bele, ha WP láb mondjuk levegőben van, OLVASNI viszont csak úgy lehet az előzőleg beírt értéket, hogy a WP lábat pl +5V-ra kell tenni , ha ez nem történik meg , akkor 255öt olvas folyamatosan a beírt érték helyett.