Szybkie linki:
 
Galeria serwisu:

Widzisz łapkę - kliknij w obrazek, aby zobaczyć więcej.

Mikrokontrolery AVR - fusebity.

Fusebity mikrokontrolerów AVR - ATMEGA 328
Fusebity AVR - to trwałe bity konfiguracji w mikrokontrolerze Atmega 328, podzielone zostały na cztery grpy (bajty) (LOW, HIGH, EXT, LOCK), które wpływają na jego działanie, w tym na ustawienia zegara (np. CKSEL3 ...0), sposób uruchamiania (np. BOOTSZ1/BOOTSZ0) i ochrony mikrokontrolera przed nieautoryzowanym dostępem oraz inne funkcje. Atmega 328 posiada rozszerzoną grupę fusebitów (EF). Spróbujemy zaprzyjaźnić się z fuse bitami mikrokontrolerów. Przejdźmy teraz do konkretów.

Fusebity Atmega 328:
1. Fusebity grupy LOW (LF) - wykorzystywane są wszystkie 8 bitów. od góry w dół (bit7.. bit0)

bit 7 - CKDIV8: (Clock Divide by 8): Wewnętrzny dzielnik zegara przez 8.
0 (Włączony): Częstotliwość wybranego zegara jest dzielona przez 8 (fabryczne ustawienie, które obniża pobór prądu).1 (Wyłączony): Mikrokontroler pracuje z pełną częstotliwością źródła zegara (wymagane dla Arduino).
bit 6 – CKOUT (Clock Output): Wyprowadzenie sygnału zegarowego.
0 (Włączony): Wewnętrzny sygnał zegarowy jest przekazywany na dedykowany pin wyjściowy CLKO (funkcja przydatna do taktowania innych układów na płytce). 1 (Wyłączony): Pin działa jako zwykły port wejścia/wyjścia (I/O).
bity 5, 4 – SUT1, SUT0 (Start-up Time): Konfiguracja czasu startu.Bity te określają opóźnienie (mierzone w cyklach zegara i milisekundach) od momentu włączenia zasilania do momentu, w którym procesor zaczyna wykonywać program. Opóźnienie to daje czas na ustabilizowanie się napięcia zasilania oraz rozruch oscylatora (np. kwarcu). Najbardziej stabilne i najczęściej używane ustawienie to maksymalny czas zwłoki (SUT[1:0] = 11).
bity 3, 2, 1, 0 – CKSEL3, CKSEL2, CKSEL1, CKSEL0 (Clock Select): Wybór źródła sygnału taktującego.Ta kombinacja 4 bitów decyduje, skąd mikrokontroler pobiera zegar. Główne tryby to:0000: Zewnętrzny generator sygnału zegarowego (External Clock).0010: Wewnętrzny, skalibrowany oscylator RC o częstotliwości 8 MHz (nie wymaga zewnętrznych elementów).0011: Wewnętrzny oscylator energooszczędny 128 kHz.1111 do 1010: Zewnętrzny rezonator kwarcowy lub ceramiczny (Crystal Oscillator) – zakres zależy od częstotliwości i pojemności kondensatorów.

2. Fusebity grupy HIGH (HF) - wykorzystywane są wszystkie 8 bitów. Poniżej przedstawiono ich funkcje

