Počítače Windows internet

Popis poistky atmega8. mikrokontroléry ATMEL. Poistky. Poistky. Základné pravidlá pre začiatočníkov

Čo je to FUSE bitov? Slová sa zdajú byť povedomé, ale veľa ľudí v skutočnosti nepozná ich účel, začiarknu políčka a blikajú, zariadenie funguje a to je v poriadku. Chcem vám povedať niečo o týchto FUSE bitoch.

FUSE bity ( poistky) – jednoducho povedané, konfigurujú určité parametre mikrokontrolérov, je to druh nástroja na ich jemné doladenie Poistky zahŕňajú alebo konfigurujú parametre, ako sú:
- frekvencia generátora, vonkajší alebo vnútorný generátor
- zákaz čítania firmvéru mikrokontroléra
- povoliť alebo zakázať časovače
- frekvenčné delenie kryštálového oscilátora
- EEPROM ochrana proti vymazaniu
…a tak ďalej. Každý mikrokontrolér má svoje vlastné poistky, rôzne mikrokontroléry majú iný zoznam poistiek, napríklad ATmega8 nemá poistku CKOUT, ale je prítomná v ATtiny2313. Všetky tieto poistky sú popísané v technických listoch pre mikrokontroléry.

Hlavná Pravidlom pri práci s poistkami je neponáhľať sa s ich nastavovaním, pokiaľ si nie ste úplne istí správnosťou svojho konania.

Teraz si napíšme názvy niektorých poistiek, ich označenie a čo ovplyvňujú. Vo všeobecnosti existujú poistky na ochranu programu pred kopírovaním (uzamykacie bity), poistky, ktoré vytvárajú určité funkcie, ako aj takzvané „vysoké“ a „nízke“ bajty. Najpopulárnejšia poistka, ktorá je takmer vždy vystavená, je:

CKSEL, takéto poistky sú len štyri s rôznymi písmenami, ide o skupinu CKSEL 0,CKSEL 1CKSEL 2 aCKSEL 3, určiť frekvenciu generátora hodín a jeho typ hodinových impulzov je potrebný na prevádzku takmer každého mikrokontroléra; Mnoho mikrokontrolérov má vnútorný oscilátor, ale môžeme pripojiť externý a nastaviť poistky tak, aby fungovali z externého oscilátora. Na kolíky je pripojený externý kremenný rezonátor XTAL 1 A XTAL 2, navyše je prispájkovaný pár ~20pf kondenzátorov, jeden koniec do kremeňa, druhý do mínusu. Ak sa pri inštalácii týchto poistiek pomýlite, potom je možné mikrokontrolér „uzamknúť“, aby sa ovládač obnovil, do nohy XTAL1 sa v súčasnosti vynájde niekoľko schém na obnovenie ovládačov takto zamknuté. Tento generátor môže byť vyrobený z takmer akejkoľvek logiky alebo dokonca z časovača 555.

Existujú jednoduché obvody využívajúce 1 tranzistor, pár rezistorov a kremenný rezonátor a zložitejšie obvody využívajúce čipy ako K155LA3. Tieto metódy 100% oživia ovládače s takouto poruchou

Skupina poistiek SUT1 A SUT0- poistkové bity, ktoré riadia štartovací režim generátorov hodín MK a tiež nastavujú štartovaciu rýchlosť MK po pripojení napájania. Súvisí s poistkami CKSEL, menovite CKSEL0.

CKOPT- bit, určuje činnosť vstavaného oscilátora pre prácu s kremennými rezonátormi, nastavuje „amplitúdu“ kmitov hodinového signálu na kremeni. Tento bit sa programuje pomerne často.

RSTDISBL– veľmi nebezpečná poistka, nesprávne nastavenie môže vypnúť výstup RESET, po ktorom zanikne možnosť programovania ISP programátora. Trocha RSTDISBL otáča výstup RESETOVAŤ do I/O portu.

SPIEN– poistka, ktorá umožňuje prevádzku MK cez rozhranie SPI. Všetky mikrokontroléry sú uvoľnené s už nainštalovaným bitom SPIEN. Považovaná za nebezpečnú fúziu.

EESAVE- Pohodlne sa číta ako EEPROOM SAVE, doslova znamená „uložiť EEPROOM“, táto poistka chráni EEPROM pred vymazaním. Napríklad pri ďalšom nahrávaní firmvéru do ovládača môžete nastaviť EESAVE = 0, a pri vymazaní zostane MK EEPROOM nedotknutá.

BOOTSZ, pozostáva zo skupiny bitov BOOTSZ1 A BOOTSZ0, určiť veľkosť pamäťovej oblasti zaznamenaných programov, spojenú s bitom BOOTRST.

BOOTRST, určuje adresu, z ktorej sa začne vykonávanie programu. Ak je bit nastavený t.j. Ak BOOTRST=0, potom sa program spustí z adresy oblasti zavádzača.

BODEN- bit, ktorý pri nastavení ( BODEN=0), bude ovládať napájacie napätie pri extrémne nízkych napätiach, mikrokontrolér sa môže reštartovať, zlyhať atď. Spojené s BODLEVEL.

BODLEVEL. - určuje moment, kedy sa spustí detektor úrovne napájacieho napätia, keď napájacie napätie klesne pod úroveň, regulátor sa „reštartuje“.

SELFPRGEN- bit, ktorý umožňuje ( SELFPRGEN=0) alebo zakazuje ( SELFPRGEN = 1) program zapisuje do pamäte.

OCDEN– táto poistka umožňuje alebo zakazuje čítanie programu z pamäte ovládača.

Raz som vo svojich článkoch spomenul, že v niektorých programoch sú poistky nastavené zrkadlovo. Pamätajte naprogramovaná poistka=0 , A nie naprogramovaný=1 . V programoch Tvorca algoritmov, UniProf poistky sú nastavené jedným spôsobom a v programoch PonyProg,CodeVisionAVR, AVR Studio, SinaProg a niektoré ďalšie, poistky je potrebné nastaviť zrkadlovým spôsobom v porovnaní s predchádzajúcim zoznamom programov.

