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

Bity blokujące, bezpiecznikowe i sygnaturowe

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

Bity blokujące

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).

Bajt bitów blokujących

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.

Na początek:  podrozdziału   strony 

Bity bezpiecznikowe

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.
Bity BODLEVEL 2...0 Min. VBOT Typ. VBOT Max. VBOT Jednostki
111 Moduł BOD wyłączony
110   1,8   V
101   2,7   V
100   4,3   V
011 Zarezerwowane
010
001
000
  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)
Noty:    
  2. Standardowa wartość bitów bezpiecznikowych SUT1...0 daje w wyniku maksymalny czas uruchamiania dla standardowego źródła zegarowego.
  3. Standardowe ustawienie bitów CKSEL3..0 daje częstotliwość wewnętrznego oscylatora RC równą 8 MHz.

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.

Zatrzaskiwanie stanu bitów bezpiecznikowych

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.

Na początek:  podrozdziału   strony 

Bajty sygnaturowe

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

Bajt kalibracyjny

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.

Bajty sygnaturowe

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:

  1. 0x000: 0x1E (oznacza układ wyprodukowany przez firmę Atmel).
  2. 0x001: 0x91 (oznacza 2 KB pamięci FLASH).
  3. 0x002: 0x0A (oznacza mikrokontroler ATtiny2313A, gdy bajt pod adresem 0x001 ma wartość 0x91).

Dla ATtiny4313 bajty sygnaturowe są następujące:

  1. 0x000: 0x1E (oznacza układ wyprodukowany przez firmę Atmel).
  2. 0x001: 0x92 (oznacza 4 KB pamięci FLASH).
  3. 0x002: 0x0AD (oznacza mikrokontroler ATtiny4313, gdy bajt pod adresem 0x001 ma wartość 0x92).
Na początek:  podrozdziału   strony 

Programowy odczyt bitów blokujących, bezpiecznikowych oraz sygnatury

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".

Odczyt bitów blokujących

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ą:

  1. Załaduj do rejestru wskaźnikowego Z wartość 0x0001.
  2. Ustaw bity RFLB i SPMEN w rejestrze 4149.php#SPMCSR.
  3. W ciągu trzech cykli zegarowych od tego momentu wykonaj instrukcję LPM.
  4. Odczytaj bity blokujące z rejestru docelowego instrukcji LPM.

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.

Programowy odczyt bitów bezpiecznikowych

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:

  1. Załaduj do rejestru wskaźnikowego Z wartość 0x0000.
  2. Ustaw bity RFLB i SPMEN w rejestrze SPMCSR.
  3. W ciągu trzech cykli zegarowych od tego momentu wykonaj instrukcję LPM.
  4. Odczytaj FLB z rejestru docelowego instrukcji LPM.

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  

Odczyt tablicy sygnaturowej

W celu odczytania zawartości tablicy sygnatur mikrokontrolera postępuj wg procedury poniżej:

  1. Załaduj wskaźnik Z indeksem tablicy.
  2. Ustaw bity RSIG i SPMEN w rejestrze SPMCSR.
  3. W ciągu trzech taktów zegara wykonaj instrukcję LPM.
  4. Odczekaj trzy takty zegara na wyzerowanie bitów SPMEN.
  5. Odczytaj dane tablicy z rejestru docelowego instrukcji LPM.

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