Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny15

Zapis/odczyt EEPROM

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Dostęp zapisu/odczytu do EEPROM

Rejestry dostępu do EEPROM znajdują się w przestrzeni we/wy.

Czas zapisu jest w granicach od 4,6 do 8,2 ms w zależności od częstotliwości kalibrowanego oscylatora RC.

Typowe czasy programowania EEPROM

Parametr Liczba cykli kalibrowanego
oscylatora RC
Minimalny czas
programowania
Maksymalny czas
programowania
Zapis do EEPROM
(przez mikroprocesor)
8192 4,6 ms 8,2 ms

Jednakże funkcja odmierzająca samoczynnie czas pozwala wykryć oprogramowaniu użytkownika, kiedy można zapisać następny bajt. Jeśli kod użytkownika zawiera instrukcje, które zapisują pamięć EEPROM, należy podjąć pewne środki ostrożności. W mocno filtrowanych źródłach zasilania napięcie VCC może wzrastać lub opadać wolno przy włączaniu/wyłączaniu. Powoduje to, iż mikrokontroler przez pewien okres czasu pracuje przy napięciu niższym od określonego jako minimalne dla używanej częstotliwości zegarowej, co w efekcie może spowodować niezamierzone skoki w programie i w końcu wykonanie kodu zapisu do EEPROM. Aby zabezpieczyć spójność danych w EEPROM w tym przypadku, zaleca się stosowanie zewnętrznych obwodów resetowania przy zbyt niskim napięciu zasilania.

Aby zapobiec niezamierzonym zapisom w EEPROM, należy zastosować specjalną, dwuetapową procedurę zapisu. Zobacz do opisu rejestru sterującego EEPROM.

Gdy pamięć EEPROM jest odczytywana lub zapisywana, to mikroprocesor zostaje wstrzymany przez dwa cykle zegarowe przed wykonaniem następnej instrukcji.

Na początek:  podrozdziału   strony 

Rejestry pamięci EEPROM

EEAR – EEPROM Address Register – Rejestr adresowy EEPROM

Bit 7 6 5 4 3 2 1 0  
0x1E - - EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEAR
Zapis/Odczyt O O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 X X X X X X  

Bity 7:6 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i dają przy odczycie zawsze wartość zero.

Bity 5:0 – EEAR[5:0]: EEPROM Address – Adres EEPROM

Rejestr adresowy EEPROM – EEAR – określa adres w 64 bajtowej przestrzeni adresowej EEPROM. Bajty danych w EEPROM są adresowane liniowo pomiędzy 0 a 63. Początkowa zawartość rejestru EEARL jest niezdefiniowana. Przed dostępem do  EEPROM należy wpisać poprawny adres.


EEDR – EEPROM Data Register – Rejestr danych EEPROM

Bit 7 6 5 4 3 2 1 0  
0x1D EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa X X X X X X X X  

Bity 7:0 – EEDR7:0: EEPROM Data – Dane EEPROM

Dla operacji zapisu w EEPROM rejestr EEDR zawiera dane do zapisania pod adresem podanym przez rejestr EEAR. Dla operacji odczytu z EEPROM rejestr EEDR zawiera dane odczytane z komórki EEPROM o adresie podanym w rejestrze EEAR.


EECR – EEPROM Control Register – Rejestr sterujący EEPROM

Bit 7 6 5 4 3 2 1 0  
0x1C - - - - EERIE EEMWE EEWE EERE EECR
Zapis/Odczyt O O O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 X 0  

Bity 7:4 – Zarezerwowane

Te bity został zarezerwowany do użytku w przyszłości i na ATtiny15 dają przy odczycie wartość 0.

Bit 3 – EERIE: EEPROM Ready Interrupt Enable – Włączenie przerwania przy gotowości EEPROM

Gdy bit I w rejestrze SREG oraz bit EERIE są ustawione na jeden, to zostaje włączona obsługa przerwania przy gotowości EEPROM. Gdy bit ten jest wyzerowany, przerwanie jest wyłączone. Przerwanie gotowości EEPROM generuje ciągłe przerwanie, gdy bit  EEWE jest wyzerowany.

Bit 2 – EEMWE: EEPROM Master Write Enable – Główne uaktywnianie zapisu EEPROM

Bit EEMWE określa, czy zapis jedynki do bitu EEWE spowoduje zapis danych w pamięci EEPROM. Gdy bit EEMWE zostanie ustawiony na jeden, to ustawienie bitu EEWE zapisze dane w EEPROM pod wybranym adresem. Jeśli bit EEMWE jest wyzerowany, ustawienie bitu EEWE nie odniesie żadnego skutku. Gdy bit EEMWE został ustawiony programowo, to po upływie czterech cykli zegara bit ten zostanie sprzętowo wyzerowany. Zobacz niżej na opis bitu EEWE dla procedury zapisu w EEPROM.

Bit 1 – EEWE: EEPROM Write Enable – Włączenie zapisu w EEPROM