Už dlho sa na internete objavujú takzvané „poistkové kalkulačky“, sú to špeciálne aplikácie určené na pomoc pri konfigurácii mikrokontroléra. Aplikácia je intuitívna, myslím, že na to prídete, v zozname ovládačov vyberieme MK, ktoré potrebujeme, potom vyberieme potrebné funkcie a pod začiarknutými poistkovými skrinkami je všetko veľmi jednoduché.

Tieto aplikácie sú veľmi pohodlné, pretože... napríklad v poslednej dobe autori svojich projektov veľmi často píšu hodnoty poistiek nezrozumiteľnými písmenami alebo číslami, prípadne slovami, ktorým začiatočník nerozumie, čo to znamená a aké poistky treba nastaviť (často nájdete komentár na článok „Aké poistky treba nastaviť? V tomto smere nám veľmi pomáha kalkulačka poistiek.

Myslím si, že ak sa vás teraz spýtate „čo sú poistky a prečo sú potrebné?“, budete môcť človeku vysvetliť ich účel, ale zatiaľ je to všetko!

V predchádzajúcich článkoch som vám radil, aby ste do týchto bitov nezasahovali. A malo to svoje dôvody, keďže nesprávnym nastavením týchto bitov môžete natrvalo zablokovať ovládač pre ďalšie blikanie alebo akékoľvek použitie.

Bez znalosti tejto funkcie ovládača sa však ďaleko nedostanete. Takže napíšem všetko v poriadku. Rôzne verzie ovládačov majú rôzny počet POISTIEK, niektoré môžu chýbať, ale tie hlavné sú tam vždy. Poďme si ich prejsť.

Konfiguračné bity sú umiestnené v špeciálnej pamäťovej oblasti a je možné ich meniť iba pomocou programátora pri zápise ovládača. Existuje vysoký bajt a nízky bajt. Nízky bajt je zvyčajne zodpovedný za frekvenciu a vysoký bajt za všetky druhy čačky.

Takže to hlavné:

Atmel AVR používa nasledujúci zápis: poistkový bit resetovaný na nulu sa považuje za aktívny, t.j. zahrnuté.

Príklad Bit RSTDSBL, ako už názov napovedá, je RESET DISABLE. Ak povolíte túto možnosť, vaša RESET noha sa zmení na I/O port, ale stratíte tým možnosť aktualizovať radič cez ISP.

Ak teda chcete vypnúť RESET (a získať veľkú chybu s firmvérom výmenou za malý tip v podobe ďalšej nohy), musíte do tohto bitu napísať 0.

Na jednej strane je to nelogické a pokrivené. Je to, ako keby notácia, ktorá je akceptovaná na celom svete, bola, že nula je vypnutá, ale tu, viete, je to naopak. Na druhej strane je to ich kontrolór, robia si čo chcú. Raz si to zapamätajte a je to. A vo všeobecnosti v elektronike často berú nulu ako signál.


Ovládače však vyrábajú elektronickí inžinieri a programy firmvéru vytvárajú programátori. Aké logické. A tak títo programátori išli a urobili pekelný neporiadok so zaškrtávacími políčkami. Mali by raz a navždy akceptovať ako štandard, že začiarknutie je 1, a nie ZAPNUTÉ (čo, dovoľte mi pripomenúť, je nula). A preto v niektorých blikajúcich programoch značka začiarknutia znamená, že možnosť je povolená (vo FUSE je bit napísaný 0), v iných, zvyčajne napísaných elektronickými inžiniermi, značka začiarknutia znamená jednu. Tie. presne naopak.

Čo sa stane, ak to zmiešate? A bude to VEĽMI zlé. Ovládač prejde do nesprávneho režimu a môže sa natrvalo zablokovať. Tie. Raz som o to požiadal a hotovo. Prišiel.

Nie, môžete si to uložiť, ale na to budete potrebovať ďalšie triky vo forme vysokonapäťového programátora, adaptéra JTAG alebo generátora hodín. Všetko závisí od toho, do akého režimu nastavíte ovládač s vašimi nesprávnymi nastaveniami.

Pre začiatočníka je väčšinou jednoduchšie ísť si kúpiť nový MK ako oživiť zablokovaný. Neponáhľajte sa ho však vyhodiť do koša. Označte to a odložte pre budúcnosť, prídete na to a oživíte to.

Konfigurácia hodín
Štandardne sú všetky ovládače AVR (okrem staršej série AT90S2313, AT90S8535 atď.) nakonfigurované tak, aby fungovali z interného zdroja hodín. Tie. Stačí na ne použiť silu a začnú fungovať. Nič viac netreba.

Bity sú zodpovedné za zdroj hodín CKSEL
Ich správnym nastavením môžete zvoliť frekvenciu ovládača, ako aj zdroj hodinového signálu.

  • CKSEL3…0 = 0000 — Externý zdroj signálu.

Tie. Na vstup XTAL1 sa privádzajú obdĺžnikové impulzy. Niekedy sa to robí v synchrónnych systémoch, keď niekoľko regulátorov pracuje z jedného generátora.

Technická odbočka
Do tohto režimu sa často dostanú, keď sa snažia nastaviť ovládač na prácu z externého kremeňa (CKSEL=1111), no buď si pomýlia zápis, alebo kvôli vtipu s opačným zápisom bitov vo všelijakých zvrátených blikajúcich programoch. . Akonáhle bol kryštál zablokovaný. Ale v skutočnosti nie je možné pevne zablokovať kryštál pomocou CKSEL. Zvyčajne sa všetko rieši spájkovaním kremeňa a vychádzaním z tohto kremeňa. Najhoršie, čo sa môže stať, je, že budete potrebovať externý generátor hodín. Čo by oživilo kryštál. Je vyrobený za päť minút z ľubovoľného logického čipu TTL, napríklad z K155LA3 - na internete je veľa obvodov. Buď na časovači 555, alebo si zoberieš druhý MK a napíšeš naň jednoduchý program, ktorý trhne nohou. A ak máte osciloskop, môžete z neho získať signál riadiaceho generátora - jeho terminál by mal byť na akomkoľvek oscilátore. Zem oscilovala k zemi regulátora a výstup generátora do XTAL1.

Čo však robiť, ak je svrbenie neznesiteľné, ovládač je zamknutý a po ruke nie je čip na resuscitáciu? Niekedy tu funguje metóda prstov. Vtipné je, že na ľudské telo smeruje veľmi cool mierenie s frekvenciou približne 50 Hz. Každý, kto chytil do rúk sondy osciloskopu, si pamätá, aký nezmysel sa okamžite objaví na obrazovke - toto je ono! Prečo nepoužiť toto navádzanie ako hodinový signál? Takže na pin XTAL1 prispájkujete drôt, chytíte ho rukou a stlačíte ovládač čítať alebo zapisovať :) Hneď vás upozorním, metóda funguje ako neporiadok, nie prvýkrát, trvá to dlho čítať a niekedy aj s chybami, ale prepísanie bitov FUSE na správnu stranu by malo stačiť. Tento trik sa mi párkrát podaril.

