W dzisiejszych czasach pamięć Flash służy do przechowywania kodu programu, a pamięć EEPROM (elektrycznie kasowalna pamięć tylko do odczytu) służy do przechowywania trwałych danych. Około 30 lat temu, zanim pojawił się Flash, pamięci EEPROM były używane do przechowywania kodu programu.
Właściwie najpierw pojawiła się ROM (pamięć tylko do odczytu), potem PROM (ROM programowalny, tylko raz), EPROM (PROM Kasowalne za pomocą światła UV), EEPROM, a na koniec Flash. ROMy są nadal używane do bardzo głośnych i tanich aplikacji (np. Mówiące kartki z życzeniami).
Ważna różnica w stosunku do obecnych mikrokontrolerów polega na tym, że generalnie nie można wykonać kodu poza EEPROM, a programy przechowujące dane w pamięci flash są niewygodne. (Dane są przechowywane w pamięci flash, gdy na przykład używasz słowa kluczowego „const” w deklaracji danych lub definiujesz ciąg, ale jest to obsługiwane przez kompilator i konsolidator).
Obszar EEPROM może służyć do przechowywania konfiguracji lub innych danych, które mają być dostępne podczas ponownego uruchamiania, w tym jeśli mikrokontroler stracił moc, a następnie został ponownie włączony. Funkcjonalnie EEPROM można traktować jako bardzo mały dysk twardy lub kartę SD.
Na mikrokontrolerach bez EEPROM możliwe jest przechowywanie trwałych danych w pamięci flash, ale staje się to trudne, ponieważ mikrokontrolery tak naprawdę nie zostały zaprojektowane do tego celu, i musisz znaleźć specjalne miejsce, które nie będzie zakłócać kodu programu, i odłóż to na bok z linkerem. Ponadto, jak wspomniano poniżej, pamięć EEPROM można zwykle aktualizować wiele razy częściej niż pamięć flash.
Jeśli programujesz dane we flashu, nie oznacza to, że możesz uzyskać dostęp do danych jako zmiennych w swoim programie C, ponieważ nie ma sposobu, aby powiedzieć kompilatorowi, gdzie te zmienne są w twoim kodzie (tzn. Nie możesz powiązać stałej zmienna do tego obszaru flasha.) Czytanie ich musi odbywać się za pomocą specjalnego zestawu rejestrów używanych do ich zapisywania. Uwaga: to ograniczenie dotyczy również danych w pamięci EEPROM, więc nie ma w tym zakresie żadnych korzyści.
Aby zaprogramować pamięć flash lub EEPROM, należy najpierw usunąć blok pamięci. Następnie jest programowany. W przypadku flashowania, pisanie zwykle odbywa się jednocześnie po bloku. W przypadku pamięci EEPROM można to zrobić blokami lub bajtem na raz, w zależności od mikrokontrolera.
Zarówno w przypadku pamięci flash, jak i pamięci EEPROM, istnieje możliwość maksymalnej ich aktualizacji przed zużyciem pamięci. Liczba ta jest podana w arkuszu danych jako minimalna gwarantowana wartość. Zwykle jest znacznie wyższa w przypadku EEPROM niż w przypadku pamięci flash. W przypadku pamięci flash widziałem liczby tak niskie, jak 1000. W przypadku pamięci EEPROM widziałem liczby tak wysokie, jak 1 000 000.
Jedną z zalet pamięci EEPROM w porównaniu z pamięcią flash jest to, że można je usunąć wiele razy więcej niż można usunąć pamięć flash.
„In-System Self-programmable” oznacza po prostu, że mikrokontroler może aktualizować własną pamięć flash podczas pracy. Ta funkcja jest zwykle używana do aktualizacji kodu w terenie. Sztuczka polega na tym, że musisz pozostawić trochę kodu w systemie podczas aktualizacji programu głównego, zwanego bootloaderem. Ten schemat jest używany w systemie Arduino do programowania układu.