Komputery Okna Internet

Opis bezpiecznika atmega8. Mikrokontrolery ATMEL. Bezpieczniki. Bezpieczniki. Podstawowe zasady dla początkujących

Co to jest BEZPIECZNIK bity? Słowa wydają się znajome, ale wiele osób tak naprawdę nie zna ich przeznaczenia, zaznaczają pola i flashują je, urządzenie działa i to jest w porządku. Chcę ci trochę opowiedzieć o tych bitach FUSE.

BEZPIECZNIK bity ( bezpieczniki) – cóż, najprościej mówiąc, konfigurują pewne parametry mikrokontrolerów, jest to swego rodzaju narzędzie do ich dostrajania.Bezpieczniki obejmują lub konfigurują takie parametry jak:
- częstotliwość generatora, generator zewnętrzny lub wewnętrzny
- zakaz odczytu oprogramowania mikrokontrolera
- włącz lub wyłącz timery
- podział częstotliwości oscylatora kwarcowego
- Zabezpieczenie EEPROOM przed skasowaniem
…i tak dalej. Każdy mikrokontroler ma swoje własne bezpieczniki, różne mikrokontrolery mają inną listę bezpieczników, na przykład ATmega8 nie ma bezpiecznika CKOUT, ale jest on obecny w ATtiny2313. Wszystkie te bezpieczniki są opisane w kartach katalogowych mikrokontrolerów.

Główny Zasadą podczas pracy z bezpiecznikami jest to, aby nie spieszyć się z ich ustawieniem, jeśli nie jesteś całkowicie pewien poprawności swoich działań.

Zapiszmy teraz nazwy niektórych bezpieczników, ich oznaczenia i na co wpływają. Ogólnie rzecz biorąc, istnieją bezpieczniki chroniące program przed kopiowaniem (bity blokady), bezpieczniki ustanawiające określone funkcje, a także tak zwane „wysokie” i „niskie” bajty. Najpopularniejszym bezpiecznikiem, który jest prawie zawsze wystawiany, jest:

CKSEL, są tylko cztery takie bezpieczniki z różnymi literami, to jest grupa CKSEL 0,CKSEL 1CKSEL 2 iCKSEL 3, określ częstotliwość generatora zegara i jego typ; impulsy zegarowe są niezbędne do działania prawie każdego mikrokontrolera. Wiele mikrokontrolerów ma wewnętrzny oscylator, ale możemy podłączyć zewnętrzny i ustawić bezpieczniki tak, aby działały z zewnętrznego oscylatora. Do pinów podłączony jest zewnętrzny rezonator kwarcowy XTAL 1 I XTAL 2 dodatkowo przylutowana jest para kondensatorów ~20pf, jeden koniec do kwarcu, drugi do minusa. Jeśli popełnisz błąd podczas instalowania tych bezpieczników, mikrokontroler można „zablokować”; w celu przywrócenia sterownika sygnał zegara jest wysyłany do nogi XTAL1; w tej chwili wynaleziono sporo schematów przywracania zablokowanych sterowników w ten sposób. Generator ten może być wykonany z niemal dowolnej logiki, a nawet timera 555.

Istnieją proste obwody wykorzystujące 1 tranzystor, parę rezystorów i rezonator kwarcowy oraz bardziej złożone, wykorzystujące chipy, takie jak K155LA3. Metody te w 100% regenerują sterowniki z taką usterką

Grupa bezpieczników SUT1 I SUT0- bity bezpiecznikowe, które kontrolują tryb uruchamiania generatorów zegara MK, a także ustawiają prędkość początkową MK po włączeniu zasilania. Związane z bezpiecznikami CKSEL, mianowicie CKSEL0.

KOPT- bit, określa działanie wbudowanego oscylatora do pracy z rezonatorami kwarcowymi, ustawia „amplitudę” oscylacji sygnału zegarowego na kwarcu. Bit ten jest programowany dość często.

RSTDISBL– bardzo niebezpieczny bezpiecznik, nieprawidłowe ustawienie może spowodować wyłączenie wyjścia REZAT, po czym zniknie możliwość programowania programatora ISP. Fragment RSTDISBL włącza wyjście RESETOWANIE do portu we/wy.

SPIEN– bezpiecznik umożliwiający pracę MK poprzez interfejs SPI. Wszystkie mikrokontrolery są wydawane z już zainstalowanym bitem SPIEN. Uważana za niebezpieczną fuzję.

EESAVE- Wygodny do odczytania jako EEPROOM SAVE, dosłownie oznacza „zapisz EEPROOM”, ten bezpiecznik chroni EEPROM przed skasowaniem. Na przykład przy kolejnym przesyłaniu oprogramowania sprzętowego do sterownika można ustawić EESZAPIS = 0, a podczas kasowania MK EEPROOM pozostanie nietknięty.

BOOTSZ, składa się z grupy bitów BOOTSZ1 I BOOTSZ0, określ rozmiar obszaru pamięci nagranych programów, powiązanego z bitem BOOTRST.

BOOTRST, określa adres, od którego rozpocznie się wykonywanie programu. Jeśli bit jest ustawiony, tj. Jeśli BOOTRST=0, wówczas program uruchomi się z adresu obszaru modułu ładującego.

BODEN- bit, który po ustawieniu ( BODEN=0), będzie kontrolować napięcie zasilania; przy bardzo niskich napięciach mikrokontroler może zostać ponownie uruchomiony, ulec awarii itd. Związany z BODLEVEL.

BODLEVEL. - określa moment zadziałania czujnika poziomu napięcia zasilania, gdy napięcie zasilania spadnie poniżej tego poziomu, sterownik wykona „restart”.

SAMOPRGEN- bit pozwalający ( SAMOPRGEN=0) lub zabrania ( SAMOPRGEN =1) program zapisuje do pamięci.

OKDEN– bezpiecznik ten umożliwia lub uniemożliwia odczyt programu z pamięci sterownika.

Wspominałem kiedyś w swoich artykułach, że w niektórych programach bezpieczniki są ustawione lustrzanie. Pamiętać zaprogramowany bezpiecznik=0 , A Nie zaprogramowany=1 . W programach Konstruktor algorytmów, UniProf bezpieczniki ustawia się w jeden sposób i programowo PonyProg,CodeVisionAVR, AVR Studio, SinaProg i niektórych innych, bezpieczniki trzeba ustawić lustrzanie w stosunku do poprzedniej listy programów.

