Fusebity mikrokontrolerów UPDI.
Fusebity mikrokontrolerów UPDI - AVR16DD20
Grupy fusebitów mikrokontrolerów UPDI - ustawienia bezpieczników tego typów mikrokontrolerów zostały rozdzielone i pogrupowane w kilka grup. Czas na opis fuse nowych mikrokontrolerów. Zaczynamy od popularnego AVR16DD20. Opis, jak wyglądaja grupy fuse tego układu UPDI?
Mikrokontroler AVR16DD20 należy do nowoczesnej rodziny tinyAVR-DD (seria DD). W układach z interfejsem UPDI konfiguracja fusebitów wygląda zupełnie inaczej niż w starych układach typu ATtiny13 czy ATmega328P. Fusebity nie są już osobnymi rejestrami LOW, HIGH i EXTENDED. Znajdują się one w przestrzeni adresowej pamięci EEPROM (sekcja FUSES). Każdy fusebit ma teraz swój własny, czytelny adres i nazwę. Oraz rejestr LOCK jako osobny blok blokady dostępu do mikrokontrolera.
Poniżej znajdziesz pełny opis najważniejszych fusebitów dla AVR16DD20, również podobnych (np. AVR32DD20).
Konfiguracja rózni się od ustawień mikrokontrolerów ATTINY 0/1/2.
FUSE AVR16DD20 - ustawienia bezpieczników mikrokontrolera:
Fabryczne (domyślne), kolejno grupy FUSE0 - FUSE8: 00,00,00,FF,FF,D0,08,00,00 oraz LOCK:5C.
Numer | Nazwa | Wartość | Opis |
| Fuse0 | WDTCFG | 0x00 | Konfiguracja timera nadzorującego Watchdog. Tryb okienkowy (WINDOW[3:0]), jak i główny czas działania (PERIOD[3:0]) są całkowicie wyłączone (OFF), nie zresetuje mikrokontrolera.
Bity 7:4 – WINDOW[3:0] Okres wygaśnięcia okna zegara strażniczego. Wartość ta jest zapisywana w polu bitowym WINDOW rejestru sterowania zegara strażniczego A (WDT.CTRLA) podczas resetowania.
Bity 3:0 – PERIOD[3:0] Okres wygaśnięcia zegara strażniczego. Wartość ta jest zapisywana w polu bitowym PERIOD rejestru sterowania zegara strażniczego A (WDT.CTRLA) podczas resetowania.
|
| Fuse1 | BODCFG | 0x00 | Wykrywanie niebezpiecznych spadków napięcia zasilania. Tu jest całkowicie wyłączony (DISABLED), zarówno podczas pracy, jak i w trybach uśpienia. Wartości bitów tego rejestru bezpieczników są zapisywane w odpowiednich rejestrach konfiguracyjnych BOD podczas uruchamiania. Wartość domyślna podana w niniejszym opisie bezpiecznika jest wartością zaprogramowaną fabrycznie i nie wolno jej mylić z wartością resetowania. Możliwe ustawienia:
Bity 7:5 – LVL[2:0] Poziom BOD:
0x0 BODLEVEL0 1.9V
0x1 BODLEVEL1 2.45V
0x2 BODLEVEL2 2.70V
0x3 BODLEVEL3 2.85V
Bit 4 – SAMPFREQ Częstotlieość próbkowania BOD: 0: 128 Hz Częstotliwość próbkowania wynosi 128 Hz, 1: 32 Hz Częstotliwość próbkowania wynosi 32 Hz
Bity 3:2 – ACTIVE[1:0] Tryb pracy BOD w stanie aktywnym i spoczynkowym
0x0 DISABLE – funkcja BOD wyłączona; 0x1 ENABLE – funkcja BOD włączona w trybie ciągłym; 0x2 SAMPLE – funkcja BOD włączona w trybie próbkowania; 0x3 ENABLEWAIT – funkcja BOD włączona w trybie ciągłym. Wykonanie zostaje wstrzymane po wybudzeniu, dopóki funkcja BOD nie zacznie działać.
Bity 1:0 – SLEEP[1:0] Tryb pracy czujnika BOD w trybie uśpienia: 0x0 DISABLE – czujnik BOD wyłączony; 0x1 ENABLE – czujnik BOD włączony w trybie ciągłym; 0x2 SAMPLE – czujnik BOD włączony w trybie próbkowania; 0x3 – zarezerwowane.
|
| Fuse2 | OSCCFG | 0x00 |
Konfiguracja oscylatora. Wartość domyślna podana w opisie tego bezpiecznika jest wartością zaprogramowaną fabrycznie i nie wolno jej mylić z wartością resetowania
Bity 7:4 - zarezerwowane (nieużuwane)
Bity 3:0 – CLKSEL[3:0] Clock Select. To pole bitowe steruje oscylatorem urządzenia.
0x0 OSCHF Urządzenie działa na wewnętrznym oscylatorze wysokoczęstotliwościowym z zegarem wewnętrznym 24MHz dzielonym przez 5, czyli w symie z prędkością 4.8MHz. Jest to ustawienie domyślne. 0x1 OSC32K Urządzenie działa na wewnętrznym oscylatorze 32,768 kHz. Inne – zarezerwowane
chcąc zmienić zegar mikrokontroler na inny, należy to robić programowo zmieniając rejestry mikrokontrolera.
|
| Fuse3 | REZERWA | 0xFF | Ten bajt nie ma przypisanej żadnej funkcji w AVR16DD20. Domyślnie i zawsze odczytuje się jako 0xFF |
| Fuse4 | REZERWA | 0xFF | Ten bajt nie ma przypisanej żadnej funkcji w AVR16DD20. Domyślnie i zawsze odczytuje się jako 0xFF |
| Fuse5 | SYSCFG0 | 0xD0 | To najważniejszy bajt w całym mikrokontrolerze. Odpowiada za konfigurację systemu, w tym za to, czym jest pin programowania UPDI.
Bity 7:6 – CRCSRC[1:0] CRC Source. To pole bitowe określa, która sekcja pamięci Flash zostanie sprawdzona przez układ peryferyjny CRCSCAN podczas inicjalizacji po zresetowaniu. Możliwe wartości:
0x0 FLASH – CRC całej pamięci Flash (sekcja rozruchowa, kod aplikacji i dane aplikacji)
0x1 BOOT – CRC sekcji rozruchowej
0x2 BOOTAPP – CRC sekcji kodu aplikacji i sekcji rozruchowej
0x3 NOCRC – brak CRC
Bit 5 – CRCSEL - wybór trybu CRC. Ten bit określa rodzaj kodu CRC generowanego przez układ peryferyjny CRCSCAN. Możliwe wartości: 0 CRC16 CRC-16-CCITT, 1 CRC32 CRC-32 (IEEE 802.3)
Bit 4 – UPDIPINCFG Konfiguracja pinu UPDI podczas uruchamiania. Ten bit steruje konfiguracją pinu UPDI. Wartości: 0 – GPIO (pin UPDI jest skonfigurowany jako GPIO), 1 – UPDI (pin UPDI jest skonfigurowany jako pin UPDI z włączonym podciąganiem do poziomu wysokiego na PF7). Jest to wartość domyślna ustawiona fabrycznie.
Bit 3 – RSTPINCFG Konfiguracja pinu resetowania przy uruchomieniu. Ten bit steruje konfiguracją pinu resetowania.
Wartości:
0 INPUT Pin PF6 jest skonfigurowany jako ogólny pin wejściowy. Jest to wartość domyślna ustawiona fabrycznie.
1 RESET Zewnętrzny reset włączony na pinie PF6
Bity 2:1 Zarezerwowane. Nie ustawiać.
Bit 0 – EESAVE EEPROM Zapisywanie podczas kasowania układu scalonego.
Ten bit określa, czy pamięć EEPROM zostanie skasowana, czy zachowana podczas kasowania układu. Jeśli opcja jest włączona, podczas kasowania układu skasowana zostanie wyłącznie pamięć flash. Wartości: 0 WYŁĄCZ – pamięć EEPROM jest kasowana podczas kasowania układu. 1 WŁĄCZ – pamięć EEPROM jest zachowana podczas kasowania układu, niezależnie od tego, czy urządzenie jest zablokowane, czy nie.
Uwagi: Co oznacza 0xD0 (binarnie 11010000): CRCSRC[1:0] ma wartość 0x3 – brak CRC. Bit 5 =0 - CRC16, Bit4=1 - (UPDIPINCFG=1) – UPDI (pin UPDI jest skonfigurowany jako pin UPDI. Bit3=0 - (RSTPINCFG=0 ) Pin PF6 jest skonfigurowany jako ogólny pin wejściowy, Bit0=0 (EESAVE EEPROM=0) - EEPROM zapisywany podczas kasowania układu. |
| Fuse6 | SYSCFG1 | 0x08 |
Konfiguracja systemu 1. Wartość domyślna podana w niniejszym opisie bezpiecznika jest wartością zaprogramowaną fabrycznie i nie wolno jej mylić z wartością resetowania.
Bity 7:5 Zarezerwowane, nie ustawiać.
Bity 4:3 – MVSYSCFG[1:0] Konfiguracja systemu MVIO. To pole bitowe steruje konfiguracją systemu MVIO, systemu dodatkowego zasilania części portów.
Wartości:
0x0 – Zarezerwowane
0x1 DUAL Konfiguracja z podwójnym zasilaniem
0x2 SINGLE Konfiguracja z pojedynczym zasilaniem
0x3 – Zarezerwowane
Bity 2:0 – SUT[2:0] Czas uruchamiania. To pole bitowe steruje czasem uruchamiania między włączeniem zasilania a rozpoczęciem wykonywania kodu.
Wartości:
0x0 0 ms
0x1 1 ms
0x2 2 ms
0x3 4 ms
0x4 8 ms
0x5 16 ms
0x6 32 ms
0x7 64 ms
Uwagi: Co oznacza 0x08: bimnarnie (00001000) - Bity[4:3]=0x01 - MVSYSCFG=0x01 (Konfiguracja z podwójnym zasilaniem. Drugie Zasilanie na pinie 15),Bity 2:0 – SUT[2:0]=0 (0ms.Czas oczekiwania po włączeniu zasilania wynosi 0 milisekundy. Po podaniu zasilania procesor "czeka" 0 ms na ustabilizowanie się napięcia.
Wybrane konfiguracje: SYSCFG1=0x17 (Pojedyncze zasilanie i czas startu 64ms).
|
| Fuse7 | CODESIZE | 0x00 |
Rozmiar kodu. Wartość domyślna podana w niniejszym opisie bezpiecznika jest wartością zaprogramowaną fabrycznie i nie wolno jej mylić z wartością resetowania.
Bity 7:0 – CODESIZE[7:0] Rozmiar sekcji kodu. To pole bitowe określa łączny rozmiar sekcji kodu rozruchowego i sekcji kodu aplikacji w blokach po 512 bajtów. Więcej szczegółów można znaleźć w sekcji „NVMCTRL – Kontroler pamięci nieulotnej”.
Uwaga: Jeśli wartość FUSE.BOOTSIZE wynosi 0x00, cała pamięć Flash stanowi sekcję kodu rozruchowego.
Ten bajt określa rozmiar i koniec sekcji Bootloadera w pamięci Flash. Co oznacza 0x00: Koniec sekcji chronionej (Application Code Section End) jest ustawiony na adres 0.Efekt: Cała pamięć Flash jest traktowana jako jedna, jednolita przestrzeń dla zwykłego programu użytkownika. Brak specjalnych blokad zapisu/odczytu sekcji.
|
| Fuse8 | BOOTSIZE | 0x00 |
Ten bajt służy do zarządzania podziałem pamięci Flash na sekcje dla kodu aplikacji.. Co oznacza 0x00: Rozmiar sekcji Boot (Boot Section End) wynosi 0.Efekt: Sekcja Bootloadera jest wyłączona. Cała pamięć Flash jest wolna i dostępna dla Twojej aplikacji od pierwszego adresu.
Wartość domyślna podana w niniejszym opisie bezpiecznika jest wartością zaprogramowaną fabrycznie i nie wolno jej mylić z wartością resetową.
Bity 7:0 – BOOTSIZE[7:0] Rozmiar sekcji rozruchowej. To pole bitowe określa rozmiar sekcji rozruchowej w blokach po 512 bajtów. Wartość 0x00 oznacza, że cała pamięć Flash stanowi sekcję kodu rozruchowego.
Więcej szczegółów można znaleźć w sekcji „NVMCTRL – Kontroler pamięci nieulotnej”.
|
Jeszcze należy wspomnieć o bitach rejestru blokady mikrokontrplera.
LOCK – Ochrona dostępu do sekcji pamięci
Urządzenie można zablokować, uniemożliwiając odczyt pamięci za pomocą interfejsu UPDI. Blokada obejmuje pamięć Flash (wszystkie sekcje kodu rozruchowego, kodu aplikacji i danych aplikacji), pamięć SRAM oraz pamięć EEPROM, w tym dane FUSE. Zapobiega to odczytowi danych aplikacji lub kodu za pomocą interfejsu debuggera. Zwykły dostęp do pamięci z poziomu aplikacji jest nadal możliwy. Urządzenie blokuje się poprzez zapisanie nieprawidłowego klucza do rejestru klucza blokady (LOCK.KEY).
Tablica -
Odblokowany dostęp do pamięci (LOCK.KEY = Prawidłowy klucz)
| Sekcja pamięci | Dostęp CPU | Dostęp UPDI |
| Odczyt | Zapis | Odczyt | Zapis |
| Flash | Tak | Tak | Tak | Tak |
| SRAM | Tak | Tak | Tak | Tak |
| EEPROM | Tak | Tak | Tak | Tak |
| SIGROW | Tak | Tak | Tak | Tak |
| USERROW | Tak | Tak | Tak | Tak |
| FUSE | Tak | Tak | Tak | Tak |
| LOCK | Tak | Tak | Tak | Tak |
| Rejestry | Tak | Tak | Tak | Tak |
Tablica -
Zablokowany dostęp do pamięci (LOCK.KEY = Nieprawidłowy klucz)
| Sekcja pamięci | Dostęp CPU | Dostęp UPDI |
| Odczyt | Zapis | Odczyt | Zapis |
| Flash | Tak | Tak | Nie | Nie |
| SRAM | Tak | Tak | Nie | Nie |
| EEPROM | Tak | Tak | Nie | Nie |
| SIGROW | Tak | Nie | Nie | Nie |
| USERROW | Tak | Tak | Nie | Tak |
| FUSE | Tak | Nie | Nie | Nie |
| LOCK | Tak | Nie | Nie | Nie |
| Rejestry | Tak | Tak | Nie | Nie |
Część z tych ustawień jest modyfikowana podczas konfiguracji i wgrywania projektów. Powinna być dostosowana dla aktualnych potrzeb i wymagań projektu.
Jakie fuse ustawić dla mojego projektu Eclipse? - opis podejrzenia jakie fusebity przewidział Eclipse.
Będziemy przedstawiać, opisywać kolejne fusebity mikrokontrolerów. Postaramy się przybliżyć użytkownikom fusebity mikrokontrolerów UPDI. W sposób prosty i przystępny dla każdego.