CKSEL3…0 = 0100 – 8 MHz z interného oscilátora (zvyčajne sú predvolené)
Pre väčšinu AVR táto konfigurácia CKSEL znamená taktovanie z interného oscilátora na 8 MHz, ale môžu existovať odchýlky. Takže v tomto prípade si pozorne prezrite datasheet. Na dosku prevádzkových režimov interného kalibrovaného RC oscilátora

Niekedy je potrebné mať napríklad externý generátor hodín, aby sa dal nastaviť bez zásahu do firmvéru. Ak to chcete urobiť, môžete pripojiť reťaz RC, ako je znázornené na obrázku, a vypočítať frekvenciu pomocou vzorca f = 1/3 RC, kde f bude frekvencia v hertzoch a R a C, v tomto poradí, odpor odporu a kapacita kondenzátora, v ohmoch a faradoch.

  • CKSEL3…0 = 0101 – pre frekvencie pod 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

Tento štítok platí len pre ATmega16 iné MK sa môžu líšiť. Podrobnosti nájdete v údajovom liste!

Problémom interného oscilátora a externých RC obvodov býva frekvenčná nestabilita, čo znamená, že ak na ňom spravíte hodiny, budú ležať, nie moc, ale budú. Preto je niekedy užitočné spustiť regulátor na quartz, iba na quartz môžete produkovať maximálnu frekvenciu, a tým aj výkon procesora.

  • CKSEL3…0 = 1001 – nízkofrekvenčný „hodinový“ kremeň.

Niekoľko desiatok kilohertzov.
Používa sa v aplikáciách s nízkou rýchlosťou, najmä ak sa vyžaduje presná prevádzka a nízka spotreba energie.

V prípade bežného kremeňa je situácia trochu iná. Tu maximálna kremenná frekvencia závisí aj od bitu CKOPT keď CKOPT = 1, potom:

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

A keď CKOPT sa rovná 0, potom s rovnakými hodnotami CKSEL môžete nastaviť quartz od 1 do 16 MHz.

Samozrejme, 16MHz quartz je možné nainštalovať iba na Mega bez indexu „L“. (Aj keď ako ukazuje prax, aj Lku sa dá celkom dobre pretaktovať. Môj ATMega8535L fungoval na 16 MHz, no v prevádzke sa vyskytli zvláštne efekty. Preto som to až tak neprekrúcal a pretaktovanie som odstránil). Opäť platí, že všetko uvedené presne zodpovedá iba Mega 16, ostatné sa môžu mierne líšiť.

Trocha CKOPT určuje kolísanie hodinového signálu. Tie. amplitúda kmitov na výstupe z kremeňa. Pri CKOPT = 1 je dosah malý, vďaka tomu sa dosahuje nižšia spotreba energie, ale znižuje sa odolnosť proti rušeniu, najmä pri vysokých rýchlostiach (a maximum, súdiac podľa tabuľky vyššie, nemožno dosiahnuť vôbec. Viac presne, môže to začať, ale nikto nie je spoľahlivými zárukami). Ale ak je aktivovaný CKOPT a je do neho zapísaná 0, potom sa kolísanie signálu okamžite zmení z 0 na výkon. Tým sa zvýši spotreba energie, ale zvýši sa odolnosť voči rušeniu, a tým aj maximálna rýchlosť. Pri pretaktovaní MK je ešte potrebnejšie nastaviť CKOPT na 0.

Za zmienku stojí aj bit SCKDIV8, ktorý nie je prítomný v Atmega16, ale často sa nachádza v iných ovládačoch AVR. Toto je oddeľovač hodín. Keď je nainštalovaný, t.j. na nule, potom je frekvencia nastavená v bitoch CKSEL0...3 delená 8, na čom sa Dlinny naraz zasekol a dlho sa snažil pochopiť, prečo mu to nefungovalo. Krása je v tom, že tento delič je možné programovo deaktivovať zápisom požadovaného deliaceho koeficientu, napríklad jedného, ​​do registra CLKPR. Celý vtip je v tom, že SCKDIV8 je štandardne aktívny! Buď opatrný!

SUT bity nastavte počiatočnú rýchlosť MK po odstránení RESETu alebo pripojení napájania. Hodnota sa tam pohybuje od 4 ms do 65 ms. V celej mojej praxi som ešte nemal možnosť využiť túto možnosť - nie je potrebná. Tak som to nastavil na max 65ms - bude to spoľahlivejšie.