Od dłuższego czasu w Internecie pojawiają się tzw. „kalkulatory bezpieczników”, czyli specjalne aplikacje, które mają pomóc w konfiguracji mikrokontrolera. Aplikacja jest intuicyjna, myślę, że się o tym przekonasz, na liście sterowników wybieramy potrzebny nam MK, następnie wybieramy niezbędne funkcje, a poniżej zaznaczone są skrzynki z bezpiecznikami, wszystko jest bardzo proste.

Aplikacje te są bardzo wygodne, ponieważ... np. ostatnio bardzo często autorzy swoich projektów piszą wartości bezpieczników niezrozumiałymi literami lub cyframi, albo słowami, których początkujący nie rozumie, co to oznacza i jakie bezpieczniki należy ustawić (często można znaleźć komentarz na temat artykuł „Jakie bezpieczniki ustawić?”). Kalkulator bezpieczników bardzo nam w tym pomaga.

Myślę, że teraz, jeśli zostaniesz zapytany „co to są bezpieczniki i do czego są potrzebne?”, będziesz w stanie wyjaśnić osobie, do czego służą, ale na razie to wszystko!

W poprzednich artykułach radziłem nie ingerować w te fragmenty. I były ku temu powody, gdyż ustawiając te bity nieprawidłowo, można trwale zablokować sterownik do dalszego flashowania lub w ogóle do jakiegokolwiek użycia.

Ale bez znajomości tej funkcji kontrolera daleko nie zajedziesz. Więc napiszę wszystko po kolei. Różne wersje sterowników mają różną ilość BEZPIECZNIKÓW, niektórych może brakować, ale tych głównych zawsze jest. Przejdźmy przez nie.

Bity konfiguracyjne znajdują się w specjalnym obszarze pamięci i można je zmienić jedynie za pomocą programatora podczas pisania sterownika. Jest starszy bajt i niższy bajt. Młodszy bajt jest zwykle odpowiedzialny za częstotliwość, a starszy bajt za wszelkiego rodzaju bombki.

A więc najważniejsze:

Atmel AVR przyjmuje następującą notację: reset bitu bezpiecznika do zera jest uważany za aktywny, tj. dołączony.

Przykład Bit RSTDSBL, jak sama nazwa wskazuje, to RESET DISABLE. Jeśli włączysz tę opcję, noga RESET zmieni się w port I/O, ale w tym przypadku stracisz możliwość aktualizacji kontrolera przez ISP.

Aby więc wyłączyć RESET (i dostać duży błąd w oprogramowaniu w zamian za małą wskazówkę w postaci dodatkowej nogi), należy do tego bitu wpisać 0.

Z jednej strony jest to nielogiczne i krzywe. To tak, jakby na całym świecie akceptowano zapis, że zero jest wyłączone, ale tutaj, no wiesz, jest odwrotnie. Z drugiej strony to jest ich kontroler i robią co chcą. Zapamiętaj to raz i tyle. Ogólnie rzecz biorąc, w elektronice często przyjmują zero jako sygnał.


Jednakże sterowniki są tworzone przez inżynierów elektroników, a oprogramowanie sprzętowe jest tworzone przez programistów. Jakie to logiczne. I tak ci programiści poszli i narobili piekielnego bałaganu z polami wyboru. Czy powinni raz na zawsze zaakceptować jako standard, że znacznik wyboru wynosi 1, a nie WŁĄCZONY (który, przypominam, wynosi zero). Dlatego w niektórych programach do flashowania znacznik wyboru oznacza, że ​​opcja jest włączona (w FUSE bit jest zapisywany jako 0), w innych, zwykle pisanych przez inżynierów elektroników, znacznik wyboru oznacza jeden. Te. dokładnie odwrotnie.

Co się stanie, jeśli to zmieszasz? I będzie BARDZO źle. Sterownik przejdzie w niewłaściwy tryb i może zostać trwale zablokowany. Te. Raz o to poprosiłem i tyle. Przybył.

Nie, możesz go zapisać, ale do tego potrzebne będą dodatkowe sztuczki w postaci programatora wysokiego napięcia, adaptera JTAG lub generatora zegara. Wszystko zależy od tego w jaki tryb wprowadzisz kontroler z nieprawidłowymi ustawieniami.

Początkującemu zwykle łatwiej jest kupić nowego MK, niż ożywić zablokowanego. Ale nie spiesz się, aby wyrzucić go do kosza. Zaznacz to i odłóż na przyszłość, rozpracujesz to i ożywisz.

Konfiguracja zegara
Domyślnie wszystkie kontrolery AVR (z wyjątkiem starszych serii AT90S2313, AT90S8535 itp.) są skonfigurowane do pracy z wewnętrznego źródła zegara. Te. Wystarczy, że zasilisz je i zaczną działać. Nic więcej nie jest potrzebne.

Bity odpowiadają za źródło zegara CKSEL
Ustawiając je prawidłowo, można wybrać częstotliwość sterownika, a także źródło sygnału zegara.

  • CKSEL3…0 = 0000 — Zewnętrzne źródło sygnału.

Te. Na wejście XTAL1 podawane są impulsy prostokątne. Czasami dzieje się tak w układach synchronicznych, gdy z jednego generatora pracuje kilka sterowników.

Dygresja techniczna
Często wchodzą w ten tryb, gdy próbują ustawić sterownik na pracę z zewnętrznego kwarcu (CKSEL=1111), ale albo mylą zapis, albo przez żart z odwrotnym zapisem bitów we wszelkiego rodzaju wypaczonych programach flashujących . Kiedyś kryształ został zablokowany. Ale w rzeczywistości niemożliwe jest szczelne zablokowanie kryształu za pomocą CKSEL. Zwykle wszystko rozwiązuje się poprzez lutowanie kwarcu i zaczynanie od tego kwarcu. Najgorsze, co może się zdarzyć, to konieczność zastosowania zewnętrznego generatora zegara. Co ożywiłoby kryształ. Robi się to w pięć minut z dowolnego układu logicznego TTL, na przykład z K155LA3 - w Internecie jest mnóstwo układów. Albo na timerze 555, albo możesz wziąć drugiego MK i napisać na nim prosty program, który szarpie nogę. A jeśli masz oscyloskop, możesz uzyskać z niego sygnał generatora sterującego - jego zacisk powinien znajdować się na dowolnym oscylatorze. Masa oscylowała w stosunku do masy sterownika, a wyjście generatora do XTAL1.

