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

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny2313A/4313

Samoprogramowanie FLASH

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

Cechy

Na początek:  podrozdziału   strony 

Przegląd

Mikrokontroler udostępnia mechanizm samoprogramowania się do samodzielnego ładowania kodu programu. Samoprogramowanie może korzystać z dowolnego dostępnego interfejsu danych i powiązanego z nim protokołu do odczytu kodu i zapisu (zaprogramowania) tego kodu do pamięci programu.

Na początek:  podrozdziału   strony 

Bity blokowania

Pamięć programu może zostać zabezpieczona przed dostępem wewnętrznym lub zewnętrznym. Zobacz do rozdziału "Bity blokujące, bezpiecznikowe i sygnaturowe".

Na początek:  podrozdziału   strony 

Samoprogramowanie pamięci FLASH

Pamięć programu jest uaktualniana stronami. Przed zaprogramowaniem strony danymi umieszczonymi w tymczasowym buforze strony, strona musi zostać wymazana. Tymczasowy bufor strony jest wypełniany słowo po słowie przy pomocy instrukcji SPM, a bufor ten można wypełnić albo przed rozkazem wymazania strony, albo pomiędzy wymazaniem strony a operacją zapisu:

  1. Programowanie z wypełnieniem bufora przed kasowaniem strony:
    • Wypełnij tymczasowy bufor strony
    • Wykonaj kasowanie strony (ang. Page Erase)
    • Wykonaj zapis strony (ang. Page Write)
  2. Programowanie z wypełnieniem bufora po kasowaniu strony:
    • Wykonaj kasowanie strony
    • Wypełnij tymczasowy bufor strony
    • Wykonaj zapis strony

Jeśli tylko część strony musi być zmieniona, to reszta strony musi być zapisana (na przykład w tymczasowym buforze strony) przed kasowaniem, a następnie zapisana z powrotem. Dostęp do tymczasowego bufora strony może się odbywać w dowolnej kolejności. Ważne jest, aby adres strony używany w obu operacjach kasowania strony i zapisu strony wskazywał tę samą stronę.

Standardowo instrukcja SPM jest zablokowana, lecz można ją uaktywnić przez zaprogramowanie bitu bezpiecznikowego SELFPRGEN na 0.

Adresowanie pamięci FLASH podczas samoprogramowania

Do adresowania rozkazów SPM wykorzystywany jest wskaźnik Z:

Bit 15 14 13 12 11 10 9 8  
ZH (R31) Z15 Z14 Z13 Z12 Z11 Z10 Z9 Z8  
ZL (R30) Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0  
Bit 7 6 5 4 3 2 1 0  

Ponieważ pamięć FLASH zorganizowana jest w strony, licznik rozkazów może być traktowany tak, jakby posiadał dwie różne sekcje. Jedna sekcja, składająca się z najmniej znaczących bitów, adresuje słowa wewnątrz strony, natomiast najbardziej znaczące bity adresują strony. Pokazane to jest na poniższym rysunku. Zwróć uwagę, iż operacje wymazania strony i zapisu strony adresują pamięć niezależnie od siebie (rejestr Z może mieć różną zawartość dla każdej z nich). Dlatego bardzo ważnym jest, aby oprogramowanie adresowało tę samą stronę w obu tych operacjach.

Instrukcja LPM używa wskaźnika Z do przechowywania adresu. Ponieważ instrukcja ta adresuje pamięć FLASH bajt po bajcie, to również najmniej znaczący bit Z0 jest używany.

Poniższa tabelka opisuje zmienne pokazane na rysunku powyżej:

Zmienna Opis
PCPAGE Adres strony licznika rozkazów. Wybiera stronę słów i jest używane przez operacje kasowani i zapisu strony.
PCMSB Najbardziej znaczący bit licznika rozkazów.
ZPCMSB Bit w rejestrze Z, który jest odwzorowywany w PCMSB. Ponieważ Z[0] nie jest używane, ZPCMSB = PCMSB + 1. Bity rejestru Z leżące ponad ZPCMSB są ignorowane.
PCWORD Adres słowa licznika rozkazów. Wybiera słowo wewnątrz strony. Wykorzystywane jest do wypełniania bufora tymczasowego i musi być równe zero podczas operacji zapisu strony.
PAGEMSB Najbardziej znaczący bit używany do adresowania słowa w obrębie pojedynczej strony.
ZPAGEMSB Bit w rejestrze Z, który jest odwzorowywany w PAGEMSB. Ponieważ Z[0] jest nieużywane, ZPAGEMSB = PAGEMSB + 1.

Zwróć uwagę, iż w operacjach kasowania strony i zapisu strony strony te są adresowane niezależnie. Dlatego jest niezmiernie ważne, aby program w obu operacjach użył adresu tej samej strony.