bit 7 – RSTDISBL (External Reset Disable): Wyłączenie zewnętrznego pinu RESET.
1 (Wyłączony): Pin 1 (PC6) działa jako standardowe wejście sygnału RESET (konfiguracja domyślna i wymagana do programowania SPI).0 (Włączony): Pin RESET zostaje przekształcony w zwykły port wejścia/wyjścia (PC6). Uwaga: Aktywacja tego bitu uniemożliwia dalsze programowanie przez SPI.
bit 6 – DWEN (debugWIRE Enable): Włączenie interfejsu debugowania debugWIRE.
1 (Wyłączony): Interfejs debugWIRE jest nieaktywny.0 (Włączony): Uruchamia debugowanie jednoukładowe za pomocą pinu RESET.
bit 5 – SPIEN (Serial Program and Data Downloading Enable): Włączenie programowania szeregowego SPI.
0 (Włączony): Zezwala na programowanie mikrokontrolera przez interfejs SPI (domyślny i kluczowy stan).1 (Wyłączony): Blokuje programowanie przez SPI. Z poziomu programatora SPI ten bit jest zabezpieczony przed przypadkową zmianą na 1.
bit 4 – WDTON (Watchdog Timer Always On): Sprzętowe, stałe włączenie licznika Watchdog.
1 (Wyłączony): Licznik Watchdog jest kontrolowany programowo z poziomu kodu aplikacji.0 (Włączony): Watchdog jest uruchamiany sprzętowo natychmiast po starcie i działa nieprzerwanie, niezależnie od instrukcji w programie.
bit 3 – EESAVE (EEPROM Memory Preserved through Chip Erase): Zachowanie pamięci EEPROM podczas czyszczenia układu.
1 (Wyłączony): Operacja całkowitego kasowania pamięci Flash (Chip Erase) czyści również całą pamięć EEPROM.0 (Włączony): Pamięć EEPROM jest chroniona i zachowuje swoje dane podczas wgrywania nowego programu. Bardzo przydatne podczas aktualizacji oprogramowania urządzeń.
bity 2, 1 – BOOTSZ1, BOOTSZ0 (Boot Size Select): Wybór rozmiaru sekcji Bootloadera.Kombinacja tych dwóch bitów rezerwuje przestrzeń na końcu pamięci Flash dla programu rozruchowego (Bootloadera) i ustala jego adres startowy:
11: Rozmiar 256 słów (512 bajtów)10: Rozmiar 512 słów (1024 bajty) – ustawienie standardowe dla Arduino Uno (Optiboot)01: Rozmiar 1024 słowa (2048 bajtów)00: Rozmiar 2048 słów (4096 bajtów)
bit 0 – BOOTRST (Select Reset Vector): Wybór wektora resetu.
1 (Wyłączony): Po włączeniu zasilania lub resecie procesor zaczyna wykonywać program od początku pamięci Flash (adres 0x0000 – aplikacja główna).0 (Włączony): Po resecie procesor skacze od razu do sekcji Bootloadera (konfiguracja wymagana dla Arduino, aby sprawdzić, czy użytkownik nie chce wgrać nowego programu przez port szeregowy).

3. Fusebity grupy Extended (EF) - Rozszerzony bajt bezpieczników (Extended Fuse Byte) w mikrokontrolerze ATmega328P jest rejestrem konfiguracyjnym odpowiedzialnym wyłącznie za kontrolę układu BOD (Brown-out Detector), czyli detektora spadku napięcia zasilania.Głównym zadaniem tej grupy bezpieczników jest sprzętowe zabezpieczenie mikrokontrolera przed nieprzewidywalnym działaniem programu oraz uszkodzeniem danych (np. w pamięci EEPROM lub Flash) w sytuacji, gdy napięcie zasilania spadnie poniżej bezpiecznego poziomu roboczego. W bajcie tym wykorzystywane są jedynie 3 najmłodsze bity (bity 0, 1 i 2). Pozostałe 5 bitów (bity 3–7) jest nieaktywnych i podczas odczytu zawsze zwracają wartość logiczną 1.

BODLEVEL2..0: pozwala na ustawienie jednego z trzech progów napięciowych lub całkowite wyłączenie detektora. Podstawowe ustawienia:
1. BOD wyłączony (0xFF / 0x07): Brak ochrony przed spadkami napięcia. Konfiguracja zalecana w zaawansowanych projektach ultra-energooszczędnych (low-power), gdzie mikrokontroler jest usypiany, a zasilanie spada do minimalnych wartości.
2. Próg 1.8 V (0xFE / 0x06): Zabezpieczenie dla układów zasilanych niskim napięciem (np. bateryjnie 2V – 3V) pracujących z obniżoną częstotliwością taktowania.
3. Próg 2.7 V (0xFD / 0x05): Standardowa konfiguracja dla systemów zasilanych napięciem 3.3V oraz domyślne ustawienie dla platformy Arduino Uno (pracującej przy 5V, gdzie 2.7V stanowi bezpieczną dolną granicę dla rdzenia).
4. Próg 4.3 V (0xFC / 0x04): Maksymalna ochrona dla układów wymagających stabilnego zasilania 5V i pracujących z pełną prędkością taktowania (np. zewnętrzny kwarc 16 MHz / 20 MHz).

4. Fusebity grupy LOCK (Lock bity) - bity blokujące, specjalna grupa ustawień służąca do ochrony pamięci przed nieautoryzowanym odczytem lub nadpisaniem.