Co jednak zrobić, gdy swędzenie jest nie do zniesienia, sterownik jest zablokowany, a pod ręką nie ma chipa do reanimacji? Czasami sprawdza się tu metoda palca. Zabawne jest to, że bardzo fajne celowanie o częstotliwości około 50 Hz jest skierowane na ludzkie ciało. Każdy, kto chwycił sondę oscyloskopu rękami, pamięta, jakie bzdury natychmiast pojawiają się na ekranie - to jest to! Dlaczego nie wykorzystać tych wskazówek jako sygnału zegarowego? Czyli lutujesz przewód do pinu XTAL1, chwytasz go ręką i naciskasz czytaj lub zapisuj kontroler :) Od razu ostrzegam, metoda działa jak cholera, nie pierwszy raz, zajmuje to dużo czasu do odczytania i czasami z błędami, ale przepisanie bitów FUSE na właściwą stronę powinno zająć trochę czasu. Udało mi się ten trik kilka razy.

CKSEL3…0 = 0100 – 8 MHz z wewnętrznego oscylatora (zwykle są to wartości domyślne)
W przypadku większości amplitunerów AVR ta konfiguracja CKSEL oznacza taktowanie z wewnętrznego oscylatora przy częstotliwości 8 MHz, ale mogą występować różnice. W tym przypadku dokładnie zapoznaj się z arkuszem danych. Do płytki z trybami pracy wewnętrznie skalibrowanego oscylatora RC

Czasami trzeba mieć np. zewnętrzny generator zegara, żeby można było go regulować bez ingerencji w firmware. Aby to zrobić, możesz podłączyć łańcuch RC, jak pokazano na schemacie, i obliczyć częstotliwość za pomocą wzoru f = 1/3RC, gdzie f będzie częstotliwością w hercach, a R i C, odpowiednio, rezystancją rezystora i pojemnością kondensatora w omach i faradach.

  • CKSEL3…0 = 0101 – dla częstotliwości poniżej 0,9 MHz
  • CKSEL3…0 = 0110 – od 0,9 do 3 MHz
  • CKSEL3…0 = 0111 – od 3 do 8 MHz
  • CKSEL3…0 = 1000 – od 8 do 12 MHz

Ta tabliczka jest ważna tylko dla ATmega16; inne MK mogą się różnić. Sprawdź szczegóły w arkuszu danych!

Problemem wewnętrznego oscylatora i zewnętrznych obwodów RC jest zwykle niestabilność częstotliwości, co oznacza, że ​​​​jeśli zrobisz na nim zegar, będzie on kłamał, niewiele, ale będzie. Dlatego czasami warto uruchomić sterownik na kwarcu, dodatkowo tylko na kwarcu można uzyskać maksymalną częstotliwość, a co za tym idzie wydajność procesora.

  • CKSEL3…0 = 1001 – kwarc „zegarowy” niskiej częstotliwości.

Kilkadziesiąt kiloherców.
Stosowany w zastosowaniach o niskiej prędkości, zwłaszcza gdy wymagana jest precyzyjna praca i niskie zużycie energii.

W przypadku zwykłego kwarcu sytuacja jest nieco inna. Tutaj maksymalna częstotliwość kwarcu zależy również od bitu KOPT gdy CKOPT = 1 to:

  • CKSEL3…0 = 1010 lub 1011 - od 0,4 do 0,9 MHz
  • CKSEL3…0 = 1100 lub 1101 - od 0,9 do 3 MHz
  • CKSEL3…0 = 1110 lub 1111 – od 3 do 8 MHz (lub od 1 do 16 MHz przy CKOPT=0)

I jeśli KOPT jest równa 0, to przy tych samych wartościach CKSEL można ustawić kwarc od 1 do 16 MHz.

Oczywiście kwarc 16 MHz można zainstalować tylko na Mega bez indeksu „L”. (Chociaż, jak pokazuje praktyka, Lku można też całkiem dobrze podkręcić. Mój ATMega8535L pracował na 16 MHz, ale w operacji były dziwne efekty. Dlatego nie wypaczyłem tego tak bardzo i usunąłem podkręcanie). Ponownie, wszystko powyższe dokładnie odpowiada tylko Mega 16, inne mogą się nieznacznie różnić.

Fragment KOPT określa zmianę sygnału zegara. Te. amplituda oscylacji na wyjściu z kwarcu. Gdy CKOPT = 1 zasięg jest mały, dzięki temu osiąga się mniejsze zużycie energii, ale zmniejsza się odporność na zakłócenia, zwłaszcza przy dużych prędkościach (a maksimum, sądząc po powyższej tabeli, w ogóle nie da się osiągnąć. Więcej dokładnie, może się uruchomić, ale nikt nie daje wiarygodnych gwarancji). Ale jeśli CKOPT jest aktywowany i zapisane jest w nim 0, wówczas zmiana sygnału natychmiast zmieni się z 0 na moc. Zwiększy to pobór mocy, ale zwiększy odporność na zakłócenia, a co za tym idzie, maksymalną prędkość. Podczas podkręcania MK jeszcze bardziej konieczne jest ustawienie CKOPT na 0.

Warto również wspomnieć o bicie SCKDIV8, którego nie ma w Atmega16, ale często można go znaleźć w innych kontrolerach AVR. To jest dzielnik zegara. Kiedy jest zainstalowany, tj. na zero, wówczas częstotliwość ustalona w bitach CKSEL0...3 jest dzielona przez 8, na czym kiedyś Dlinny utknął, długo próbując zrozumieć, dlaczego to u niego nie działa. Piękno polega na tym, że ten dzielnik można programowo wyłączyć, zapisując żądany współczynnik podziału, na przykład jeden, do rejestru CLKPR. Cały żart polega na tym, że SCKDIV8 jest domyślnie aktywny! Więc uważaj!

Bity SUT ustaw prędkość początkową MK po usunięciu RESET lub włączeniu zasilania. Wartość ta waha się od 4 ms do 65 ms. W całej swojej praktyce nie miałem jeszcze okazji skorzystać z tej opcji – nie ma takiej potrzeby. Ustawiłem więc go na maksymalnie 65 ms - będzie bardziej niezawodny.

