• dez
    #14
    De, a technológia hibája is!

    Tudni kell, hogy a flash-memória valójában az EEPROM-ok egy fajtája. A fő különbség az adat-szervezésben van. Az EEPROM-ok akár byte-onként is törölhetők és újraírhatók, de mivel ez lassú folyamat, a flash-t a nagyobb sebesség érdekében máshogy szervezték: blokkok vannak, melyek egy művelettel törölhetők, és az írás sem byte alapú, hanem egy egész sorozat írható egyszerre (chipen belüli pufferből).

    Ugyanez vissza is tud ütni, ti. a külön törlésre azért van szükség, mert nem kapcsolgathatók a bitek csak úgy ide-ida, mint egy ramnál! Ez csak az egyik irányban tehető meg egy adott byte/szó tetszőleges bitjeire. Ha épp az ellenkező irányba kellene billenteni, akkor bizony először egy törlést kell eszközölni. Sima EEPROM esetén csak az adott byte, flash esetén egy egész blokk törlésre kerül ilyenkor (nem lehet kisebbet)! Ezután az eredeti adatban elvégezni a változtatást, majd az egészet visszaírni... (Ha nincs máshol üres blokk.) Remélem, érthető.

    Tehát, a sorrend, a legjobb esettől a legrosszabbig:
    1. Üres (előzőleg törölt, inicializált) blokkokba kell írni.
    2. Nem üresek, de érvénytelen az eredeti adat. (Törölni kell a blokkokat, de aztán csak a céladatot beírni.)
    3. Nem üres blokkokba, érványes adatok mellé kell beékelni az új adatot... (Eredeti adatot átírni máshová, törölni, majd beírni az új adatot, adott esetben az eredetivel együtt.)

    Mindhárom lehetőségnek van két további al-esete: nagy file-ok vs. kis file-ok. Utóbbiakkal dolgozni a legrosszabb. Szóval, ha sok kis file-lal dolgozunk, írjuk és törölgetjük (érvénytelenítjük) őket, akkor hamar elfogynak az érintetlen blokkok, és jöhet a nagy adat-kavarás...

    Persze ezt az egészet lehet a lehetőségekhez képest okosabban kezelni, vagy éppen még tovább rontani a helyzeten.