Mam zamiar omówić programowanie pamięci flash, ale wiele materiałów będzie podobnych do EEPROM (pamięć ROM z możliwością kasowania elektrycznego), ponieważ pamięć flash pochodzi z EEPROM w połowie lat osiemdziesiątych. Jak opisano poniżej, z fizycznego punktu widzenia stanem domyślnym jest 1. Ale co ważniejsze, mam zamiar wyjaśnić, dlaczego nie jest to stan domyślny - nie można po prostu arbitralnie program na górze, co jest już zaprogramowany z ostatniej chwili.
Flash NOR jest prawie zawsze wybierany do flashowania programu, ponieważ interfejs najlepiej nadaje się do umieszczania danych w mapie pamięci mikrokontrolera - pełny adres i magistrale danych naśladują pamięć RAM i umożliwiają losowy dostęp do dowolnej lokalizacji. Dane mogą być odczytywane po jednym słowie, przy czym słowo to jest definiowane jako szerokość danych mikrokontrolera, zwykle 8, 16 lub 32-bitów. Z drugiej strony flash NAND został opracowany w celu zastąpienia dysków twardych i działa sekwencyjnie.
Jednak programowanie staje się nieco bardziej skomplikowane. Jak już wspomniano, domyślnym stanem dla pamięci flash NOR i innych nieulotnych pamięci, takich jak pamięć flash NAND, pamięci EEPROM, a nawet pamięci EPROM, jest logika 1. Nie można zaprogramować 1 w tych urządzeniach, można zaprogramować tylko 0. Na przykład, jeśli masz bajt zawierający 0x0123 i chcesz go zmienić na 0x3210, nie możesz tego zrobić bezpośrednio jak zapisanie bajtu w pamięci RAM.
Zamiast tego bity w pamięci muszą zostać usunięte, co powoduje przejście do domyślnego stanu 1, o którym już wspomniano. Można to zrobić tylko w blokach, a nie słowach. W Microchip PIC32, z którym ostatnio pracowałem, minimalny rozmiar bloku, który można usunąć, wynosi 4096 bajtów. Więc jeśli chcesz zmienić tylko jedno słowo (32-bitowe), musisz odczytać 4K pamięci, usunąć blok, a następnie zapisać 4K pamięci z powrotem do flashowania, ale w razie potrzeby dołączając nową wartość 32-bitową. Wymazywanie może zająć trochę czasu - dobrą część sekundy.
Poniżej znajduje się zdjęcie komórki pamięci flash. Flash przechowuje dane poprzez usunięcie lub umieszczenie elektronów na pływającej bramie. Gdy elektrony są obecne na pływającej bramie, przez tranzystor nie przepływa żaden prąd, co wskazuje na 0. Gdy elektrony są usuwane z pływającej bramki, tranzystor zaczyna przewodzić, wskazując 1. (Jest to umownie - może to być w inny sposób, ale wymagałoby to falowników na wszystkich liniach danych).
Usuń operację. Domyślny stan komórek pamięci flash (jednopoziomowa komórka flash NOR) to 1, ponieważ pływające bramki nie niosą ładunków ujemnych. Kasowanie komórki pamięci flash (resetowanie do 1) osiąga się poprzez przyłożenie napięcia do źródła i bramki kontrolnej (linia słowa). Napięcie może wynosić od -9 V do -12 V. A także zastosować około 6 V do źródła. Elektrony w bramie pływającej są wyciągane i przenoszone do źródła przez tunelowanie kwantowe . Innymi słowy, elektrony tunelują od pływającej bramy do źródła i podłoża.
Ponieważ kasowanie wykorzystuje wysokie napięcia, dlatego kasowanie w blokach wymaga mniejszej powierzchni matrycy. Dlatego napięcia mogą być przyłożone tylko do całych rzędów tranzystorów jednocześnie.
Do pisania komórkę flash NOR można zaprogramować lub ustawić na 0 zgodnie z następującą procedurą. Podczas pisania do bramki sterującej (linia słowa) przykładane jest wysokie napięcie około 12 V. Jeśli wysokie napięcie około 7 V zostanie przyłożone do linii bitowej (zacisk drenażowy), w celi zostanie zapisane 0. Kanał jest teraz włączony, więc elektrony mogą przepływać ze źródła do drenu. Prąd źródła drenu jest wystarczająco wysoki, aby spowodować przeskakiwanie niektórych wysokoenergetycznych elektronów przez warstwę izolacyjną na pływającą bramę w procesie zwanym wtryskiem gorącego elektronu.
Do odczytu napięcie około 5 V przyłożone jest do bramki sterującej, a około 1 V do odpływu. Stan komórki pamięci różni się prądem przepływającym między drenem a źródłem.
Okres użytkowania pamięci nieulotnej jest mierzony w kategoriach cykli kasowania. Wadą NOR jest to, że liczba cykli kasowania wynosi około 1/10 liczby pamięci NAND. Wiele wersji PIC32 pozwala na aktualizację pamięci flash tylko 1000 razy, czyli o wiele mniej niż typowe 100 000 cykli kasowania pamięci EEPROM.
Nie jest więc tak ważne, czy projektanci ustawili stan domyślny na 1 lub 0 (wybrali wartość, która pozwoliła na najłatwiejszą implementację); ważne jest, aby najpierw usunąć blok flasha (co zajmuje czas), a następnie przeprogramować cały blok (nawet jeśli jedno słowo jest zmieniane (co wymaga znacznej ilości pamięci RAM).
To kasowanie bloku urządzenia wraca do pierwszych pamięci EPROM (Erasable Programmable ROM), które poprzedzały pamięci EEPROM. Kod został zaprogramowany na układy scalone (jak 16KB 27128) i umieszczony w gniazdach. Te czipsy miały małe okienko u góry, które pozwalało świecić na matrycę. Gdy program musiał zostać zmieniony, chipy umieszczano w gumce UV na około 20 minut, co wymazałoby cały chip. Następnie chip zostałby zaprogramowany za pomocą nowego programu.
Niektóre pamięci EEPROM wymagają kasowania bloków pamięci przed programowaniem; inne pozwalają na zapis bajtu na raz (kontroler EEPROM faktycznie kasuje najpierw bajt i programuje go).