Fragment RSTDISBL zdolny zawrócić linię Resetowanie w jedną z nóżek portu, co czasami jest bardzo potrzebne, gdy jakiś malutki Tiny nie ma dość nóg do wszystkich zadań, ale musimy pamiętać, że jeśli wyłączymy Reset, możliwość flashowania kontrolera za pomocą pięciu przewodów automatycznie odpadnie. A do ponownego okablowania potrzebny będzie programator równoległy wysokiego napięcia, który kosztuje kilka tysięcy i jest problematyczny do wykonania na kolanach, chociaż jest to możliwe.

Drugi kawałek zapodlyansky jest SPIEN Jeśli ustawisz go na 1, natychmiast stracisz także możliwość flashowania prostą ścieżką i znowu będziesz potrzebować programatora równoległego. Pocieszające jest jednak to, że nie da się go zresetować przez SPI, przynajmniej w nowych AVR-ach (w starych, w AT90S*** było to możliwe)

WDTON jest odpowiedzialny za Dog Timer, znany również jako Watch Dog. Ten licznik czasu powoduje ponowne uruchomienie procesora, jeśli nie jest on okresowo resetowany, co zapobiega zawieszaniu się. Jeśli WDTON jest ustawione na 0, to psa w ogóle nie da się wyłączyć.

BODLEVEL I BODEN- Jest to tryb kontroli napięcia. Faktem jest, że przy pewnym progu napięcia, poniżej poziomu krytycznego, sterownik może zacząć działać bardzo nieprawidłowo. Może samoistnie uszkodzić np. pamięć EEPROM lub coś innego. No i co myślisz, że jeśli nie będę cię karmić przez kilka tygodni, to też zaczniesz mieć problemy :)

Aby rozwiązać ten problem, amplituner AVR ma wbudowany moduł nadzoru mocy. Dba o to, aby napięcie nie spadło poniżej odpowiedniego poziomu. A jeśli nie ma wystarczającego napięcia, po prostu naciska RESET i nie pozwala na uruchomienie sterownika. Te dwa bezpieczniki odpowiadają za tę funkcję. BODEN zawiera i BODLEVEL pozwala wybrać jeden z dwóch poziomów krytycznych. Który? Nie zdradzę tego, zajrzyj do arkusza danych (sekcja Kontrola systemu i resetowanie).

JTAGEN— Włącz JTAG. Domyślnie aktywny. Te. Włączony JTAG. Z tego powodu MEGA16 (a także 32 i inne posiadające JTAG) nie mogą używać pinów portu C odpowiedzialnych za JTAG. Można jednak podłączyć debuger JTAG i za jego pomocą dostać się do mózgu kontrolera.

EESAVE— Ochrona EEPROM przed skasowaniem. Jeśli włączysz to, to po całkowitym zresetowaniu MK strefa EEPROM nie zostanie usunięta. Przydatne, jeśli podczas pracy zapisywane są jakieś cenne dane do EEPROM.

BOOTRST— przeniesienie wektora startowego do obszaru bootloadera. Jeśli to pole wyboru jest zaznaczone, MK nie zaczyna od adresu 00000, ale od adresu sektora rozruchowego i najpierw uruchamia program ładujący. Więcej szczegółów na ten temat napisano w artykule o oprogramowaniu poprzez moduł ładujący.

BUTYSZ0..1— grupa bitów określająca rozmiar sektora rozruchowego. Więcej szczegółów znajdziesz w arkuszu danych. Różnią się one w zależności od kontrolera.

Zablokuj bity
To w rzeczywistości nie ma nic wspólnego z bezpiecznikami. To są elementy bezpieczeństwa. Ustawienie tych bitów uniemożliwia odczyt z kryształu. Albo flash, albo EEPROM, albo oba na raz. Konieczne tylko w przypadku sprzedaży urządzeń. Aby źli konkurenci nie wyciekli oprogramowania sprzętowego i nie zamówili z Chin ponad 9 000 klonów Twojego urządzenia, zostawiając Cię bez spodni. Nie stanowią żadnego zagrożenia. Jeśli zablokujesz nimi kryształ, wykonaj całkowite kasowanie i nie będzie problemu.

Cechą charakterystyczną zainstalowanych bitów blokujących jest to, że firmware jest czytelny - w nim bajty są w porządku. Te. 00,01, 02, 03, 04...FF, 00... Widziałeś takie badziewie? Więc kradzież oprogramowania sprzętowego nie jest Twoim przeznaczeniem - jest chronione =)

Środki ostrożności
A główna zasada podczas pracy z bitami FUSE to UWAGA, UWAGA i jeszcze raz UWAGA! Nigdy nie ustawiaj FUSE bez sprawdzenia arkusza danych, nawet jeśli skopiujesz go z zaufanego źródła.

Pamiętaj, aby zrozumieć, co oznacza znacznik wyboru w programie do flashowania. Zero lub jeden. Włączone lub wyłączone! Nie ma normy!!!

Jeżeli bity fuzz są określone przez dwie liczby - bit najbardziej znaczący i najmniej znaczący, to ustawia się je jak w arkuszu danych. Gdzie 0 jest włączone.

Druga, żelazna zasada pracy z FUSE. Zapamiętajcie to na zawsze i nie mówcie, że nie uczyłem.

NAJPIERW CZYTAMY TE, KTÓRE POSIADAMY, A PÓŹNIEJ PISZEMY TE, KTÓRE POTRZEBUJEMY

Czytaj – Modyfikuj – Zapisuj. Jedyny sposób. Dlaczego? Tak, po prostu często dzieje się tak: otworzyłem zakładkę FUSE, ale programista był głupi i ich nie policzył. W rezultacie wszędzie masz puste komórki. Zadowolony, ustawiłem tylko te, które potrzebujesz SKSEL, a następnie wcisnąłem WRITE. Zwykle tu przychodzi facet. Ponieważ Do kontrolera zapisywane są nie tylko te, które zmienisz, ale cała sekcja. Z tymi samymi pustymi komórkami. Wyobraź sobie, jaki będzie tam bałagan. Ta sama rzecz! A potem biegają, żeby narzekać w komentarzach i na forach, mówiąc, że niczego takiego nie dotknąłem - po prostu tam jest. Tak, właśnie teraz!

