Pamięci Flash - charakterystyka

Karol Grzybowski

Wstęp

Pamięci Flash są popularną odmianą pamięci nieulotnych EEPROM (Electrically Erasable Programmable Read-Only Memory). Są obecne w niemal każdym urządzeniu elektronicznym - od kilkukilobajtowych pamięci przechowujących oprogramowanie (firmware) sterowników przez wielomegabajtowe magazyny w systemach wbudowanych do kart pamięci lub dysków SSD (Solid State Data) o pojemnościach dochodzących do terabajta, które powoli wypierają inne pamięci masowe. Do największych zalet należą - wysoka wydajność, niski pobór energii, niewielkie gabaryty i masa, wysoka odporność na uszkodzenia.

Zasadza działania

Pamięć Flash została opracowana w laboratoriach Toshiby przez Dr. Fujio Masuoka na początku lat '80 ubiegłego wieku. To co odróżniało ją od innych pamięci EEPROM to zorganizowanie w bloki, które mogą muszą być kasowane w całości. Zasada działania opiera się na przechowywaniu informacji w tranzystorach polowych MOSFET. Zwykły tranzystor składa się ze źródła i drenu - półprzewodnika typu N+ (P+) oddzielonego półprzewodnikiem typu P (N) nad którym umieszczona jest elektroda - bramka. Jeśli napięcie bramki jest równe napięciu podłoża, czyli nie występuje pole elektryczne w półprzewodniku typu P (N) to nie będzie płynął prąd od rdzenia do drenu - tranzystor jest wyłączony. Przyłożenie napięci do bramki wywołuje pole elektryczne w półprzewodniku typu P (N) i wytworzenie w nim obszaru o tym samym typie co źródło i dren. Tranzystor jest włączony. Zwróćmy przy tym uwagę, że tranzystor tego typu pobiera prąd tylko w momencie przełączania stanu. Jedna komórka pamięci Flash składa się właśnie z takiego tranzystora, który pomiędzy podłożem, a bramką sterującą (Control Gate - CG) posiada odizolowaną bramkę pływającą (Floating Gate - FG). Raz umieszczone elektrony na FG mogą pozostać tam przez wiele lat pamiętając zaprogramowany stan.

Rysunek: Komórka pamięci Flash (źródło Wikipedia)

Czysta komórka pamięci Flash posiada nienaładowaną FG, co odpowiada zapisanej binarnej jedynce. Przykładając wysokie napięcie (12 V w porównaniu do 3,3 V lub 5 V napięcia zasilania podczas odczytu) elektrony "wskoczą" na FG i zostanie zaprogramowane binarne zero. Obecnie w celu poprawy szybkości zapisu przykłada się krótkie impulsy, a następnie sprawdza czy wartość została poprawnie zapisana. Udało się dzięki temu skrócić czas zapisu komórki do kilkudziesięciu nanosekund, czas ten nie jest jednak deterministyczny. Odczyt polega na przyłożeniu napięcia do bramki sterującej CG i w zależność od stanu naładowania FG tranzystor będzie przewodził lub nie. Przyłożenie wysokiego napięcia o odwrotnej polaryzacji powoduje wyczyszczenie zawartości komórki, impuls prądu o natężeniu blisko 200 A przypomina ten przepływający przez lampę błyskową i stąd nazwa pamięci. Kasowanie jest możliwe tylko blokami po kilka tysięcy bitów. Cykl programowania-zapisywanie (Program/Erase - P/E) może zostać powtórzony maksymalnie od 10 000 do 1000 000 razy. Po tym czasie zużyta pamięć ulega uszkodzeniu. Podsumowując, pamięci Flash można swobodnie odczytywać, kasować tylko całymi blokami i zmieniać stan pojedynczej komórki z jedynki na zero. Ta ważna cecha jest wykorzystywana przy projektowaniu systemów plików.

NOR vs NAND

Pamięci Flash występują w dwóch odmianach NOR i NAND. Różnica w konstrukcji polega na połączeniu komórek w równolegle (NOR) lub szeregowo (NAND). W konsekwencji tego pamięci NAND nie mogą być odczytywane zupełnie swobodnie, a jedynie porcjami - stronami po kilka kB. Ponadto w porównaniu do pamięci NOR mają krótsze czasy zapisu, odczytu, większą gęstość zapisu i co za tym idzie niższy koszt na MB pojemności. Także wytrzymałość liczby cykli P/E jest do 10 razy większa. W niektórych zastosowaniach wymagany jest dostęp zupełnie swobodny, np. do przechowywania kodu programu, który jest bezpośrednio wykonywany z tej pamięci. W tej sytuacji musi zostać użyta pamięć typu NOR.

Rysunek: Pamięć NOR (źródło Wikipedia)