Chociaż najmniej znaczący bit rejestru Z (Z0) powinien zawsze być równy zero dla SPM, to warto zauważyć, iż instrukcja LPM adresuje FLASH bajt po bajcie i wykorzystuje Z0 jako bit wyboru bajtu.

Po rozpoczęciu operacji programowania adres zostaje zatrzaśnięty i wskaźnik Z można używać do innych operacji.

Kasowanie strony

Aby wykonać kasowanie strony:

Dane w R1 i R0 są ignorowane. Adres strony musi zostać zapisany do PCPAGE w rejestrze Z. Podczas operacji pozostałe bity rejestru Z są ignorowane.

Jeśli w trakcie czasowej sekwencji wspomnianej wyżej wystąpi przerwanie, to dostęp w ciągu czterech taktów nie może być zagwarantowany. Aby zapewnić operację atomową (niepodzielną), przerwania muszą zostać zablokowane przed zapisem do rejestru SPMCSR.

Podczas operacji kasowania mikroprocesor jest zatrzymany.

Ładowanie strony

Aby zapisać słowo instrukcji:

Zawartość PCWORD w rejestrze Z jest wykorzystywana do adresowania danych w tymczasowym buforze.

Bufor tymczasowy skasuje się automatycznie po operacji zapisu strony lub po zapisie bitu RWWSRE w rejestrze SPMCSR. Jest on równieź kasowany po resecie systemu.

Zapamietaj, iż nie jest możliwe zapisanie danej więcej niż jeden raz do każdej komórki bufora bez skasowania go.

Jeśli pamięć EEPROM zostanie zapisana w trakcie operacji ładowania strony przez SPM, wszystkie dane zostaną utracone.

Zapis strony

Aby wykonać zapis strony:

Dane w rejestrach R1 i R0 są ignorowane. Adres strony musi zostać wpisany do PCPAGE. Podczas tej pozostałe bity rejestru Z należy zapisać zerami.

Mikroprocesor jest wstrzymywany przy operacji zapisu strony. Do rejestru SPMCSR nie można wpisywać, gdy jest programowana pamięć EEPROM.

Zapamiętaj, iż operacja zapisu EEPROM będzie blokowała wszelkie programowe programowanie FLASH. Programowy odczyt bitów bezpiecznikowych również będzie zablokowany podczas operacji zapisu do EEPROM. Zaleca się, aby użytkownik sprawdzał stan bitu EEPE w rejestrze EECR i upewniał się, iż jest on wyzerowany zanim dokona zapisu do SPMCSR.

Na początek:  podrozdziału   strony 

Zapobieganie uszkodzeniu danych w pamięci FLASH

W okresach spadku napięcia zasilającego VCC programowanie pamięci FLASH może zakończyć się błędami, ponieważ napięcie zasilające jest zbyt niskie, aby mikroprocesor i pamięć FLASH pracowały poprawnie. Problemy te są takie same jak w systemach z zewnętrzną pamięcią FLASH i należy stosować te same rozwiązania projektowe. Błędy programowania FLASH mogą pojawić się w dwóch sytuacjach, gdy napięcie jest za niskie. Po pierwsze standardowa sekwencja zapisu do FLASH wymaga minimalnego napięcia do poprawnej pracy. Po drugie, sam mikroprocesor może wykonywać instrukcje niepoprawnie, jeśli napięcie zasilające jest dla nich zbyt niskie.

Błędom w FLASH można łatwo zapobiec stosując się do następujących zaleceń projektowych (jedno jest wystarczające):

  1. Utrzymuj linię AVR RESET w stanie aktywnym (niskim) w okresach niewystarczającej wartości napięcia zasilającego. Można tego dokonać poprzez włączenie wewnętrznego detektora spadku napięcia zasilania (ang. internal Brown-out Detector, BOD), jeśli napięcie pracy pasuje do poziomu wykrywania. Jeśli nie, można użyć zewnętrznego układu resetowania przy niskim napięciu VCC. Jeśli reset wystąpi podczas wykonywania operacji zapisu, to operacja ta zostanie zakończona pod warunkiem, iż napięcie zasilające posiada wystarczającą wartość.
  2. Utrzymuj rdzeń AVR w trybie uśpienia z wyłączeniem zasilania (ang. Power-down sleep mode) w okresach niskiego VCC. Uniemożliwi to mikroprocesorowi próby dekodowania i wykonywania instrukcji, co skutecznie zabezpieczy rejestr SPMCSR, a co za tym idzie również pamięć FLASH, przed niezamierzonymi zapisami.
Na początek:  podrozdziału   strony 

Czas programowania FLASH za pomocą SPM