Zatem jeszcze raz – czytaj, modyfikuj, pisz!

Wskazówka:
Jak na pierwszy rzut oka określić, jakiego typu (bezpośrednie lub odwrotne) bity bezpieczników znajdują się w nieznanym programie do flashowania?
Metoda dedukcyjna: Naciśnij czytaj bezpieczniki i spójrz na stan bitu SPIEN.Bit ten jest zawsze aktywny i jeśli zostanie zresetowany, programista nie będzie w stanie nawet wykryć sterownika. Jeśli SPIEN wynosi 1, to bezpieczniki są odwrotne, jak w PonyProg. Jeśli zero, oznacza to zgodnie z notacją Atmela.

Ustawianie bitów Fuse i Lock (bitów konfiguracyjnych i blokujących) mikrokontrolerów (MCU) rodziny AVR, szczególnie dla początkujących, jest dość trudnym zadaniem i często może powodować zamieszanie podczas konfigurowania i programowania MCU. Jeśli trochę przeoczyłeś lub ustawiłeś nieprawidłowo, może to prowadzić do nieprawidłowego działania programu lub, co gorsza, do braku możliwości zaprogramowania obwodu MK przez interfejs szeregowy.

Pomimo tego, że dokumentacja techniczna każdego MK zawiera wyczerpujące informacje na temat bitów Fuse i Lock, początkujący często czują się niepewnie przed wykonaniem polecenia zapisania bitów konfiguracyjnych i blokujących. W artykule przyjrzymy się głównym cechom bitów konfiguracyjnych rodziny AVR MK.

Bity bezpiecznikowe i blokujące

Zanim przejdziemy do szczegółów bitów konfiguracyjnych, należy zrozumieć i zapamiętać jedną rzecz:

  • Bit bezpiecznika = 1, oznacza, że ​​jest niezaprogramowany (wyczyszczony, nieaktywny);
  • Bit bezpiecznika = 0 oznacza, że ​​jest zaprogramowany (ustawiony, aktywny).

Jest to jedno z głównych źródeł nieporozumień podczas programowania bitów Fuse i Lock. Przyzwyczailiśmy się myśleć, że ustawienie wartości parametru oznacza wpisanie 1, prawda? W przypadku bitów AVR Fuse jest odwrotnie, ustawienie dowolnego bitu oznacza zapis 0 i należy o tym pamiętać.

Bity konfiguracyjne znajdują się w wydzielonym obszarze pamięci nieulotnej. Na przykład MK ma cztery bajty konfiguracyjne, które należy zaprogramować, aby zapewnić prawidłowe działanie. Jeden z tych bajtów zawiera bity blokady, pozostałe trzy (często nazywane wysokim, niskim i rozszerzonym) zawierają bity konfiguracyjne. Ten zestaw bitów określa początkowe ustawienia MCU: źródło zegara, obszar bootloadera, operację resetowania sprzętu, licznik czasu watchdoga itp. Najpierw przyjrzymy się bitom blokady (rysunek 1).

W zależności od typu mikrokontrolera AVR liczba bitów blokady może się różnić, ale zawsze obecne są dwa najmniej znaczące bity. Bity LB1 i LB2 służą do blokowania dostępu do wbudowanej pamięci Flash. Prawdopodobnie wiesz, że twórcy wszelkich urządzeń prawie zawsze blokują odczyt oprogramowania MK, aby chronić swoją własność intelektualną i zapobiegać tworzeniu duplikatów i podróbek. Odczyt zablokowanego mikrokontrolera jest jak cukierek dla hakerów sprzętowych, ale to inny temat. Jeśli więc chcesz zabezpieczyć swoje oprogramowanie przed kopiowaniem, musisz zablokować zawartość pamięci mikrokontrolera, w przeciwnym razie pozostaw bity bez zmian. Inne bity blokujące ( BLB01, BLB02, BLB11 i BLB11 ) można wykorzystać do zablokowania zapisu/odczytu do/z pamięci Flash, zarówno z obszaru aplikacji, jak i z sekcji bootloadera. Bity zamka są programowane rzadko (w zależności od specyfiki aplikacji), nie będziemy się na nich skupiać. Nawet jeśli zaprogramujesz którykolwiek z nich, bity blokady zostaną zresetowane (ustawione na 1) podczas polecenia Chip Erase.

Najbardziej interesują nas bity konfiguracyjne; będziesz musiał mieć z nimi do czynienia bardzo często, czy ci się to podoba, czy nie. Położenie niektórych bitów Fuse w trzech bajtach konfiguracyjnych różni się w zależności od użytego MCU. Rozważymy na przykład ATmega328P, który ma trzy bajty konfiguracyjne (rysunek 2).

Rysunek 2. Skład bajtów konfiguracyjnych i wartości początkowych bitów Fuse mikrokontrolera ATmega328P.

Spójrz na skład młodszego bajtu. Widzisz grupę 4 identycznych bitów CKSEL0, CKSEL1, CKSEL2, CKSEL3 . Służą do wyboru typu źródła zegara dla mikrokontrolera MK. Domyślnie (ustawienia fabryczne) mikrokontroler jest skonfigurowany do pracy z wewnętrznym oscylatorem RC 8 MHz. Logicznie rzecz biorąc, jest to najbezpieczniejsza opcja pracy z mikrokontrolerem. Ale, jak wiadomo, urządzenia z rodziny AVR mogą działać z różnych źródeł częstotliwości zegara:

  • skalibrowany wewnętrzny oscylator RC (domyślnie 8 MHz);
  • zewnętrzny oscylator RC;
  • zewnętrzny rezonator ceramiczny lub kwarcowy;
  • zewnętrzny kwarc niskiej częstotliwości;
  • zewnętrzne źródło zegara.

Dla każdego z przedstawionych trybów taktowania dostępny jest zakres ustawień bitu Fuse CKSEL0..3 , które służą do sterowania częstotliwością generatora zegara i czasem powrotu mikrokontrolera do trybu pracy z trybu niskiego poboru mocy. Bity te są ściśle powiązane z bitami SUT0 i SUT1 , które faktycznie kontrolują czas uruchamiania mikrokontrolera po włączeniu zasilania. Opóźnienie wyzwalania jest konieczne, aby ustabilizować generowanie rezonatorów ceramicznych i kryształów. Dokładne wartości czasu potrzebnego mikrokontrolerowi do osiągnięcia trybu pracy podane są w dokumentacji technicznej.