Trocha RSTDISBL schopný otáčať čiaru Resetovať do jednej z nožičiek portu, čo je niekedy veľmi potrebné, keď nejaký drobný Drobček nemá dostatok nožičiek na všetky úlohy, ale musíme si uvedomiť, že ak vypnete Reset, automaticky sa stratí možnosť blikať ovládač pomocou piatich káblov. A na prekáblovanie budete potrebovať vysokonapäťový paralelný programátor, čo stojí niekoľko tisíc a je problematické robiť na kolene, aj keď sa to dá.

Druhý zapodlyansky bit je SPIEN Ak ho nastavíte na 1, potom tiež okamžite stratíte možnosť flashovania pomocou jednoduchej cesty a opäť budete potrebovať paralelný programátor. Upokojujúce však je, že reset cez SPI nie je možné, aspoň v nových AVR (v starých, v AT90S*** to bolo možné)

WDTON je zodpovedný za Dog Timer, známy aj ako Watch Dog. Tento časovač reštartuje procesor, ak sa pravidelne neresetuje - zabraňuje zamrznutiu. Ak je WDTON nastavený na 0, potom sa pes vôbec nedá vypnúť.

BODLEVEL A BODEN- Toto je režim riadenia napätia. Faktom je, že pri určitom prahu napätia, pod kritickou úrovňou, sa regulátor môže začať stávať veľmi závadným. Môže samovoľne poškodiť napríklad EEPROM alebo niečo iné. No, čo si si myslel, ak ťa nebudem pár týždňov kŕmiť, začneš makať aj ty :)

Na vyriešenie tohto problému má AVR zabudovaný dohľad nad výkonom. Dbá na to, aby napätie nebolo pod primeranou úrovňou. A ak nie je dostatočné napätie, potom jednoducho stlačí RESET a nedovolí ovládaču spustiť. Tieto dve poistky riadia túto funkciu. BODEN zahŕňa a BODLEVEL umožňuje vybrať jednu z dvoch kritických úrovní. Ktoré? Neprezradím to, pozrite sa do údajového listu (časť Kontrola a resetovanie systému).

JTAGEN— Povoliť JTAG. Predvolene aktívne. Tie. JTAG povolený. Z tohto dôvodu MEGA16 (rovnako ako 32 a ďalšie, ktoré majú JTAG) nemôže používať piny portu C zodpovedné za JTAG. Môžete však pripojiť ladiaci program JTAG a použiť ho na to, aby ste sa dostali do mozgu ovládača.

EESAVE— EEPROM ochrana proti vymazaniu. Ak zapnete túto vec, potom keď sa MK úplne resetuje, zóna EEPROM sa nevymaže. Užitočné napríklad vtedy, ak sa počas prevádzky zapisujú do EEPROM nejaké cenné dáta.

BOOTRST— prenos štartovacieho vektora do oblasti zavádzača. Ak je toto začiarkavacie políčko povolené, MK sa nespustí od adresy 00000, ale od adresy zavádzacieho sektora a najskôr spustí zavádzač. Viac podrobností o tom bolo napísaných v článku o firmvéri cez zavádzač.

BOOTSZ0..1— skupina bitov, ktorá určuje veľkosť zavádzacieho sektora. Ďalšie podrobnosti nájdete v údajovom liste. Líšia sa od ovládača k ovládaču.

Uzamykacie bity
V skutočnosti to nemá nič spoločné s poistkami. Toto sú bezpečnostné prvky. Nastavenie týchto bitov zakáže čítanie z kryštálu. Buď flash, alebo EEPROM, alebo oboje naraz. Potrebné iba vtedy, ak predávate svoje zariadenia. Aby zlí konkurenti neunikli firmvéru a neobjednali si viac ako 9 000 klonov vášho zariadenia z Číny, takže vám nezostanú nohavice. Nepredstavujú žiadne nebezpečenstvo. Ak nimi zablokujete kryštál, vykonajte úplné vymazanie a nebude problém.

Charakteristickým znakom nainštalovaných zámkových bitov je, že firmvér je čitateľný - v ňom sú bajty v poriadku. Tie. 00,01, 02, 03, 04... FF, 00... Videli ste už také kraviny? Takže nie je vaším osudom ukradnúť firmvér - je chránený =)

Bezpečnostné opatrenia
A hlavné pravidlo pri práci s bitmi FUSE je POZOR, POZOR a ZNOVU POZOR! Nikdy nenastavujte FUSE bez toho, aby ste si skontrolovali údajový list, aj keď ich skopírujete z dôveryhodného zdroja.

Uistite sa, že rozumiete tomu, čo znamená začiarknutie v blikajúcom programe. Nula alebo jedna. Zapnite alebo vypnite! Neexistuje žiadny štandard!!!

Ak sú fuzz bity špecifikované dvoma číslami - najvýznamnejším a najmenej významným bitom, potom sú nastavené ako v údajovom liste. Kde je povolená 0.

Druhé, okované pravidlo pre prácu s FUSE. Pamätaj si to navždy a nehovor, že som neučil.

NAJPRV SI PREČÍTAME, KTORÉ MÁME, POTOM PÍŠEME, KTORÉ POTREBUJEME

Čítať - Upraviť - Zapísať. Jediná cesta. prečo? Áno, často sa to stáva takto: Otvoril som kartu FUSE, ale programátor bol hlúpy a nepočítal ich. V dôsledku toho máte všade prázdne bunky. Spokojný som nastavil len tie, ktoré potrebujete SKSEL a potom stlačil WRITE. Tu to príde, zvyčajne, chlap. Pretože Do ovládača sa zapíšu nielen tie, ktoré zmeníte, ale aj celá sekcia. S tými istými prázdnymi bunkami. Predstavte si, aký neporiadok tam bude. Rovnaká vec! A potom sa bežia sťažovať v komentároch a na fórach a hovoria, že som sa ničoho takého nedotkol - je to tam. Áno, práve teraz!

