Szybkie linki:
 
Galeria serwisu:

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

Lock bity UPDI.

Jak działają Lock bity w UPDI?
Bity blokady (lockbity) -w nowoczesnych mikrokontrolerach AVR (np. ATtiny serii 0, 1, 2, ATmega z serii 0 czy AVR-Dx) z interfejsem UPDI, bity blokujące (Lock bits) służą do ochrony kodu przed nieautoryzowanym odczytem (zabezpieczenie przed kopiowaniem) lub nadpisaniem pamięci Flash i EEPROM. Możesz skonfigurować mikrokontroler precyzyyjnie według swoich potrzeb, ale reguła jest jedna: wewnętrzny podział i blokady pamięci konfigurujesz za pomocą bezpieczników (Fuses)

Jak działają Lock bity w mikrokontrolerach UPDI? - gdy mikrokontroler zostanie zablokowany (bity LOCK zostaną ustawione na wartość inną niż domyślny brak blokady 0xC5 – zazwyczaj blokada to 0x00) spowoduje:
1. Brak dostępu do szyny systemowej: Programator UPDI traci możliwość bezpośredniego odczytu i zapisu pamięci Flash, EEPROM oraz rejestrów wewnętrznych układu.
2. Interfejs UPDI pozwala wyłącznie na odczyt sygnatury układu (Device ID), odczyt obszaru User Row oraz wykonanie operacji kasowania pamięci.

Jak odblokować zablokowany układ? -Jedynym sposobem na ściągnięcie blokady i ponowne uzyskanie dostępu do pamięci Flash jest całkowite skasowanie pamięci układu (Chip Erase).Programator wysyła przez UPDI specjalną komendę kasowania (Chip Erase).Mikrokontroler czyści całą pamięć Flash oraz EEPROM.Po pomyślnym skasowaniu zawartości, Lock bity automatycznie wracają do stanu fabrycznego (niezablokowanego). Dzięki temu Twoja własność intelektualna jest bezpieczna – nikt nie odczyta kodu bez jego wcześniejszego bezpowrotnego zniszczenia.

Praca z Lock bitami w programach - Avrdude (np. z Arduino IDE): Blokowanie wykonuje się poprzez zapis odpowiedniego bajtu do sekcji lock, np. parametrem -U lock:w:0x00:m. Spowoduje zablokowanie dostępu do mikrokontrolera.

Czy można sprawdzić ustawienia fuse lock? - tak można pośrednio lub bezpośrednio sprawdzić, czy bity lock są ustawione, ale wynik zależy od tego, czy układ jest aktualnie zablokowany, czy nie. Sposób zachowania interfejsu UPDI w obu sytuacjach:
1. Gdy układ NIE jest zablokowany (Stan domyślny). Programator ma pełny dostęp do pamięci. Wtedy narzędzia takie jak avrdude czy pymcuprog mogą bezpośrednio odczytać dokładną wartość bajtu lock.Odczytana wartość wyniesie 0xC5 (lub 11000101 binarnie). Oznacza to brak jakichkolwiek blokad pamięci.
2. Gdy układ JEST zablokowany (Aktywna ochrona). Gdy zapisano tam inną wartość (np. 0x00), włącza się sprzętowa blokada interfejsu UPDI. Zgodnie z oficjalną dokumentacją Microchip, w tym stanie próba bezpośredniego odczytu komórki LOCKBIT oraz pamięci Flash/EEPROM zwróci losowe, niepoprawne dane lub błąd. Blokadę rozpoznaje się po zachowaniu programu. Komunikat błędu: Większość oficjalnych programatorów i środowisk (np. MPLAB X, Microchip Studio) od razu wyświetli jasny komunikat: "Device is locked". Ale brak dostępu do odczytu lub błędne odczytane dane, mogą też być objawem blokady.

LOCK działa tylko jako włącz/wyłącz? - Dlaczego tak to działa? To, co może wydawać się wadą lub brakiem elastyczności, jest w rzeczywistości celową i bardzo bezpieczną zmianą architektury, którą Microchip wprowadził w nowej generacji układów AVR (tych z UPDI). W starych mikrokontrolerach (np. ATmega328P w Arduino Uno) faktycznie mogłeś ustawiać blokady „według potrzeb” na różnych poziomach (np. zablokować tylko zapis, zostawić odczyt, zablokować tylko sekcję Bootloadera itp.).W nowych układach z UPDI działa to inaczej – ale nadal masz możliwość konfiguracji pod swoje potrzeby, tyle że realizuje się to w zupełnie innych miejscach.
Jak realizować blokady „według potrzeb” w UPDI? - jeśli potrzebujesz elastyczności (np. chcesz zabezpieczyć kod programu, ale pozwolić na wgrywanie aktualizacji przez Bootloader), nie używasz do tego bitów LOCK. Służą do tego rejestry FUSE (bezpieczniki). W nowych układach AVR z UPDI podziałem pamięci steruje się za pomocą dwóch innych rejestrów FUSE, które realizują to zadanie w zupełnie nowy sposób:
FUSE.BOOTEND (Boot End Address). Wskazuje on fizyczny adres w pamięci Flash, na którym kończy się sekcja bootloadera. Wszystko poniżej tego adresu staje się sprzętowo chronioną sekcją.
BOOT.FUSE.APPEND (Application End Address) – wskazuje adres, na którym kończy się sekcja aplikacji (kod główny), a zaczyna sekcja danych (App Data).

Warto odpowiedzieć sobie na te pytania, oraz poszukać metod, podpowiedzi i sposobów na proste ich używanie.

Będziemy podpowiadać, opisywać programy i pokazywać metody, sposoby oraz urządzenia. Postaramy się ułatwić życie zainteresowanym mikrokontrolerami i ich użyciem.
Interfejs UPDI - co to takiego?



Licznik serwisu: 14168 , Aktualnie: 1 , Admin kontakt: admin@progel.pl