Bit konfiguracji WYCOFANIE zezwala/zabrania wyprowadzania częstotliwości zegara na jeden z pinów MK; dla ATmega328P do pinu PORTB0 (do taktowania innych urządzeń), niezależnie od tego, jakie źródło zegara MK jest używane. Jeśli bit jest zaprogramowany, podstawowe i alternatywne funkcje portu PB0 nie są dostępne dla aplikacji użytkownika.

Ostatni bit w młodszym bajcie to CKDIV8 . Domyślnie ten bit jest ustawiony, co oznacza, że ​​​​do wewnętrznego oscylatora RC podłączony jest dzielnik częstotliwości 8 MHz o współczynniku 8, więc częstotliwość zegara systemowego MK w tym przypadku będzie równa 1 MHz. Jeśli potrzebujesz częstotliwości zegara 8 MHz, bit CKDIV8 trzeba zresetować.

Teraz skupmy się na bajcie konfiguracyjnym wyższego rzędu.

Pierwszy kawałek jest BOOTRST , które jest domyślnie wyczyszczone. Jeśli ten bit jest ustawiony, to po włączeniu zasilania mikrokontrolera lub po zresetowaniu mikrokontroler rozpocznie wykonywanie programu z sektora rozruchowego. Mówiąc najprościej, jeśli aplikacja wymaga funkcji bootloadera z pamięci Flash, to ten bit należy zaprogramować. Jeśli potrzebujesz tylko zaprogramować mikrokontroler poprzez interfejs w obwodzie, możesz pozostawić ten element nietknięty.

Podczas korzystania z bootloadera bity stają się ważne BOOTSZ0 i BOOTSZ1 . Definiują obszar pamięci Flash dla programu ładującego. Jeśli kod bootloadera Twojej aplikacji jest mały, możesz użyć bitów konfiguracyjnych, aby przydzielić mniejszy obszar pamięci Flash dla bootloadera, a resztę pozostawić aplikacji.

Następny kawałek EESAVE . Jeśli zaprogramowano (0), zawartość nieulotnej pamięci danych EEPROM pozostanie nienaruszona podczas procedury kasowania chipa. W większości przypadków jest to przydatna funkcja, na przykład gdy EEPROM przechowuje ważne dane lub parametry kalibracji i wymaga aktualizacji oprogramowania sprzętowego, a następnie zaprogramuj bit przed wymianą oprogramowania sprzętowego EESAVE .

Po ustawieniu bitu WDTON Zegar watchdog mikrokontrolera włącza się natychmiast po włączeniu zasilania i nie można go wyłączyć programowo. W takim przypadku timer watchdog będzie stale wykonywał swoją funkcję okresowego resetowania mikrokontrolera, chyba że w kodzie programu zostanie wykonane specjalne polecenie resetowania timera watchdoga. Jeśli trochę WDTON nie jest zainstalowany, licznik czasu watchdog jest włączany/wyłączany przez oprogramowanie.

Fragment SPIEN zaprojektowany w celu wyłączenia szeregowego interfejsu programowania mikrokontrolera. Tak naprawdę nie można zmienić stanu tego bitu za pomocą interfejsu szeregowego (mikrokontrolery AVR obsługują jeszcze dwa tryby programowania równoległego), ale znane są przypadki zmiany stanu bitu SPIEN w przypadku nieprawidłowej obsługi lub awarii programatora wbudowanego.

Podobna sytuacja z bitem RSTDSBL - służy do wyłączania funkcji resetowania sprzętowego, innymi słowy, pin resetowania MK jest używany jako port I/O. W niektórych sytuacjach (MCU z małą liczbą linii we/wy) jest to bardzo wygodne, ale ogólnie nie jest zalecane. Nieprawidłowe ustawienie bitów RSTDSBL może pozbawić Cię możliwości programowania mikrokontrolera poprzez SPI, ponieważ obecność sygnału resetowania jest warunkiem wstępnym włączenia trybu programowania.

Fragment DWEN używany do włączania specjalnego interfejsu debugowania DebugWire dla mikrokontrolerów AVR. Zmień stan bitu SPIEN, RSTDSBL i DWEN poprzez interfejs szeregowy nie jest możliwe; będzie to wymagało programatora równoległego z obsługą trybu programowania wysokonapięciowego lub połączenia poprzez interfejs DebugWire.

Kolejna rzecz, na którą warto zwrócić uwagę KOPT w starszym bajcie konfiguracji ( nie ma go w ATmega328P, ale jest obecny w innych AVR MK), steruje trybem pracy wzmacniacza generatora zegara. Jeśli bit jest zaprogramowany (0), wówczas sygnał wyjściowy generatora zegara ma wahanie (amplitudę) równą napięciu zasilania. Opcję tę można zastosować w sytuacji, gdy mikrokontroler będzie pracował w środowisku o dużym poziomie szumów, a także wtedy, gdy planowane jest podłączenie kolejnego mikrokontrolera do pinu XTAL2. W pozostałych przypadkach tryb ten należy wyłączyć ( CKOPT=1 ), ponieważ wzrasta zużycie energii przez mikrokontroler, co nie jest mile widziane w urządzeniach zasilanych bateryjnie.

Ostatni bajt konfiguracji (rozszerzony). Dla mikrokontrolera Atmega328P zawiera on trzy bity: BODLEVEL0, BODLEVEL1, BODLEVEL2 . Bity te mają za zadanie ustawić próg dla obwodu detektora napięcia zasilania: gdy napięcie zasilania osiągnie ustawiony poziom, mikrokontroler zostanie zresetowany.

Kalkulator wartości bitów bezpiecznika

Kiedy musisz zaprogramować nowy MK, możesz skorzystać z opisu technicznego mikrokontrolera, aby ustawić bity Fuse. Istnieje jednak wygodniejszy i prostszy sposób — kalkulator Fuse-bit — narzędzie internetowe opracowane przez Marka Hammerlinga (rysunek 3). Niezależnie wybierasz typ mikrokontrolera i włączasz/wyłączasz niezbędne opcje, a konfiguracja bitu Fuse zostanie zaktualizowana automatycznie.

Dodatkowo można indywidualnie ustawić bity Fuse w osobnej formie, konfiguracyjne wartości bajtów dolnych, górnych i rozszerzonych również zostaną zaktualizowane automatycznie (Rysunek 4), podczas gdy polecenia będą generowane dla programisty AVRDude.