Takže ešte raz – čítajte, upravujte, píšte!

Nápoveda:
Ako môžete na prvý pohľad určiť, aký typ (priamych alebo inverzných) poistkových bitov je v neznámom blikajúcom programe?
Deduktívna metóda: Stlačte čítať Poistky a pozrite sa na stav bitu SPIEN Tento bit je vždy aktívny a ak je resetovaný, programátor ani nedokáže detekovať ovládač. Ak je SPIEN 1, znamená to, že poistky sú inverzné, ako v PonyProg. Ak je nula, znamená to podľa Atmelovej notácie.

Nastavenie bitov Fuse a Lock (konfigurácia a blokovanie bitov) mikrokontrolérov (MCU) rodiny AVR, najmä pre začiatočníkov, je pomerne náročná úloha a často môže spôsobiť zmätok pri nastavovaní a programovaní MCU. Ak ste kúsok vynechali alebo ste ho zle nastavili, môže to viesť k nesprávnemu fungovaniu programu alebo ešte horšie k nemožnosti naprogramovať obvod MK cez sériové rozhranie.

Napriek skutočnosti, že technická dokumentácia pre každý MK poskytuje komplexné informácie o bitoch poistky a zámku, začiatočníci sa často cítia trochu neistí pred vykonaním príkazu na zápis konfigurácie a bitov zámku. V článku sa pozrieme na hlavné vlastnosti konfiguračných bitov rodiny AVR MK.

Poistkové a blokovacie bity

Predtým, ako sa dostaneme k podrobnostiam o konfiguračných bitoch, je potrebné pochopiť a zapamätať si jednu vec:

  • Poistkový bit = 1 znamená, že je nenaprogramovaný (vymazaný, neaktívny);
  • Poistkový bit = 0 znamená, že je naprogramovaný (nastavený, aktívny).

Toto je jeden z hlavných zdrojov zmätku pri programovaní bitov Fuse a Lock. Sme zvyknutí si myslieť, že nastavenie hodnoty parametra znamená napísanie 1, však? S bitmi AVR Fuse je to naopak, nastavenie ľubovoľného bitu znamená zápis 0, a to si treba zapamätať.

Konfiguračné bity sú umiestnené v samostatnej oblasti energeticky nezávislej pamäte. Napríklad MK má štyri konfiguračné bajty, ktoré musia byť naprogramované pre správnu činnosť. Jeden z týchto bajtov obsahuje blokovacie bity, zvyšné tri (často nazývané vysoký, nízky a rozšírený) obsahujú konfiguračné bity. Táto sada bitov nastavuje počiatočné nastavenia MCU: zdroj hodín, oblasť zavádzača, operácia resetovania hardvéru, časovač stráženia atď. Najprv sa pozrieme na bity zámku (obrázok 1).

V závislosti od typu mikrokontroléra AVR sa počet blokovacích bitov môže líšiť, ale vždy sú prítomné dva najmenej významné bity. Bity LB1 a LB2 sa používajú na zablokovanie prístupu k vstavanej pamäti Flash. Pravdepodobne viete, že vývojári akýchkoľvek zariadení takmer vždy blokujú čítanie firmvéru MK, aby ochránili svoje duševné vlastníctvo a zabránili vytváraniu duplikátov a falzifikátov. Čítanie zamknutého mikrokontroléra je ako bonbónik pre hardvérových hackerov, ale to je iná téma. Ak teda potrebujete chrániť svoj firmvér pred kopírovaním, musíte uzamknúť obsah pamäte mikrokontroléra, inak ponechajte bity nezmenené. Iné zámkové bity ( BLB01, BLB02, BLB11 a BLB11 ) možno použiť na blokovanie zápisu/čítania do/z pamäte Flash, a to z oblasti aplikácie aj zo sekcie zavádzača. Zámkové bity sa programujú zriedka (v závislosti od špecifík aplikácie), nebudeme sa im venovať. Aj keď naprogramujete ktorýkoľvek z nich, uzamykacie bity sa vynulujú (nastavia sa na 1) počas príkazu Chip Erase.

Tie, ktoré nás najviac zaujímajú, sú konfiguračné kúsky, s ktorými sa budete musieť veľmi často zaoberať, či sa vám to páči alebo nie. Umiestnenie určitých bitov poistky v troch konfiguračných bajtoch sa líši v závislosti od použitej MCU. Napríklad sa pozrieme na ATmega328P, ktorý má tri konfiguračné bajty (obrázok 2).

Obrázok 2 Zloženie konfiguračných bajtov a počiatočných hodnôt Fuse bitov mikrokontroléra ATmega328P.

Pozrite sa na zloženie nízkeho bajtu. Vidíte skupinu 4 rovnakých bitov CKSEL0, CKSEL1, CKSEL2, CKSEL3 . Slúžia na výber typu zdroja hodín pre mikrokontrolér MK. Štandardne (výrobné nastavenia) je mikrokontrolér nakonfigurovaný na prevádzku z interného 8 MHz RC oscilátora. Logicky ide o najbezpečnejšiu možnosť pre prácu s mikrokontrolérom. Ako však viete, zariadenia rodiny AVR môžu pracovať z rôznych zdrojov taktovacej frekvencie:

  • kalibrovaný interný RC oscilátor (štandardne 8 MHz);
  • externý RC oscilátor;
  • vonkajší keramický alebo kremenný rezonátor;
  • externý nízkofrekvenčný kremeň;
  • externý zdroj hodín.

Pre každý z prezentovaných režimov taktovania existuje celý rad nastavení bitov poistky CKSEL0..3 , ktoré slúžia na riadenie frekvencie generátora hodín a času, kedy sa mikrokontrolér vráti do prevádzkového režimu z režimu nízkej spotreby. Tieto bity úzko súvisia s bitmi SUT0 a SUT1 , ktoré vlastne riadia čas spustenia mikrokontroléra po pripojení napájania. Oneskorenie spúšťača je potrebné na stabilizáciu generovania keramických rezonátorov a kryštálov. Presné hodnoty času, za ktorý mikrokontrolér dosiahne prevádzkový režim, sú uvedené v technickej dokumentácii.

