2. Typy magistral

2.13. Pamięci flash

Pamięci flash (NOR) zostały wynalezione w 1984 roku przez Dr. Fujio Masuoka (pracującego dla firmy Toshiba). Firma Intel zauważyła ogromny potencjał tego wynalazku. Zaprezentowała ona pierwszą komercyjną pamięć flash typu NOR w 1988 roku. Pamięci NAND flash zostały przedstawione przez firmę Toshiba w 1989 roku. Pamięci flash są specyficznym typem pamięci EEPROM (ang. Electrically Erasable Programmable Read-Only Memory), które są kasowane i programowane w dużych blokach. Pamięci flash są jednak dużo tańsze od wymazywalnych i programowalnych bajtowo pamięci EEPROM. Odczyt danych jest szybki, ale kasowanie bloków wolne. Dane w pamięci flash są przechowywane w sposób trwały, to znaczy dane nie znikają po zaniku napięcia zasilania pamięci. Musi istnieć jakiś mechanizm, który to umożliwia. Na pojedynczą komórkę pamięci flash składa się jeden tranzystor (Rys. 23). Jest to dość specyficzny tranzystor. Jego zasada działania jest podobna do typowego tranzystora polowego typu MOSFET.

 
Rys. 23. Pojedyncza komórka pamięci flash [https://en.wikipedia.org/wiki/Floating-gate_MOSFET]

Podstawowa różnica polega na tym, że tranzystor ten ma dwie bramki, które są izolowane od siebie. Istnieje wiele odmian takich tranzystorów. Jeżeli pomiędzy dren i źródło przyłożone jest napięcie, prąd nie popłynie. Dopiero po przyłożeniu napięcia do bramki tworzy się kanał, którym może płynąć prąd. Mamy do dyspozycji dwie bramki: kontrolną (ang. control gate) i pływającą (ang. floating gate). Napięcie przykładane jest do bramki kontrolnej. Jeżeli w obszarze bramki pływającej nie jest zgromadzony ładunek, to zostanie utworzony kanał i prąd popłynie. Taki stan odpowiada 1 (Erased State – Rys. 24). Natomiast jeśli w obszarze pływającej bramki jest zgromadzony ładunek, ładunek ten ekranuje wpływ pola powstającego przez przyłożenie napięcia do bramki kontrolnej, kanał nie jest tworzony i prąd nie popłynie. Stan ten odpowiada wartości 0 (Programmed State).

 Rys. 24. Stany tranzystora pamięci flash

Pozostaje jeszcze omówić sposób w jaki jest wpisywany i kasowany ładunek w obszarze bramki pływającej. Bramka ta jest w pełni izolowana od otoczenia. Izolacja jest na tyle skuteczna, żeby powstrzymać odpływ ładunku w normalnych warunkach przez lata. Ale w momencie kiedy elektronom zostanie nadana odpowiednio duża energia, izolacja może zostać przebita. W ten sposób można wpisywać i kasować ładunek z obszaru bramki pływającej. Wykorzystuje się do tego celu dość złożone zjawiska fizyczne: np. proces programowania poprzez wstrzykiwania gorących elektronów, kasowania z wykorzystaniem zjawiska tunelowania. W celu nadania elektronom odpowiedniej energii wykorzystuje się odpowiednio doprowadzone dość wysokie napięcia. Elektrony z izolowanego obszaru bramki nie mogą być wpisywane i kasowane w nieskończoność. W procesie tym izolacja ulega bowiem stopniowej degradacji. Dlatego też liczba zapisów do pamięci flash jest ograniczona (zwykle jest to kilkadziesiąt tysięcy razy). Komórki pamięci flash działające w ten sposób nazywa się komórkami typu SLC (ang. single level cell). Kodują one tylko dwa stany logiczne. Obecnie częściej stosowane są komórki tupu MLC (ang. multi-level cell). Mogą one kodować więcej stanów logicznych. W najprostszym przypadku są to cztery stany. Trzeba kontrolować wtedy ilość ładunku wstrzykniętego do obszaru bramki pływającej. Efekt ekranujący ładunku będzie różny. Stąd też mierząc natężenie przepływającego prądu można odczytać stan komórki (cztery poziomy). Komórki mogą kodować więcej poziomów, np. osiem. Zwykle żywotność komórek MLC jest mniejsza niż SLC. Także niezawodność działania jest większa w przypadku komórek SLC.
Pierwsze pamięci flash miały organizację NOR. Nazwa pochodzi od bramki NOR, a w zasadzie od analogii w połączeniu tranzystorów w bramce. Pamięci o takiej architekturze mają długi czas wymazywania bloków i zapisu danych, ale zapewniają dostęp do poszczególnych bajtów. Są też drogie w produkcji. Alternatywą jest pamięć o architekturze NAND. Pamięci te charakteryzują się szybszym wymazywaniem i zapisem danych, mają większe upakowanie elementów, ale zapewniają  dostęp tylko do dużych bloków danych. Pamięci tego typu są stosowane obecnie powszechnie.
Programowanie pamięci flash (czyli zapisywanie danych) jest realizowane dla stron, kasowanie dla bloków. Typowe rozmiary stron i bloków:
•    32 strony po 512 bajtów – rozmiar bloku 16kB,
•    64 strony po 2 048 bajtów – rozmiar bloku 128kB,
•    64 strony po 4 096 bajtów – rozmiar bloku 256kB,
•    128 stron po 4 096 bajtów – rozmiar bloku 512kB.
Wyróżniony rozmiar strony i bloku jest najczęściej stosowany. W celu zaprogramowania pamięci można zmieniać pojedyncze bity z 1 na 0, ale nie można zmienić z 0 na 1, by to zrobić trzeba wymazać cały blok. Zwykle blok 0 ma zagwarantowane 100000 cykli zapisu-kasowania. W tym bloku mieszczą się najważniejsze struktury danych (np. wskaźnik do tablicy wadliwych sektorów, tablica partycji), pozostałe bloki zapewniają zwykle ok. 10000 cykli zapisu-kasowania.
Można by się zastanowić, czy nie da się zwiększyć liczby cykli zapisu danych. Jednak większa możliwa liczba cykli zapisu-kasowania wiąże się z mniejszą trwałością danych. Dużą trwałość danych można osiągnąć przez lepszą izolację obszaru bramki pływającej. Z kolei trudniejsza do pokonania izolacja łatwiej się niszczy podczas cykli zapisu (wyższe napięcia), co powoduje że mniejsza liczba cykli zapisu niszczy tranzystor. W pamięciach flash konieczne jest równomierne rozłożenie cykli zapisu na wszystkie komórki (ang. wear-leveling). Równoważenie to jest różnie realizowane i w większości przypadków jest zrzucone na karby oprogramowania firmware urządzenia. Zwykle w pamięciach flash przydzielane są zapasowe bloki (ang. disk overprovisioning). Nie są one wykorzystywane do przechowywania danych (dysk jest zatem mniej pojemny), ale łatwiejsze jest zarządzanie wadliwymi blokami.