BLB12, BLB11 - ochrona sekcji Bootloadera. Działają analogicznie do powyższych, ale chronią samą sekcję Bootloader przed instrukcjami wykonywanymi z sekcji Application.
Mode 1 (11): Brak ograniczeń.
Mode 2 (10): Program główny nie może zapisywać do sekcji bootloadera.
Mode 3 (00): Program główny nie może zapisywać ani czytać sekcji bootloadera.
Mode 4 (01): Program główny nie może czytać z sekcji bootloadera.
BLB02, BLB01 - ochrona sekcji aplikacji. Te bity określają, czy kod znajdujący się w sekcji Bootloader może czytać lub zapisywać do sekcji Application (głównej części programu).
Mode 1 (11): Brak ograniczeń.
Mode 2 (10): Bootloader nie może zapisywać do sekcji aplikacji.
Mode 3 (00): Bootloader nie może zapisywać ani czytać (LPM/SPM) sekcji aplikacji.
Mode 4 (01): Bootloader nie może czytać z sekcji aplikacji.
LB2, LB1 - tryby ochrony ogólnej. Te bity decydują o dostępie do całej pamięci Flash i EEPROM przez programatory zewnętrzne (ISP/Równoległe). Wybrane ustawienia:
LB2LB1StanOpis
11No memory lockBrak blokad. Można swobodnie programować i odczytywać układ.
10Dalsze programowanie wyłączoneZablokowana możliwość dalszego programowania (zapisywania) pamięci Flash i EEPROM. Odczyt jest nadal możliwy.
00Dalsze programowanie i weryfikacja wyłączonePełna blokada. Nie można zapisać ani odczytać (zweryfikować) zawartości Flash i EEPROM przez zewnętrzny programator.

Kluczowe zasady logiki LOCK bitów: Kolejność programowania: Lock bity należy programować na samym końcu, po wgraniu programu i ustawieniu fusebitów. Bezpieczeństwo: Jeśli Twoim celem jest ochrona kodu przed skopiowaniem przez konkurencję, ustaw bity LB1 i LB2 na 0. Odblokowanie: Jeśli zablokujesz procesor (00), programator nie pokaże zawartości pamięci. Aby wgrać nowy program, musisz wybrać funkcję „Chip Erase” w oprogramowaniu takim jak AVRDUDE lub Microchip Studio.

Domyślne dla Atmegi328 ustawienia fuse bitów: LF - 62, HF - D9, EF - FF, LOCK - FF.

Najważniejsze konfiguracje LFUSE - w praktyce (Wartości HEX)0xFF (Standard dla Arduino Uno / Nano):Wyłączony dzielnik przez 8 (CKDIV8 = 1).Wybrane źródło to zewnętrzny kwarc wysokiej częstotliwości (np. 16 MHz).Ustawiony maksymalny czas startu dla pełnej stabilizacji kwarcu.0xE2 (Praca bez zewnętrznego kwarcu – 8 MHz):Wyłączony dzielnik przez 8 (CKDIV8 = 1).Wybrane źródło to wewnętrzny oscylator RC 8 MHz. Układ działa autonomicznie, bez żadnych zewnętrznych elementów taktujących.0x62 (Ustawienie fabryczne nowej ATmegi328P – 1 MHz):Włączony dzielnik przez 8 (CKDIV8 = 0).Wybrane źródło to wewnętrzny oscylator RC 8 MHz. Z powodu dzielnika układ startuje z częstotliwością 1 MHz.
Najważniejsze konfiguracje HFUSE - w praktyce (Wartości HEX)0xDE (Standard dla Arduino Uno / Nano):Włączone programowanie SPI, aktywny pin RESET.Włączona funkcja EESAVE (ochrona EEPROM przed skasowaniem).Rozmiar Bootloadera ustawiony na 512 słów (1024 bajty).Włączony BOOTRST (start od adresu Bootloadera).0xD9 (Standard dla układów bez Bootloadera):Identyczne ustawienia jak powyżej, ale z wyłączonym BOOTRST (BOOTRST = 1).Mikrokontroler po resecie startuje natychmiast i bez żadnego opóźnienia wykonuje program główny od adresu 0x0000. Zwalnia to również zarezerwowaną pamięć Flash na kod użytkownika.
Co oznacza ustawiony fusebit? - kwestia przypomnienia, co oznacza określenie "ustawiony" lub "zaprogramowany" fusebit. To oznacza bit (ustawiony na "0"). (Ustawiony ns "1") oznacza bit nieustawiony i niezaprogramowany. Wartości tych bitów dają wartość bajtu danej grupy fusebitów.

Będziemy dodawać i pokazywać inne przykłady fusebitów oraz opisywć ich użycie.



Licznik serwisu: 12611 , Aktualnie: 3 , Admin kontakt: admin@progel.pl