Konfiguračný bit CKOUT umožňuje/zakazuje výstup taktovacej frekvencie na jeden z pinov MK; pre ATmega328P na pin PORTB0 (pre taktovanie iných zariadení) bez ohľadu na to, aký zdroj taktu MK je použitý. Ak je bit naprogramovaný, primárne a alternatívne funkcie portu PB0 nie sú dostupné pre používateľskú aplikáciu.

Posledný bit v dolnom byte je CKDIV8 . Štandardne je tento bit nastavený, čo znamená, že k internému RC oscilátoru je pripojený 8 MHz frekvenčný delič s faktorom 8, takže systémová hodinová frekvencia MK bude v tomto prípade rovná 1 MHz. Ak potrebujete rýchlosť hodín 8 MHz, bit CKDIV8 je potrebné resetovať.

Teraz sa zamerajme na bajt konfigurácie vyššieho rádu.

Prvý kúsok je BOOTRST , ktorá je predvolene vymazaná. Ak je tento bit nastavený, potom po pripojení napájania na mikrokontrolér alebo po resete mikrokontrolér začne vykonávať program zo zavádzacieho sektora. Jednoducho povedané, ak aplikácia vyžaduje funkcie zavádzača z pamäte Flash, potom je potrebné tento bit naprogramovať. Ak potrebujete iba naprogramovať mikrokontrolér cez rozhranie v obvode, môžete tento kúsok nechať nedotknutý.

Pri používaní bootloadera sa bity stávajú dôležitými BOOTSZ0 a BOOTSZ1 . Definujú oblasť pamäte Flash pre bootloader. Ak je kód zavádzača vašej aplikácie malý, môžete použiť konfiguračné bity na pridelenie menšej oblasti pamäte Flash pre zavádzač a zvyšok nechať na aplikáciu.

Ďalší kúsok EESAVE . Ak je naprogramovaný (0), obsah energeticky nezávislej dátovej pamäte EEPROM zostane počas postupu vymazania čipu nedotknutý. Vo väčšine prípadov je to užitočná funkcia, napríklad keď EEPROM ukladá dôležité dáta alebo kalibračné parametre a firmvér je potrebné aktualizovať, potom naprogramujte bit pred výmenou firmvéru EESAVE .

Po nastavení bitu WDTON Časovač watchdog mikrokontroléra sa zapne ihneď po pripojení napájania a nedá sa vypnúť softvérom. V tomto prípade bude časovač watchdog neustále vykonávať svoju funkciu periodického resetovania mikrokontroléra, pokiaľ sa v programovom kóde nevykoná špeciálny príkaz resetovania časovača watchdog. Ak bit WDTON nie je nainštalovaný, časovač watchdog je aktivovaný/deaktivovaný softvérom.

Trocha SPIEN navrhnutý tak, aby deaktivoval sériové programovacie rozhranie mikrokontroléra. V skutočnosti nemôžete zmeniť stav tohto bitu pomocou sériového rozhrania (mikrokontroléry AVR podporujú dva ďalšie režimy paralelného programovania), ale sú známe prípady zmeny stavu bitu SPIEN v prípade nesprávnej činnosti alebo poruchy obvodového programátora.

Podobná situácia s bitom RSTDSBL - slúži na deaktiváciu funkcie hardvérového resetu, inými slovami, resetovací kolík MK sa používa ako I/O port. V niektorých situáciách (MCU s malým počtom I/O liniek) je to veľmi výhodné, ale vo všeobecnosti sa to neodporúča. Nesprávne nastavenie bitu RSTDSBL vás môže pripraviť o možnosť programovania mikrokontroléra cez SPI, pretože prítomnosť resetovacieho signálu je predpokladom pre aktiváciu programovacieho režimu.

Trocha DWEN slúži na aktiváciu špeciálneho ladiaceho rozhrania DebugWire pre mikrokontroléry AVR. Zmeňte bitový stav SPIEN, RSTDSBL a DWEN cez sériové rozhranie nie je možné, bude to vyžadovať paralelný programátor s podporou vysokonapäťového programovacieho režimu alebo pripojenie cez rozhranie DebugWire.

Ďalší kúsok, ktorý stojí za zmienku CKOPT vo vysokom byte konfigurácie ( chýba v ATmega328P, ale je prítomný v iných AVR MK), riadi prevádzkový režim zosilňovača hodinového generátora. Ak je bit naprogramovaný (0), výstupný signál hodinového generátora má výkyv (amplitúdu) rovný napájaciemu napätiu. Túto možnosť je možné použiť, keď bude mikrokontrolér pracovať v prostredí s vysokou úrovňou šumu a tiež vtedy, keď plánujete na pin XTAL2 pripojiť ďalší mikrokontrolér. V ostatných prípadoch musí byť tento režim vypnutý ( CKOPT=1 ), pretože spotreba energie mikrokontroléra sa zvyšuje, čo nie je vítané v zariadeniach napájaných z batérie.

Posledný konfiguračný bajt (rozšírený). Pre mikrokontrolér Atmega328P obsahuje tri bity: BODLEVEL0, BODLEVEL1, BODLEVEL2 . Tieto bity sú určené na nastavenie prahu pre obvod detektora napájacieho napätia: keď napájacie napätie dosiahne nastavenú úroveň, mikrokontrolér sa resetuje.

Kalkulačka hodnoty bitovej poistky