Rysunek: Pamięć NAND (źródło Wikipedia)

Organizacja bloków

Oprócz pamięci na dane współczesne układy posiadają oddzielne kilka bajtów na każdy blok do przechowywania sum kontrolnych (Error Correction Code - ECC). Typowe rozmiary stron i bloków współczesnych pamięci NAND wynoszą:

Ograniczona liczba cykli zapisu/kasowania

Problem zużywania się pamięci rozwiązuje się na kilka sposobów. Jednym z nich jest równoważenie zużycia wszystkich bloków. Dedykowane systemu plików jak np. JAFFS2 lub YAFFS traktują pamięć jak log zapisując całą pamięć cyklicznie. Inną techniką jest oznaczanie zużytych bloków jako Bad Block, dzięki czemu tylko część pamięci staje się bezużyteczna. Adaptacje istniejących systemów plików oszczędzają cykle kasowania korzystając z warstwy programowej (Flash Translation Layer - FLT). Układy firm Compact Flash i Secure Digital mają wbudowane sprzętowe mechanizmy wydłużające życie pamięci. Innym podejściem do optymalnego wykorzystania pamięci Flash są rozwiązania kombinowane, na których Flash jest wykorzystywany do trzymania plików często odczytywanych i rzadko zapisywanych (np. pliki wykonywalne i biblioteki programów), a częste zapisy (np. stronicowanie) są wykonywane na magnetycznych dyskach twardych. Istniejącym rozwiązaniem tego typu jest Ready Boost firmy Microsoft.

Niskopoziomowa obsługa programowa

Niejednorodność implementacji sprzętowych wymaga oddzielnych sterowników do różnych pamięci Flash. Projekty, które rozwiązują ten problem to Common Flash Memory Interface (CFMI) - otwarty standard stworzony przez firmy AMD, Intel, Sharp i Fujitsu, który zakłada że wszystkie modele pamięci mogą zostać obsłużone przez uniwersalny sterownik po odczytaniu z układu podstawowych parametrów dotyczących rozmiarów, organizacji pamięci, napięć i czasów sygnałów. Innym przykładem jest protokół USB Mass Storage (UMS), który umożliwia ujednolicony dostęp do pamięci zewnętrznych (w tym flash) przez interfejs USB.

SLC vs MLC

Aktualne trendy rozwoju pamięci flash idą w dwóch kierunkach - wysokiej odporności na błędy i wysokiej gęstości zapisu. Podział ten jest realizowany poprzez trzymanie jednego bitu w kilku komórkach (wysoka niezawodność) lub w wielu bitów w jednej komórce - jest to możliwe poprzez naładowanie bramki pływającej FG do poziomów pośrednich. Technika ta nosi nazwę Multi-Level Cell MLC w odróżnieniu od Single-Level Cell SLC. I tak 4 poziomy - 0, 1/3, 2/3 i 1 umożliwiają zapisanie 2 bitów w jednej komórce. W czerwcu 2008 południowokoreańska firma Hynix zaprezentowała układy MLC NAND o 8 poziomach, czyli 3 bitach na komórkę. W porównaniu do SLC pamięci MLC mają 2-3 krotnie wyższą gęstość zapisu, wolniejszy czas odczytu o kilkadziesiąt procent i 10-krotnie mniejszą żywotność. Problemem jest też podatność na błędy i gubienie informacji przy zmianach temperatur.

Rysunek: Rozkład napięć dla zapisu MLC (źródło OemPCWorld.com)

Dyski Solid State Drive

Bardzo ciekawym rozwiązaniem wykorzystującym pamięci Flash, zyskującym ostatnio popularność, są dyski Flash - SSD. Pierwotnie ze względu na wysoką odporność na uszkodzenia mechaniczne były stosowane głównie w komputerach przemysłowych, dziś ze względu na niski pobór energii, bezgłośną pracę i małą wagę są coraz częściej mocowane w laptopach i netbookach. Także wydajność jest na korzyść zestawów z SSD zamiast HDD. Poniższe wykresy przedstawiają wyniki testów przeprowadzonych przez firmę Intel. Poprawa wydajności jest widoczna szczególnie podczas często wykonywanych na komputerach osobistych operacji ładowania dużej liczby niewielkich plików, np. uruchamianie programów.

Rysunek: Porównanie wydajności HDD i SSD w teście PCMark (źródło Intel.com)

Rysunek: Porównanie wydajności HDD i SSD - instalowanie oprogramowania (źródło Intel.com)

Rysunek: Porównanie wydajności HDD i SSD - instalowanie oprogramowania podczas skanowania (źródło Intel.com)

Przykładowa specyfikacja dysku SSD Intel X25-M:

Źródła


Janina Mincer-Daszkiewicz