Jeżeli posiadasz telefon komórkowy lub tablet z systemem Android możesz skorzystać z bezpłatnej aplikacji AVR Fuse Calculator, która realizuje te same funkcje i generuje polecenia dla programisty AVRDude. Baza danych programu zawiera 144 AVR MK.

Podstawowe zasady dla początkujących:

  • Nigdy nie zmieniaj stanu bitów DWEN, SPIEN i RSTDSBL. Tak naprawdę nie ma do nich dostępu poprzez szeregowy interfejs programowania;
  • Sprawdź dokładnie bity CKSEL. Nieprawidłowe ustawienie typu zegara powoduje wiele problemów;
  • Jeśli nie produkujesz produktów komercyjnych, nie zmieniaj stanu bitów blokujących;
  • Jeśli nie masz pewności co do prawidłowego ustawienia bitów Fuse, lepiej zapoznać się z dokumentacją techniczną lub zadać pytanie specjalistom na forum.

Opublikowano 16.07.2012

Bezpieczniki to kilka specjalnych bajtów, które można jedynie flashować i odpowiadają za różne ustawienia mikrokontrolera. Bezpieczniki mogą się różnić dla różnych mikrokontrolerów. Dlatego zapoznaj się z dokumentacją, aby uzyskać bardziej szczegółowe informacje. Ponieważ jest to zrobione na końcu, podam tutaj krótki opis bezpieczników i wymienię najczęstsze błędy podczas pracy z bezpiecznikami.

Chciałbym zauważyć, że bit ustawiony na 0 jest uważany za ustawiony. Dla początkujących często powoduje to zamieszanie podczas pracy z różnymi programami do oprogramowania układowego.
Ponieważ znacznik wyboru obok bezpiecznika nie zawsze wskazuje wyraźnie 1 lub 0 (w sensie ustawienia). Twórcy oprogramowania mieli na myśli, że jeśli jest znacznik wyboru, bit uważa się za ustawiony (tj. =0).

Rodzina
ATtiny
Rodzina
ATmega
2313 25 /
45/
85
13 26 261 /
461/
861
8 16 48 /
88/
168
128 169 329 8515 8535

SKRYTY
M103С+ S8515СS8535С
OKDEN + + + +
JTAGEN + + + +

SAMOPRGEN
+ + + + +
DWEN+ + + + + +

EESAVE
+ + + + + + + + + + + + +

SPIEN
+ + + + + + + + + + + + +

WDTON
+ + + + + + + + + + +

BODLEVEL2
+ + + + +

BODLEVEL1
+ + + + + + +

BODLEVEL0
+ + + BZT
POZIOM
+ BZT
POZIOM
BZT
POZIOM
+ BZT
POZIOM
+ + BZT
POZIOM
BZT
POZIOM

BODEN
+ + + + + +
RSTDISBL+ + + + + + + +

CKDIV8
+ + + + + + +

WYCOFANIE
+ + + + + +
SUT1+ + + + + + + + + + + + +
SUT0+ + + + + + + + + + + + +
KOPT + + + + + +
CKSEL3+ + + + + + + + + + + +
CKSEL2+ + + + + + + + + + + +
CKSEL1+ + + + + + + + + + + + +
CKSEL0+ + + + + + + + + + + + +

PLLCK
+
BOOTRST + + + + + + + +

BOOTSZ1
+ + + + + + + +

BOOTSZ0
+ + + + + + + +

Na stole bezpiecznik- kawałki popularne AVR. Tytuły po lewej stronie bezpiecznik-bity zgodnie z datasheetem, w pierwszych dwóch wierszach wyszczególnione są rodziny i typy konkretnych MK, a na przecięciu wierszy i kolumn znajduje się znak plus , jeśli został podany bezpiecznik-bit jest obecny w tym MK lub określony Nazwa , inny niż standardowy. Jeśli brakuje jakiegoś bitu, w odpowiedniej komórce nie ma nic. Cel każdego bitu bezpiecznika AVR: SKRYTY- ten bit jest zarezerwowany przez firmę do celów nieznanych zwykłym śmiertelnikom Atmela. W żadnym wypadku nie zaleca się zmiany jego stanu (tj. należy pozostawić go w takim stanie, w jakim był montowany podczas produkcji MK). W tej linii
Istnieją bity o różnych nazwach, z reguły są to bity umożliwiające tryb zgodności z przestarzałymi typami mikrokontrolerów, które zostały zastąpione nowymi. Zwykle na końcu tytułu bezpiecznik-bit ma symbol Z- z ZGODNY(zgodny).

OKDEN- bezpiecznik załącza wewnętrzny obwód debugera ( O N C biodro D ebug PL zdolny). Nie zostawiaj tego bitu ustawionego w produktach komercyjnych! W przeciwnym razie Twój program będzie mógł zostać odczytany z pamięci MK.

JTAGEN- bit bezpiecznika umożliwia interfejs programowania i debugowania JTAG . W porównaniu z SPI-interfejs, JTAG ma zaawansowane możliwości. Nie zaleca się niepotrzebnego pozostawiania tego bitu ustawionego, ponieważ w tym przypadku wzrasta prąd pobierany przez MK.

SAMOPRGEN- bit umożliwiający programowi MK zapis do pamięci programu, czyli wykonanie samoprogramowania.

DWEN- końcówka bezpiecznikowa umożliwiająca pracę DebugWire– Jest to jednoprzewodowy interfejs debugowania. Nie zaleca się pozostawiania go zainstalowanego w produktach komercyjnych.

EESAVE- bit bezpiecznika, po ustawieniu którego przy kasowaniu pamięci MK zawartość EEPROM Dane zostaną zachowane w stanie nienaruszonym, tj. nie zostaną usunięte.

SPIEN- bit bezpiecznikowy, który umożliwia obsługę interfejsu programowania w obwodzie MK SPI. Bit ten można łatwo zresetować za pomocą programatora równoległego (lub JTAG, jeśli jest to dozwolone i dostępne w MK). Wszystkie MK są produkowane z zamontowanym bitem SPIEN, usuń go z interfejsu SPI niemożliwe .

