Freddie Chopin wrote: No ale w czym problem? Kto każe kasować CAŁĄ pamięć? Również używam symulowanego eepromu i nie widzę problemu w aktualizacji firmware bez ruszania konfiguracji.
Ja widzę. Przy dużych rozmiarach sektora (jednostki kasowania), np. 4kB, zapisywanie często zmiennych wartości do flasha jest nadużyciem. I nie gadajcie rzeczy typu "konfiguracja sie nie zmienia tak często" ani "mozna trzymać dane w tym samym sektorze co kod" - podam prosty przykład:
sizeof(Conf)=4. Dla 4kB sektora daje to 1024 'sloty' na taką strukturę.
Odczyt:
Z zapisem gorzej:
Cudownie. Tyle roboty (a pominąłem szopki z obsługą flasha, przygotowywania go do zapisu, weryfikacji zapisu, itp itd; ew. API calls) po to zeby zaoszczędzić 1.50zł i kawałek PCB o powierzchni SOT23.
Dodatkowo, jak widać, zuzywamy nadmiarowe 16 bitów (chociaz 10 bitów by wystarczyło) potrzebne do tagowania wersji - drugie tyle, co danych uzytkowych. Zapisując to do EEPROMa nie potrzeba tagować wersji; konfiguracja zapisuje się zawsze pod ten sam adres i zawsze jest aktualna.
Tak samo FLASH jak SPI EEPROM z definicji nie będą thread safe i trzeba ręcznie obudować mutexami funkcje dostępowe.
Jak widać, jakikolwiek kod wykonywalny nie moze byc w tym samym sektorze co przestrzen symulowanego EEPROMu.
FLASH ma zatem następujące przewagi nad SPI EEPROMem:
- natychmiastowy dostęp do konfiguracji jeśli wczesniej została ona zlokalizowana i zostało zagwarantowane, ze nie zapisała się w międzyczasie nowsza wersja (kopia konfiga w RAMie z EEPROMu umozliwia to samo...)
- kronika
Wady:
- często skomplikowane procedury przygotowywania FLASHa do zapisu
- pętle przeszukujące pamięć
- bardzo dlugo trwające kasowanie sektora
- utrata kroniki po skasowaniu sektora (ew. mozna ręcznie powielić jej kawałek, przerzucając dane przez RAM)
- dane nadmiarowe (teoretycznie mozna zrezygnowac z licznika gwarantując liniowy zapis przyrostowy i mechanizm rozpoznawania obecności prawidlowej struktury pod danym adresem - albo licznik, albo suma kontrolna, albo jedno i drugie... )
Ja jednak wolę EEPROM...