Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
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.
Pamięć programu może zostać zabezpieczona przed dostępem wewnętrznym lub zewnętrznym. Zobacz do rozdziału "Bity blokujące, bezpiecznikowe i sygnaturowe".
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:
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.
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.
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.
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.
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.
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):
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
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 |
Te bity są zarezerwowane w ATtiny2313A/4313 i przy odczycie dają zawsze wartość zero.
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.
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.
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).
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.
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.
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.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.