Keď potrebujete naprogramovať nový MK, môžete použiť technický popis pre mikrokontrolér na nastavenie bitov poistky. Existuje však pohodlnejší a jednoduchší spôsob - kalkulačka Fuse-bit - online nástroj vyvinutý Markom Hammerlingom (obrázok 3). Nezávisle vyberiete typ mikrokontroléra a zapnete/vypnete potrebné možnosti a konfigurácia bitu poistky sa automaticky aktualizuje.

Okrem toho môžete individuálne nastaviť bity poistky v samostatnom formulári, automaticky sa aktualizujú aj konfiguračné nízke, vysoké a rozšírené hodnoty bajtov (obrázok 4), zatiaľ čo príkazy sa generujú pre programátor AVRDude.

Ak máte mobilný telefón alebo tablet s Androidom, môžete použiť bezplatnú aplikáciu AVR Fuse Calculator, ktorá vykonáva rovnaké funkcie a generuje príkazy pre programátor AVRDude. V databáze programu je 144 AVR MK.

Základné pravidlá pre začiatočníkov:

  • Nikdy nemeňte stav bitov DWEN, SPIEN a RSTDSBL. V skutočnosti k nim nie je prístup cez sériové programovacie rozhranie;
  • Dvakrát skontrolujte bity CKSEL. Nesprávne nastavenie typu hodín spôsobuje veľa problémov;
  • Ak nevyrábate komerčné produkty, nemeňte stav bitov Lock;
  • Ak si nie ste istí správnym nastavením bitov poistky, je lepšie si pozrieť technickú dokumentáciu alebo položiť otázku odborníkom na fóre.

Zverejnené 16.07.2012

Poistky sú niekoľko špeciálnych bajtov, ktoré je možné iba blikať a sú zodpovedné za rôzne nastavenia mikrokontroléra. Poistky sa môžu líšiť pre rôzne mikrokontroléry. Pre podrobnejšie informácie si preto pozrite dokumentáciu. Keďže sa to robí ako posledné, uvediem tu stručný popis poistiek a uvediem najčastejšie chyby pri práci s poistkami.

Chcel by som poznamenať, že bit, ktorý je resetovaný na 0, sa považuje za nastavený. Pre začiatočníkov to často spôsobuje zmätok pri práci s rôznymi programami pre firmvér.
Pretože začiarknutie oproti poistke nie je vždy jasne 1 alebo 0 (v zmysle nastavenej hodnoty). Vývojári softvéru mysleli, že ak je začiarknuté, bit sa považuje za nastavený (t. j. = 0).

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

REZERVOVANÉ
M103С+ S8515СS8535С
OCDEN + + + +
JTAGEN + + + +

SELFPRGEN
+ + + + +
DWEN+ + + + + +

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

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

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

BODLEVEL2
+ + + + +

BODLEVEL1
+ + + + + + +

BODLEVEL0
+ + + BOD
LEVEL
+ BOD
LEVEL
BOD
LEVEL
+ BOD
LEVEL
+ + BOD
LEVEL
BOD
LEVEL

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

CKDIV8
+ + + + + + +

CKOUT
+ + + + + +
SUT1+ + + + + + + + + + + + +
SUT0+ + + + + + + + + + + + +
CKOPT + + + + + +
CKSEL3+ + + + + + + + + + + +
CKSEL2+ + + + + + + + + + + +
CKSEL1+ + + + + + + + + + + + +
CKSEL0+ + + + + + + + + + + + +

PLLCK
+
BOOTRST + + + + + + + +

BOOTSZ1
+ + + + + + + +

BOOTSZ0
+ + + + + + + +

V tabulke poistka- kúsky populárnych AVR. Tituly vľavo poistka-bity podľa údajového listu, prvé dva riadky uvádzajú rodiny a typy konkrétnych MK a na priesečníku riadkov a stĺpcov je znak plus , ak je daný poistka-bit je prítomný v tomto MK alebo špecifikovaný názov , odlišný od štandardného. Ak bit chýba, v príslušnej bunke nie je nič. Účel každého poistkového bitu AVR: REZERVOVANÉ- tento bit je vyhradený na niektoré účely, ktoré spoločnosť nepozná obyčajným smrteľníkom Atmel. V žiadnom prípade sa neodporúča meniť jej stav (t.j. ponechať tak, ako bola namontovaná pri výrobe MK). V tomto riadku
Existujú bity s rôznymi názvami, spravidla ide o bity na umožnenie režimu kompatibility so zastaranými typmi mikrokontrolérov, ktoré boli nahradené novými. Zvyčajne na konci nadpisu poistka-bit má symbol S- od KOMPATIBILNÉ(kompatibilné).

OCDEN- poistka aktivuje vnútorný obvod ladiaceho zariadenia ( O n C bedro D ebug EN schopný). Nenechávajte tento bit nastavený v komerčných produktoch! V opačnom prípade je možné váš program prečítať z pamäte MK.

JTAGEN- poistkový bit umožňuje rozhranie programovania a ladenia JTAG . V porovnaní s SPI-rozhranie, JTAG má pokročilé možnosti. Neodporúča sa ponechať tento bit nastavený, pokiaľ to nie je nevyhnutné, pretože v tomto prípade sa prúd spotrebovaný MK zvyšuje.

SELFPRGEN- bit, ktorý umožňuje programu MK zapisovať do pamäte programu, t.j. vykonávať samoprogramovanie.

DWEN- poistkový bit umožňujúci prevádzku DebugWire– Toto je jednovodičové ladiace rozhranie. Neodporúča sa ponechať ho nainštalovaný v komerčných produktoch.

EESAVE- poistkový bit, po nastavení ktorého pri vymazaní pamäte MK obsah EEPROMÚdaje zostanú nedotknuté, t.j. nebudú vymazané.

SPIEN- poistkový bit, ktorý umožňuje obsluhu obvodového programovacieho rozhrania MK SPI. Tento bit je možné jednoducho resetovať pomocou paralelného programátora (príp JTAG, ak je to povolené a dostupné v MK). Všetky MK sa vyrábajú s nainštalovaným bitom SPIEN, odstráňte ho z rozhrania SPI nemožné .