WDTON- bit bezpiecznika, po ustawieniu którego timer watchdoga WDT włącza się natychmiast po włączeniu zasilania i nie można go wyłączyć programowo. Jeśli bit nie jest ustawiony, włączanie i wyłączanie WDT można sterować za pomocą oprogramowania.

grupa bitów bezpiecznikowych BODLEVEL. Może być jeden taki bit lub kilka, wówczas numeruje się je zaczynając od zera. Wartość tych bitów bezpiecznika określa próg wyzwalania obwodu BZT- czujnik poziomu napięcia zasilania, gdy napięcie zasilania spadnie poniżej tego poziomu, MK zostanie „zresetowany”.

BODEN- bit bezpiecznikowy, który załącza obwód detektora sprzętowego przy niedopuszczalnym poziomie napięcia zasilania, tj. diagram BZT.

RSTDISBL- bit bezpiecznikowy, który odłącza zewnętrzny sygnał resetu od pinu mikrokontrolera i łączy z nim obwód portu I/O. Bit ten jest dostępny tylko w tych mikrokontrolerach, których pin resetowania sprzętowego RESET jest połączony z jednym z portów I/O. Nieprawidłowe ustawienie tego bezpiecznika może uniemożliwić RESET i nie będzie już możliwości flashowania przez ISP. Nie ustawiaj tego bitu, jeśli zamierzasz kontynuować pracę z MCU przy użyciu programatorów szeregowych. „Revive” MK z zainstalowanym RSTDISBL Jest to możliwe tylko z programatorem równoległym i nie dla wszystkich MK.

CKDIV8- bit bezpiecznika, który obejmuje wstępny podział częstotliwości generatora zegara kwarcowego (lub innego istniejącego) przez 8. Oznacza to, że gdy ten bit jest włączony i używany jest rezonator kwarcowy 8 MHz, rzeczywista częstotliwość zegara MK będzie wynosić 1 MHz.

WYCOFANIE- bit bezpiecznika, umożliwiający wyprowadzenie częstotliwości zegara na jeden z pinów MK (w celu taktowania innych urządzeń).

SUT1 I SUT0- bity bezpieczników kontrolujące tryb uruchamiania generatorów zegara MK. Powiązane z bitami opisanymi poniżej, które określają typ i częstotliwość generatora zegara, a połączenie jest bardzo trudne i mylące. Jeśli zostaną one zainstalowane nieprawidłowo, sytuacje mogą skutkować niestabilnym uruchomieniem generatora lub wielokrotnym resetowaniem MC podczas dostarczania do niego zasilania.

KOPT- bit określający tryb pracy wbudowanego generatora zegarowego do pracy z rezonatorami kwarcowymi. Naprawdę zmienia wzmocnienie wbudowanego falownika w obwodzie generatora, a tym samym napięcie wyjściowe na nodze XTAL2. Nieprawidłowa instalacja może prowadzić do niestabilnego rozruchu oscylatora kwarcowego, aż do jego wzbudzenia przy niewłaściwej harmonicznej. (z tego powoduBit kwarcowy odpalał albo dopiero po zasileniu MK napięciem nie wyższym niż 3,6V, albo dopiero po dotknięciu pincetą pinu XTAL1)

Grupa bitów CKSEL0CKSEL3- bity bezpiecznikowe, których kombinacja określa rodzaj i częstotliwość generatora zegara roboczego. W sumie możliwych jest do 16 kombinacji, ale nie wszystkie są zdefiniowane dla wszystkich typów MK. Błędne ustawienie kombinacji tych bitów może spowodować, że MK będzie „martwy” – nie będzie działał w układzie bez podania sygnału zegarowego na pin XTAL1.

PLLCK- bit bezpiecznikowy, umożliwiający wykorzystanie wbudowanego syntezatora częstotliwości do taktowania rdzenia MK.

BOOTRST- bit bezpiecznika, który określa adres, od którego rozpocznie się wykonywanie programu po resecie - jeśli bit jest ustawiony, to program rozpocznie się nie od adresu 0000h (jak zwykle), ale od adresu obszaru bootloadera (Program rozruchowy).

grupa bitów bezpiecznikowych BOOTSZ- dwa bity bezpiecznika, które określają wielkość obszaru pamięci programu przydzielonego dla bootloadera ( Program rozruchowy). W szczególności kombinacja tych bitów określa moment, w którym rozpoczyna się wykonywanie programu po resecie, jeśli bit jest ustawiony BOOTRST.

Najczęstsze błędy przy zakładaniu bezpieczników:

1. Instalacja bezpiecznika RSTDISBL. Nieprawidłowe ustawienie tego bitu bezpiecznika powoduje wyłączenie RESETOWANIE i nie będzie już możliwości flashowania dostawca usług internetowych. Będzie to wymagało programisty szeregowego lub czegoś takiego.

2. Nieprawidłowa instalacja CKSEL0, CKSEL1, CKSEL2, CKSEL3. Bezpieczniki te określają źródło zegara mikrokontrolera. Jeśli przypadkowo wybierzesz niewłaściwą częstotliwość wewnętrznego oscylatora RC, nie grozi to śmiercią. Programowanie poprzez dostawca usług internetowych będzie to możliwe i będziesz w stanie naprawić sytuację. A jeśli przez przypadek ustawisz taktowanie z zewnętrznego źródła, toru RC lub rezonatora kwarcowego, a nie masz takiego w swoim obwodzie, to programowanie według dostawca usług internetowych również stanie się niemożliwe. Zasadniczo mikrokontroler będzie czekał na taktowanie z nieistniejącego obwodu. Jak wyjść z tej sytuacji? To bardzo proste - daj mikrokontrolerowi źródło zegara i popraw bezpieczniki. Najczęściej instalowany CKSEL same zera – taktowanie z zewnętrznego generatora. W takim przypadku można zmontować obwód generujący meander (częstotliwość nie odgrywa szczególnej roli, najważniejsze jest to, że mieści się w możliwościach mikrokontrolera) i zastosować go do nogi XTAL1. Następnie można sflashować mikrokontroler dostawca usług internetowych. Pierwszą rzeczą do zrobienia jest zresetowanie bezpieczników do ustawień fabrycznych. Jeśli CKSEL wszystkie są ustawione na 1 – taktowanie z zewnętrznego kwarcu. Zawieś kwarc, a następnie mikrokontroler będzie ponownie dostępny za pośrednictwem dostawca usług internetowych.