Sygnał zapisu w pamięci EEPROM – EEWE – jest strobem zapisu do EEPROM. Gdy adres i dane są poprawnie ustawione, bit EEWE musi zostać ustawiony, aby zapisać tę wartość w pamięci EEPROM. Bit EEMWE musi być wcześniej ustawiony na 1, w przeciwnym razie zapis do EEPROM nie odbędzie się. Przy zapisie danych do pamięci EEPROM należy przestrzegać poniższej procedury (kolejność kroków 2 i 3 nie jest istotna):

  1. Odczekaj aż bit EEWE przyjmie wartość 0.
  2. Zapisz nowy adres EEPROM do rejestru EEAR (opcjonalnie).
  3. Zapisz nowe dane dla EEPROM do rejestru EEDR (opcjonalnie).
  4. Zapisz logiczną jedynkę do bitu EEMWE w rejestrze EECR.
  5. W ciągu czterech cykli zegarowych po ustawieniu bitu EEMWE wpisz logiczne "1" do bitu EEWE.

Uwaga: wystąpienie przerwania pomiędzy krokiem 4 a 5 spowoduje porażkę cyklu zapisu, ponieważ bit głównego uaktywnienia zapisu w EEPROM zostanie sprzętowo wyzerowany. Jeśli procedura przerwania uzyskująca dostęp do EEPROM zostanie przerwana przez inny dostęp do EEPROM, to rejestr EEAR lub EEDR zostanie zmodyfikowany, co wywoła porażkę zapisu w przerwanym dostępie do EEPROM. Zaleca się wyzerowanie globalnego znacznika przerwań podczas ostatnich czterech kroków w celu uniknięcia tych problemów.

Gdy upłynie czas dostępu zapisu (typowo 5,1 ms, jeśli wewnętrzny oscylator RC został skalibrowany na 1,6 MHz), to bit EEWE zostanie wyzerowany sprzętowo. Oprogramowanie użytkownika może sprawdzać stan tego bitu i czekać na zero przed zapisem następnego bajtu. Gdy bit EEWE został ustawiony na 1, mikroprocesor jest wstrzymywany na dwa cykle przed wykonaniem następnej instrukcji.

Bit 0 – EERE: EEPROM Read Enable – Włączenie odczytu EEPROM

Sygnał odczytu pamięci EEPROM – EERE – jest strobem odczytu dla EEPROM. Gdy zostanie ustawiony poprawny adres w rejestrze EEAR, bit EERE musi zostać ustawiony na 1. Gdy bit ten zostanie sprzętowo wyzerowany, żądane dane znajdują się w rejestrze EEDR. Dostęp odczytu do EEPROM zajmuje czas jednej instrukcji i nie ma potrzeby sprawdzania stanu bitu EERE. Gdy bit EERE zostanie ustawiony na 1, mikroprocesor jest wstrzymywany na cztery cykle przed wykonaniem następnej instrukcji.

Użytkownik powinien sprawdzać bit EEWE przed rozpoczęciem operacji odczytu. Jeśli trwa operacja zapisu, gdy nowe dane są umieszczane w rejestrach we/wy EEPROM, to operacja zapisu zostanie przerwana, a jej wynik jest nieokreślony.

Do odmierzania czasu w operacjach na pamięci EEPROM wykorzystywany jest kalibrowany oscylator. Poniższa tabela przedstawia typowe czasy programowania przy dostępie do EEPROM przez mikroprocesor.

Typowe czasy programowania EEPROM

Parametr Liczba cykli kalibrowanego
oscylatora RC
Minimalny czas
programowania
Maksymalny czas
programowania
Zapis do EEPROM
(przez mikroprocesor)
8192 4,6 ms 8,2 ms
Na początek:  podrozdziału   strony 

Zapobieganie uszkodzeniu danych w EEPROM

W czasie okresów niskiego napięcia zasilania VCC dane EEPROM mogą zostać uszkodzone, ponieważ napięcie zasilające jest zbyt niskie, aby mikroprocesor i EEPROM pracowały właściwie. Kwestie te są takie same jak w systemach z zewnętrznymi pamięciami EEPROM i te same rozwiązania projektowe powinny być stosowane.

Uszkodzenie danych EEPROM może wystąpić w dwóch sytuacjach, gdy napięcie jest za niskie. Po pierwsze, zwykła sekwencja zapisu do EEPROM wymaga minimalnego napięcia, aby zadziałała poprawnie. Po drugie, sam mikroprocesor może wykonywać instrukcje z błędami, jeśli napięcie zasilające jest zbyt niskie.

Uszkodzenia danych EEPROM można z łatwością uniknąć przez zastosowanie się do tych zaleceń projektowych (wystarcza jedno):

  1. Utrzymuj końcówkę AVR RESET w stanie aktywnym (niskim) podczas okresów niewystarczającej wartości napięcia zasilającego. Można to zrobić przez uaktywnienie wewnętrznego modułu wykrywania spadku napięcia (ang. internal Brown-out Detector, BOD), jeśli napięcie robocze odpowiada poziomowi wykrywania. Jeśli nie, to można zastosować zewnętrzny obwód zabezpieczania przed zbyt niskim napięciem VCC.
  2. Utrzymuj rdzeń AVR w trybie uśpienia z wyłączeniem zasilania (ang. Power-down Sleep Mode) podczas okresów niskiego VCC. To zapobiegnie dekodowaniu i wykonywaniu instrukcji przez mikroprocesor, efektywnie chroniąc rejestry EEPROM przed niezamierzonymi zapisami.
  3. Zapisuj stałe w pamięci FLASH, jeśli nie jest potrzebna możliwość zmiany zawartości pamięci przez program. Pamięć FLASH nie może zostać zmieniona przez mikroprocesor i dane będą bezpieczne.
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.