Do odmierzania czasu przy dostępie do pamięci FLASH używany jest kalibrowany oscylator RC. Poniższa tabela pokazuje typowy czas programowania FLASH przy dostępie przez mikroprocesor:

Symbol Minimalny czas programowania Maksymalny czas programowania
Zapis FLASH (wymazanie strony, zapis strony i zapis bitów blokujących za pomocą SPM) 3,7 ms 4,5 ms

Czasy minimalne/maksymalne dotyczą pojedynczej operacji

Na początek:  podrozdziału   strony 

Opis rejestrów

SPMCSR – Store Program Memory Control and Status Register – Rejestr sterowania i stanu zapisu do pamięci programu

Bit 7 6 5 4 3 2 1 0  
0x37 (0x57) - - RSIG CTPB RFLB PGWRT PGERS SPMEN SPMCSR
Zapis/Odczyt O O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:6 – Zarezerwowane

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

Bit 5 – RSIG: Read Device Signature Imprint Table – Odczyt sygnatury mikrokontrolera z wewnętrznej tablicy

Wykonanie instrukcji LPM w przedziale trzech taktów zegarowych od ustawienia bitów RSIG i SPMEN w rejestrze SPMCSR zwróci wybrane dane (w zależności od wartości wskaźnika Z) z obszaru sygnatury mikrokontrolera w rejestrze docelowym.

Bit 4 – CTPB: Clear Temporary Page Buffer – Wymazywanie tymczasowego bufora strony

Jeśli bit CTPB zostanie zapisany jedynką logiczną podczas wypełniania tymczasowego bufora strony, to bufor ten zostanie wymazany i przechowywane w nim dane będą utracone.

Bit 3 – RFLB: Read Fuse and Lock Bits – Odczyt bitów bezpiecznikowych i bitów blokujących

Instrukcja LPM wykonana w obrębie do trzech cykli zegarowych po ustawieniu bitów RFLB i SPMEN w rejestrze SPMCSR odczyta do rejestru docelowego albo bity blokujące, albo bity bezpiecznikowe (w zależności od bity Z0 w rejestrze wskaźnikowym Z).

Bit 2 – PGWRT: Page Write – Zapis strony

Jeśli ten bit zostanie zapisany logiczną jedynką w tym samym czasie co bit SPMEN, to instrukcja SPM wykonana w czasie do 4 cykli zegarowych spowoduje zapis strony danymi przechowywanymi w buforze tymczasowym. Adres strony jest brany z bitów PCPAGE rejestru wskaźnikowego Z. Dane w R1 i R0 są ignorowane. Bit PGWRT automatycznie wyzeruje się po zakończeniu zapisu strony, lub jeśli żadna instrukcja SPM nie zostanie wykonana w czasie czterech cykli zegarowych. Podczas operacji zapisu strony mikroprocesor zostaje zatrzymany.

Bit 1 – PGERS: Page Erase – Wymazanie strony

Jeśli ten bit zostanie zapisany logiczną jedynką w tym samym czasie co bit SPMEN, to instrukcja SPM wykonana w czasie do 4 cykli zegarowych spowoduje wymazanie strony. Adres strony jest brany z bitów PCPAGE rejestru wskaźnikowego Z. Dane w R1 i R0 są ignorowane. Bit PGERS automatycznie wyzeruje się po zakończeniu wymazywania strony, lub jeśli żadna instrukcja SPM nie zostanie wykonana w czasie czterech cykli zegarowych. Podczas całej operacji wymazywania strony mikroprocesor zostaje zatrzymany.

Bit 0 – SPMEN: Self Programming Enable – Włączenie samoprogramowania

Ten bit uaktywnia instrukcję SPM na cztery kolejne cykle zegarowe. Jeśli zostanie zapisany jedynką wraz z jednym z bitów RSIG, CTPB, RFLB, PGWRT lub PGERS, to najbliższa instrukcja SPM będzie posiadała specjalne znaczenie, zobacz na opis powyżej. Jeśli tylko bit SPMEN zostanie zapisany, to najbliższa instrukcja SPM umieści wartość z rejestrów R1:R0 w buforze tymczasowym strony adresowanym przez rejestr wskaźnikowy Z. Najmłodszy bit rejestru Z jest ignorowany. Bit SPMEN automatycznie wyzeruje się po zakończeniu instrukcji SPM lub po upływie 4 cykli zegarowych bez wykonania żadnej instrukcji SPMM. Podczas wymazywania strony i zapisu strony bit SPMEN pozostaje w stanie wysokim, aż dana operacja zakończy się.

Zapis jakiejkolwiek innej wartości od “10001”, “01001”, “00101”, “00011” lub “00001” w dolnych pięciu bitach nie będzie miało żadnego efektu.

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
©2021 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.