ESP8266 – jak korzystać z EEPROM-u

0
38

Większość mikrokontrolerów dostępnych obecnie w sprzedaży posiada jakąś formę pamięci nieulotnej. Zwykle program przechowywany jest w pamięci Flash,  natomiast do użytku programisty pozostaje pamięć EEPROM. Pamięć ta kasowana jest za pomocą prądu elektrycznego i ilość możliwych kasowań i zapisów jest ograniczona. Ilość odczytów nie ma wpływu na żywotność tej pamięci.


W przypadku popularnego Arduino UNO, które oparte jest na mikrokontrolerze ATMEGA328, do dyspozycji dostajemy 1024 bajty. Na tych bajtach zapisać możemy dowolne informacje, które zostaną podtrzymane po wyłączeniu zasilania. Ilość cyklów zapisów EEPROM dla tego mikrokontrolera gwarantowana jest przez jego producenta na ok 100 000. Po przekroczeniu tej liczby pamięć ta może ulec uszkodzeniu.

Należy wziąć pod uwagę, że operacje na pamięci EEPROM są stosunkowo czasochłonne (cykl kasowania i zapisu zajmuje 1.8 – 3.4 ms). Nie nadaje się ona również i z tego względu (poza limitowaną ilością zapisów) do wykonywania na niej częstych operacji lub wykorzystania w formie np. bufora.

Z tych oczywistych względów pamięć EEPROM używana jest głównie do przechowywania wszelkiego rodzaju ustawień konfiguracyjnych. W moim projekcie SandwichBoxBot wykorzystuję ją np. do zapamiętania ssid i hasła do sieci WiFi.

Obsługa EEPROM w przypadku Arduino jest bardzo prosta. Wykorzystujemy przede wszystkim funkcje read i write i to generalnie jest wszystko co powinniśmy wiedzieć.

W przypadku ESP8266 jest troszkę inaczej. Tutaj dostępne mamy więcej pamięci niż w Arduino Uno bo aż 4096 bajtów. Nieco inaczej wygląda też obsługa pamięci w dołączonej bibliotece.

Przed wykonaniem operacji zapisu lub odczytu należy wywołać funkcję EEPROM.begin(x) – gdzie x może być wartością z zakresu 4 – 4096 określającą, na jakiej ilości pamięci chcemy operować.

Warto pamiętać o tym, że w przypadku “wyrzucania” obsługi EEPROM do osobnej klasy, raczej nie należy odpalać funkcji begin w konstruktorze, a po wykonaniu begin zrobić krótki delay (np. 10 ms). W przeciwnym wypadku (czyli wywołaniu begin zanim tak naprawdę ESP8266 porządnie “wystartuje”) funkcje zapisu i odczytu mogą po prostu nie działać i zwracać błąd.

Zapis i odczyt wykonujemy identycznie jak w przypadku klasycznego Arduino, za pomocą funkcji read i write. Trzeba jednak pamiętać, że aby wykonać zapis należy wywołać jeszcze funkcję commit() lub end().

Funkcja commit() spowoduje jedynie zapisanie pamięci EEPROM, Skorzystanie z end() dodatkowo zwolni cześć pamięci RAM, która przechowuje kopię danych z EEPROM.

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here