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.