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 |
©2021 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Mikrokontroler ATtiny2313A/4313 udostępnia dwa bity blokujące (ang. lock bits), które można pozostawić w stanie niezaprogramowanym (“1”) lub zaprogramować je (“0”) w celu uzyskania dodatkowych zabezpieczeń, co przedstawiają poniższe tabele. Bity blokujące można wymazać do stanu “1” tylko za pomocą polecenia kasowania zawartości mikrokontrolera (ang. Chip Erase command).
Bit blokujący | Numer bitu | Opis | Wartość standardowa(1) |
7 | – | 1 (niezaprogramowany) | |
6 | – | 1 (niezaprogramowany) | |
5 | – | 1 (niezaprogramowany) | |
4 | – | 1 (niezaprogramowany) | |
3 | – | 1 (niezaprogramowany) | |
2 | – | 1 (niezaprogramowany) | |
LB2 | 1 | Bit blokujący | 1 (niezaprogramowany) |
LB1 | 0 | Bit blokujący | 1 (niezaprogramowany) |
Nota: 1. "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany.
Tryby zabezpieczeń bitów blokujących
Bity blokowania pamięci(1)(2) | Rodzaj zabezpieczenia | ||
Tryb LB | LB2 | LB1 | |
1 | 1 | 1 | Brak funkcji pamięci blokowania. |
2 | 1 | 0 | Dalsze programowanie
pamięci FLASH i EEPROM jest zablokowane
w trybach programowania wysokonapięciowego oraz
szeregowego. Bity bezpiecznikowe zostają zablokowane w trybach programowania wysokonapięciowego i szeregowego. Interfejs debugWire jest zablokowany. |
3 | 0 | 0 | Dalsze programowanie i weryfikacja pamięci FLASH i EEPROM są zablokowane w trybach programowania wysokonapięciowego oraz szeregowego. Bity bezpiecznikowe zostają zablokowane w trybach programowania wysokonapięciowego i szeregowego. Interfejs debugWire jest zablokowany. |
Noty: | 1. | Zaprogramuj bity bezpiecznikowe przed bitami blokującymi. |
2. | "1" oznacza stan niezaprogramowany, "0" oznacza stan zaprogramowany. |
Gdy są programowane bity blokujące, można jedynie zwiększyć tryb zabezpieczeń. Zapis tego samego ustawienia lub ustawienia niższego trybu zabezpieczeń automatycznie powoduje ustawienie maksymalnej ochrony. Tylko rozkaz kasowania układu (ang. Chip Erase) pozwala na skasowanie bitów blokujących. Mikrokontroler ATtiny2313A/4313 nie posiada oddzielnej sekcji dla programu boot loadera (program ładowania kodu programu do pamięci FLASH). Instrukcja SPM jest uaktywniana dla całej pamięci FLASH, jeśli zostanie zaprogramowany ("0") bit bezpiecznikowy SELFPRGEN, w przeciwnym razie instrukcja jest zablokowana.
Mikrokontroler ATtiny2313A/4313 posiada dwa bajty bezpiecznikowe, które krótko opisują poniższe tabele wraz z bitami bezpiecznikowymi. Zauważ, iż bity bezpiecznikowe dają odczyt logicznego zera, "0", jeśli zostały zaprogramowane.
Bajt rozszerzony bitów bezpiecznikowych
Bit bezpiecznikowy | Numer bitu | Opis | Wartość standardowa |
– | 7 | – | 1 (niezaprogramowane) |
– | 6 | – | 1 (niezaprogramowane) |
– | 5 | – | 1 (niezaprogramowane) |
– | 4 | – | 1 (niezaprogramowane) |
– | 3 | – | 1 (niezaprogramowane) |
– | 2 | – | 1 (niezaprogramowane) |
– | 1 | – | 1 (niezaprogramowane) |
SELFPRGEN(1) | 0 | Uaktywnienie samoprogramowania | 1 (niezaprogramowane) |
Noty: | 1. | Uaktywnia instrukcję SPM. Zobacz do rozdziału "Samoprogramowanie FLASH" |
Górny bajt bitów bezpiecznikowych
Bit bezpiecznikowy | Numer bitu | Opis | Wartość standardowa |
DWEN(3) | 7 | Włączenie debugWIRE | 1 (niezaprogramowane) |
EESAVE | 6 | Pamięć EEPROM jest zachowywana podczas kasowania układu | 1 (niezaprogramowane, EEPROM kasowana) |
SPIEN(1) | 5 | Włączenie szeregowego programowania i ładowania danych | 0 (zaprogramowane, SPI włączone) |
WDTON(2) | 4 | Licznik czasu zawsze włączony | 1 (niezaprogramowane) |
BODLEVEL2(4) | 3 | Poziom progu spadku napięcia zasilania | 1 (niezaprogramowane) |
BODLEVEL1(4) | 2 | Poziom progu spadku napięcia zasilania | 1 (niezaprogramowane) |
BODLEVEL0(4) | 1 | Poziom progu spadku napięcia zasilania | 1 (niezaprogramowane) |
RSTDISBL(5) | 0 | Blokada zewnętrznego resetu | 1 (niezaprogramowane) |
Noty: | 1. | Bit bezpiecznikowy SPIEN jest niedostępny w trybie programowania SPI. | |||||||||||||||||||||||||||||||||
2. | Zaprogramowanie tych bitów wyłącza przerwanie z licznika zegarowego. Zobacz do podrozdziału "Timer licznika zegarowego". | ||||||||||||||||||||||||||||||||||
3. | Nigdy nie rozprowadzaj urządzenia z mikrokontrolerem, który posiada zaprogramowany bit DWEN bez względu na ustawienia bitów blokujących. Zaprogramowany bit bezpiecznikowy DWEN włącza niektóre składniki systemu zegarowego i będą one pracowały we wszystkich trybach uśpienia, co może zwiększyć pobór energii. | ||||||||||||||||||||||||||||||||||
4. |
|
||||||||||||||||||||||||||||||||||
5. | Zobacz do podrozdziału "Funkcje alternatywne portu A". |
Dolny bajt bitów bezpiecznikowych
Bit bezpiecznikowy | Numer bitu | Opis | Wartość standardowa |
CKDIV8 | 7 | Podział zegara przez 8 | 0 (zaprogramowane) |
CKOUT | 6 | Wyprowadzenie zegara na końcówkę CKOUT | 1 (niezaprogramowane) |
SUT1 | 5 | Czas uruchamiania 1 | 1 (niezaprogramowane)(1) |
SUT0 | 4 | Czas uruchamiania 0 | 0 (zaprogramowane)(1) |
CKSEL3 | 3 | Wybór źródła zegarowego | 0 (zaprogramowane)(2) |
CKSEL2 | 2 | Wybór źródła zegarowego | 1 (niezaprogramowane)(2) |
CKSEL1 | 1 | Wybór źródła zegarowego | 0 (zaprogramowane)(2) |
CKSEL0 | 0 | Wybór źródła zegarowego | 0 (zaprogramowane)(2) |
Stan bitów bezpiecznikowych nie jest zmieniany przez operację kasowania układu (ang. Chip Erase). Zauważ, iż bity bezpiecznikowe są blokowane, jeśli bit blokujący LB1 został zaprogramowany. Zaprogramuj bity bezpiecznikowe przed zaprogramowaniem bitów blokujących.
Wartości bitów bezpiecznikowych są zatrzaskiwane, gdy mikrokontroler wchodzi w tryb programowania, a zmiany ich stanów nie będą obowiązywały aż do wyjścia z trybu programowania. Nie odnosi się to do bitu bezpiecznikowego EESAVE, który funkcjonuje natychmiast po zaprogramowaniu. Bity bezpiecznikowe są również zatrzaskiwane przy uruchamianiu w trybie normalnym.
Mikrokontroler posiada stałą tablicę w wydzielonym obszarze pamięci tylko do odczytu, która służy do przechowywania różnych informacji na temat tego układu, takich jak sygnatura mikrokontrolera oraz dane kalibracyjne oscylatora. Większość tego segmentu pamięci została zarezerwowana do użytku wewnętrznego. Adresy bajtów używane są, gdy mikrokontroler sam odczytuje te dane za pomocą rozkazu LPM. Zewnętrzne programatory muszą stosować adresy słów.
Zawartość tablicy sygnaturowej mikrokontrolera
Adres słowa | Adres bajtu | Bajt |
0x00 | 0x00 | Bajt nr 0 sygnatury |
0x01 | Dane kalibracyjne dla wewnętrznego oscylatora 8MHz | |
0x01 | 0x02 | Bajt nr 1 sygnatury |
0x03 | Dane kalibracyjne dla wewnętrznego oscylatora 4MHz | |
0x02 | 0x04 | Bajt nr 3 sygnatury |
0x05... | Zarezerwowane na użytek wewnętrzny |
Obszar sygnaturowy mikrokontrolera ATtiny2313A/4313 zawiera dwa bajty danych kalibracyjnych dla wewnętrznego oscylatora. Dane kalibracyjne w górnym bajcie pod adresem 0x00 są do użytku z oscylatorem ustawionym na pracę z częstotliwością 8 MHz. Podczas resetu bajt ten jest automatycznie wpisywany do rejestru OSCCAL, aby zapewnić poprawną częstotliwość oscylatora.
Istnieje oddzielny bajt kalibracyjny dla trybu 4 MHz wewnętrznego oscylatora, lecz te dane nie są ładowane automatycznie. Podczas resetu sprzętowo zawsze ładowane są dane kalibracyjne dla 8 MHz. Aby użyć oddzielnych danych kalibracyjnych dla oscylatora w trybie 4 MHz, rejestr OSCCAL musi zostać uaktualniony przez program użytkownika. Dane kalibracyjne dla pracy z częstotliwością 4 MHz są umieszczone w starszym bajcie słowa spod adresu 0x01 obszaru sygnaturowego.
Wszystkie mikrokontrolery Atmel posiadają 3-bajtowy kod sygnaturowy, który identyfikuje mikrokontroler. Kod ten można odczytać zarówno w trybie szeregowym jak i równoległym, również gdy układ został zablokowany bitami blokującymi. Te trzy bajty znajdują się w oddzielnej przestrzeni adresowej.
Dla ATtiny2313A bajty sygnaturowe są następujące:
Dla ATtiny4313 bajty sygnaturowe są następujące:
Możliwe jest odczytanie stanu bitów bezpiecznikowych i blokujących przez program użytkownika. Zaprogramowane bity bezpiecznikowe i blokujące mają przy odczycie wartość zero, a niezaprogramowane mają wartość jeden. Zobacz do podrozdziałów "Bity blokujące" i "Bity bezpiecznikowe". Dodatkowo oprogramowanie może również odczytywać dane z tablicy sygnatury mikrokontrolera. Zobacz do podrozdziału "Bajty sygnaturowe".
Wykonanie instrukcji LPM w ciągu trzech cykli zegarowych mikroprocesora po ustawieniu bitów RFLB i SPMEN w SPMCSR zwróci wartości bitów blokujących w rejestrze docelowym. Bity RFLB i SPMEN są automatycznie zerowane po ukończeniu odczytu bitów blokujących, lub jeśli żadna instrukcja LPM nie zostanie wykonana w ciągu trzech cykli zegarowych mikroprocesora, lub jeśli żadna instrukcja SPM nie zostanie wykonana w ciągu czterech cykli zegarowych mikroprocesora. Gdy bity RFLB i SPMEN są wyzerowane, instrukcja LPM działa w sposób standardowy.
Aby odczytać bity blokujące, postępuj zgodnie z poniższą procedurą:
Jeśli procedura się powiedzie, to zawartość rejestru docelowego jest następująca:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | - | - | - | - | - | - | LB2 | LB1 |
Więcej na temat bitów blokujących znajdziesz w następnym rozdziale.
Algorytm odczytywania bitów bezpiecznikowych jest podobny do opisanego powyżej algorytmu odczytywania bitów blokujących, inny jest jedynie adres.
Aby odczytać dolny bajt bitów bezpiecznikowych (ang. Fuse Low Byte, FLB), postępuj wg poniższej procedury:
Jeśli się to powiedzie, to rejestr docelowy zawiera:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FLB7 | FLB6 | FLB5 | FLB4 | FLB3 | FLB2 | FLB1 | FLB0 |
Aby odczytać górny bajt bitów bezpiecznikowych (ang. Fuse High Byte, FHB), po prostu w powyższej procedurze zastąp wartość 0x000 wpisywaną do rejestru wskaźnikowego Z wartością 0x003 i wykonaj resztę operacji. Jeśli procedura się powiedzie, to w rejestrze docelowym otrzymasz FHB:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FHB7 | FHB6 | FHB5 | FHB4 | FHB3 | FHB2 | FHB1 | FHB0 |
Aby odczytać rozszerzony bajt bitów bezpiecznikowych (ang. Fuse Extended Byte, FEB), w powyższej procedurze zastąp wartość 0x000 wpisywaną do rejestru wskaźnikowego Z wartością 0x002 i wykonaj resztę operacji. Jeśli procedura się powiedzie, to w rejestrze docelowym otrzymasz FEB:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Rd | FEB7 | FEB6 | FEB5 | FEB4 | FEB3 | FEB2 | FEB1 | FEB0 |
W celu odczytania zawartości tablicy sygnatur mikrokontrolera postępuj wg procedury poniżej:
Jeśli procedura się powiedzie, to zawartość rejestru docelowego jest zgodna z opisem w podrozdziale "Bajty sygnaturowe".
Bity RSIG i SPMEN wyzerują się automatycznie po trzech taktach mikroprocesora. Gdy bity RSIG i SPMEN są wyzerowane, to instrukcja LPM zadziała zgodnie z opisem. Zobacz na poniższy przykład programowy.
Przykład w kodzie maszynowym |
DSIT_read: ; Używa wskaźnika Z jako indeksu tablicy ldi ZH, 0 ldi ZL, 1 ; Bobierz bity SPMCSR do R16, ustaw RSIG i SPMEN, następnie zapisz SPMCSR ldi r16, (1<<RSIG)|(1<<SPMEN) out SPMCSR, r16 ; Wykonaj LPM. Dane z tablicy będą zwrócone w r17 lpm r17, Z ret |
![]() |
Zespół Przedmiotowy |
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.