WDTON- poistkový bit, po nastavení ktorého sa spustí strážny časovač WDT zapne sa ihneď po pripojení napájania a nedá sa vypnúť softvérom. Ak bit nie je nastavený, zapnite a vypnite WDT možno ovládať softvérom.

skupina poistkových bitov BODLEVEL. Môže existovať jeden takýto bit alebo niekoľko, potom sú číslované od nuly. Hodnota týchto poistkových bitov určuje prahovú hodnotu spúšťania obvodu BOD- detektor úrovne napájacieho napätia pri poklese napájacieho napätia pod túto úroveň dôjde k „resetovaniu“ MK.

BODEN- poistkový bit, ktorý zapína obvod hardvérového detektora pre neprijateľnú úroveň napájacieho napätia, t.j. diagram BOD.

RSTDISBL- poistkový bit, ktorý odpája externý resetovací signál od pinu mikrokontroléra a pripája k nemu obvod I/O portu. Tento bit je dostupný len v tých mikrokontroléroch, ktorých hardvérový resetovací kolík RESET je kombinovaný s jedným z I/O portov. Nesprávne nastavenie tohto poistkového bitu môže zakázať RESET a už nebudete môcť blikať cez ISP. Tento bit nenastavujte, ak máte v úmysle pokračovať v práci s MCU pomocou sériových programátorov. „Oživte“ MK s nainštalovaným RSTDISBL Je to možné len s paralelným programátorom a nie pre všetky MK.

CKDIV8- poistkový bit, ktorý obsahuje predbežné delenie frekvencie kremenného (alebo iného existujúceho) hodinového generátora číslom 8. To znamená, keď je tento bit zapnutý a je použitý 8 MHz kremenný rezonátor, skutočná hodinová frekvencia MK bude 1 MHz.

CKOUT- poistkový bit, umožňujúci výstup taktovacej frekvencie na jeden z MK pinov (pre taktovanie iných zariadení).

SUT1 A SUT0- poistkové bity, ktoré riadia režim spustenia generátorov hodín MK. V spojení s nižšie popísanými bitmi, ktoré určujú typ a frekvenciu generátora hodín, je spojenie veľmi zložité a mätúce. Ak sú nainštalované nesprávne, môže dôjsť k nestabilnému spusteniu generátora alebo opakovanému resetu MC počas procesu napájania.

CKOPT- bit, ktorý určuje prevádzkový režim vstavaného generátora hodín pre prácu s kremennými rezonátormi. Skutočne mení zosilnenie zabudovaného meniča v obvode generátora a tým aj výstupné napätie na nohe XTAL2. Nesprávna inštalácia môže viesť k nestabilnému rozbehu kremenného oscilátora až po jeho vybudenie pri nesprávnej harmonickej. (kvôli tomuKremenný bit sa spustil buď až keď bol MK napájaný napätím nie vyšším ako 3,6V, alebo až po dotyku pinzetou XTAL1)

Bitová skupina CKSEL0CKSEL3- poistkové bity, ktorých kombinácia určuje typ a frekvenciu generátora pracovných hodín. Celkovo je možných až 16 kombinácií, no nie všetky sú definované pre všetky typy MK. Nesprávne nastavenie kombinácie týchto bitov môže spôsobiť, že MK bude „mŕtvy“ - nebude fungovať v obvode bez dodania hodinového signálu na kolík XTAL1.

PLLCK- poistkový bit, umožňujúci použitie vstavaného frekvenčného syntetizátora na taktovanie jadra MK.

BOOTRST- poistkový bit, ktorý určuje adresu, od ktorej sa spustí vykonávanie programu po resete - ak je bit nastavený, program nezačne od adresy 0000h (ako obvykle), ale od adresy oblasti bootloaderu (Boot Loader).

skupina poistkových bitov BOOTSZ- dva poistkové bity, ktoré určujú veľkosť oblasti pamäte programu pridelenej pre bootloader ( Boot Loader). Najmä kombinácia týchto bitov určuje bod, v ktorom sa spustí vykonávanie programu po resete, ak je bit nastavený BOOTRST.

Najčastejšie chyby pri nastavovaní poistiek:

1. Inštalácia poistky RSTDISBL. Nesprávne nastavenie tohto poistkového bitu deaktivuje RESETOVAŤ a už nebudete môcť blikať ISP. To bude vyžadovať sériový programátor alebo niečo také.

2. Nesprávna inštalácia CKSEL0, CKSEL1, CKSEL2, CKSEL3. Tieto poistky určujú zdroj hodín mikrokontroléra. Ak omylom zvolíte nesprávnu frekvenciu interného RC oscilátora, nie je to fatálne. Programovanie cez ISP bude možné a vy budete môcť situáciu napraviť. A ak náhodou nastavíte taktovanie z externého zdroja, RC reťaze alebo kremenného rezonátora a nemáte taký vo svojom obvode, potom programovanie pomocou ISP sa tiež stane nemožným. Mikrokontrolér bude v podstate čakať na taktovanie z neexistujúceho obvodu. Ako z tejto situácie von? Je to veľmi jednoduché - dajte mikrokontroléru zdroj hodín a opravte poistky. Najčastejšie inštalované CKSEL všetky nuly – taktovanie z externého generátora. V tomto prípade môžete zostaviť obvod, ktorý generuje meander (frekvencia nehrá zvláštnu úlohu, hlavná vec je, že leží v rámci možností mikrokontroléra) a aplikovať ho na nohu XTAL1. Potom môže byť mikrokontrolér prebliknutý cez ISP. Prvá vec, ktorú musíte urobiť, je resetovať poistky na výrobné nastavenia. Ak CKSEL všetky sú nastavené na 1 – taktovanie z externého kremeňa. Zaveste kremeň a potom bude mikrokontrolér opäť prístupný cez ISP.