Az AVR (ATMega, ATTiny) chipek programozási folyamatának része az ún. biztosítékbitek (vagy konfigurációs bitek) beállítása is. Ezek azok a speciális beállítások, amelyek segítségével megváltoztathatóak a chipek működésének jellemzői. A cikkben elsősorban az Arduino lappon elterjedt (Uno, Pro mini, Nano) ATMega 328 lesz a középpontban, de az ATTiny család mellett az ATMega2560 chipről is előkerül néhány karakter…
Példaként néhány lehetőség, amit a biztosítékbitek értékének megváltoztatásával lehet megtenni:
különböző órajel-források kiválasztása és a chip futási sebességének módosítása,
a szükséges minimális működési feszültség beállítása,
bootloader méretének beállítása és a használatának engedélyezése/tiltása,
soros programozási mód tiltása,
törléskor az ERPROM tartalmának megőrzése.
Az internet bugyraiban sok cikk megtalálható az AVR-ek bootloaderének visszaállításáról, a programozások mikéntjéről (→ Arduino, mint programozó és a bootloader (ArduinoISP)). De amikor a biztosítékbitekre kerül az ismerkedés során a sor, akkor a „nézd meg az adatlapban”, „használd a segédprogramokat” vagy „kérdezd meg a fórumok valamelyikében” tanácsokat lehet találni. Olyan oldalt, ami összeszedte a szükséges információkat és kezdő szinten elmagyarázta volna – csak nagyon hosszas kereséssel lehet jót találni.
Fontos! A biztosítékbitek helytelen vagy hibás beállítása a chip (látszólagos vagy ideiglenes) működésképtelenségét okozhatja! A visszaállításhoz speciális programozóra lehet szükség egyes esetekben – de egy kis odafigyeléssel azonban meglehetősen egyszerű megérteni a működésüket. Azonban, ha valamit sikerül elrontanod, magadra vess! A szokásos jogi nyilatkozat részemről: „bármely információ a legjobb tudásom alapján került leírásra, de az alkalmazásból származó közvetlen vagy közvetett károkért felelősséget nem vállalok”. Az itt leírt információk a tapasztalataim, az Arduino és számos elektronikai szakmai fórum leírásán alapulnak. Ha hibát találsz, akkor megköszönöm és kérlek az oldal végén a hozzászólásoknál tudod jelezni, vagy a Kapcsolat oldalon keresztül.
Az AVR chipeknél jellemzően 3 byte-ba lettek összeszervezve a biztosítékbitek:
alacsony helyi értékű biztosíték (low fuse),
magas helyi értékű biztosíték (high fuse),
bővített/kiterjesztett biztosíték (extend fuse),
és van egy negyedik konfigurációs byte is, ami a chip írás/olvasás védelméért felel.
Minden byte 8 bit-ből áll, és minden bit egy külön beállításra van hatással. Amikor a biztosítékbit beállításáról/törléséről van szó, valójában az adott low/high/extend biztosíték byte adott bitjének értékéről beszélünk. A bit beállítása során az 1 azt jelenti, hogy nincs beállítva/nincs programozva, a 0 (nulla) pedig azt jelenti, hogy beállított/programozott az adott bit.
A biztosítékok programozásakor mindig byte-ként hivatkozok rájuk, így az értékük 0…255 közt lehet. Ezt az adatot le lehet írni decimális számként vagy binárisként is – de a leggyakoribb a hexadecimális írásmód. Azaz írhatjuk 255, vagy B11111111 vagy a 0xFF formátumban is: mindegyik ugyanazt jelenti.
Fontos! Minden biztosíték esetében az 1 érték azt jelenti, hogy nincs beállítva, és a 0 (nulla) érték azt jelenti, hogy beállított. (Érdekes, nekem fordított ez a logika.)
A Low Fuse paraméterezi a chip órajelforrását, a chip sebességével és az indítási késleltetéssel összefüggő beállításokat.
Az ATMega chipek különböző sebességgel futtathatóak – ezt a „ütemet” nevezzük órajelnek. Az órajel sebességét frekvenciának hívjuk, hiszen jel/sec alapon [Hz] adjuk meg. A chip sebességét az órajel határozza meg, és az órajel forrása a CKSEL biztosítékbit-csoport segítségével választható ki.
Az órajel származhat a chipen belüli RC-oszcillátorból, külső kristályból, külső rezonátorból vagy egy külső órajelforrásból. Az Arduino alkalmazások esetén általában külső, 16 MHz -es kristály vagy rezonátor került beépítésre.
A fényképen többféle Arduino Uno központi chip 16 MHz-es órajelforrása látható a beépítési környezettel.
Az órajelforrást, ha kapcsolási rajzon ábrázolva kell megkeresni:
A 16 MHz kvarc használatához az ATMega chipnek meg kell mondani, hogy az órajele nem az alapértelmezett belső RC, hanem külső, nagyfrekvenciájú kvarckristály. Ezt a CKSEL biztosítékbittel kell a chipen beállítani. Gyakori hiba, hogy a kristály helyesen van bekötve az áramkörbe, ám elfelejtődik megmondani a chipnek, hogy használja is azt.
Az Arduino lapok jellemzően külső órajel kristályt használnak, ám az ATMega két beépített oszcillátorral is rendelkezik:
egy 128 kHz -es RC oszcillátorral, valamint
egy kalibrálható RC oszcillátorral.
A „külső órajelforrás” opció lehetővé teszi, hogy a chip külső négyszögjel alakú órajelet használjon.
Ennek akkor van jelentősége, ha precízen szükséges két chip szinkronban járjon. A legpontosabb – kvarckristáy alapú órajelek – ~10 ppm pontosságúak, azaz 16MHz ± 160 Hz frekvenciával működnek. Közös órajel esetén viszont a két chip közt 0.00 Hz az eltérés. De nagy széria esetén, ha a chipek közel vannak egymáshoz – ott is olyan alkalmazzák ezt a megoldást. Így laponként néhány dollárcent megspórolható – 100e db széria esetén már mérhető a megtakarítás! A külső órajelet az XTAL1 kivezetéshez kell csatlakoztatni.
Tipp: precíz külső órajelforrás lehet egy oszcillátorkocka is – ez hőfok-kompenzálással, tápfeszültség figyeléssel, zavarvédelemmel is el van látva.
Oszcillátor beállítása
A CKSEL biztosítékbitek beállítása Arduino esetén: CKSEL3=1, CKSEL2=1, CKSEL1=1 és a CKSEL0=1. Ennél a beállításnál a belső áramkör behangolása optimálisan 8MHz és 16MHz közötti kristályhoz ideális. Ha lassabb, például 6 MHz -es kristályt kell használni, akkor a beállítás: CKSEL3=1, CKSEL2=1, CKSEL1=0 és CKSEL0=1. Ezzel a beállítással a 3,0-8,0MHz tartomány került kiválasztásra. A belső RC oszcillátor 8 MHz -es használatához a beállítások: CKSEL3=0, CKSEL2=0, CKSEL1=1 és CKSEL0 = 0.
SUT1/SUT0 (Start Up Time – indulási késleltetés)
A kristályoknak és oszcillátoroknak megfelelő feszültségre van szükségük a megfelelő működéshez. Az ATMega chip elindításakor időbe telik (igaz rövid), amíg a feszültség eléri a stabil működéshez szükséges szintet. Amíg a feszültség fokozatosan emelkedik, előfordulhat, hogy az órajel-forrás nem a megfelelő, pontos frekvenciával rezeg vagy lengve, egyenetlen és ingadozó frekvenciával kezd működni. A biztosítékbittel beállítható, hogy adott késleltetéssel induljon csak el az órajel a tápfeszültség megjelenéséhez képest.
Az indítási késleltetési idő beállítására a CKSEL0, a SUT1 és SUT1 együtt használható.
A BOD (Brown Out Detection – Tápfeszültség-figyelés) funkció később kerül kifejtésre.
Az Arduino a maximális indítási késleltetést használja, ez 14CK + 65 ms (CKSEL0=1, SUT1=1 és SUT0=1), ami az ATMega-328/328P chip alapértelmezett beállítása is. A 14CK (14 órajel) + 65 msec időtartam alatt a rendszerben a feszültség az órajel-áramkör indulásához szükséges 1.8V-ot eléri illetve ezt már meghaladja.
CKDIV8 (Clock Divide – 1/8-ad órajelosztó)
Az ATMega-328/328P chipek beépített RC oszcillátorral rendelkeznek, amelynek alapértelmezett frekvenciája 8.0MHz. A bontatlan, új chipek esetén a 8-as osztóbit be van kapcsolva, így a chipek 8MHz RC sebesség/8 = 1MHz belső, RC alapú órajelről működnek (RC jelentése: az órajelet ellenállás-kondenzátor párosa határozza meg). Az indítási idő alapértelmezetten maximálisra van állítva. (CKSEL=„0010”, SUT=„10” és CKDIV8=„0”). Ezzel a beállítással a chip mindenféle külső órajelforrás nélkül is működik – és a későbbi programozás során lehet átállítani bármely más órajel-forrásra.
A CKDIV8 használata akkor mindenképp szükséges, ha a külső órajelforrás frekvenciája meghaladja a chip működési tartományában megadottat (ATMega328 esetén fmax=20MHz!). És az ATMega chipek alacsony feszültségeken is használhatók, azonban minél alacsonyabb a tápfeszültségük, annál lassabb a maximális sebesség lehetősége – ekkor is szükség lehet a DIVCK8 használatára. Fontos! Bármely órajel-forrás esetén használható a DIVCK8 osztó használata!
AVR chipek órajelforrásai. A System Clock Prescaler részlet jelenti a DIVCK8 használatát.
CKOUT (Clock Out – órajelkimenet)
Az AVR chipek belső, működési órajele a CLKO (Clock Out) kivezetésre irányítható (ATMega 328 estén ez a PortB.0 kivezetés (Arduino: D8)). Ez például akkor hasznos, ha az órajelre más áramkörök meghajtásához van szükség, vagy szinkronban kell járatni két AVR chipet. A CLKO kivezetésen bufferelve minden esetben megjelenik a működési órajel – függetlenül attól, hogy mi az órajel eredeti forrása! Az új chipek alapértelmezett beállítása CKOUT=1 (nincs engedélyezve az órajel kimenet).
Felső biztosítékbitek (High Fuse)
A high fuse több, különféle beállítást reprezentál. A sok funkció közül szinte mind valamilyen speciális beállításra van hatással. Az itt paraméterezhető eszközök:
a watchdog időzítő,
az eeprom megőrzése vagy törlése és a
bootloader működésének beállításai.
RSTDISBL (Reset Disable – külső reset letiltása)
A PortC.6 kivezetés a kontroller Reset kivezetését is jelenti – azzal közös. A Reset funkciója: a chip újraindítása, azaz amikor alacsony szintről magasra vált a bemenetre adott jelszint, akkor aktiválódik. Így működik az Arduino esetén is: amikor megnyomásra kerül a Reset gomb, akkor a PortC.6 chipkivezetés a GND-re kerül lehúzásra és a chip alaphelyzetbe áll.
A PortC.6 normál I/O kivezetésként is használható, de ez a Reset funkció letiltását jelenti. Fontos! Ez azt is jelenti, hogy a chip már nem programozható a leggyakoribb ISP módon! A Reset tiltásával plusz bemenethez lehet jutni, azonban a chip újraprogramozása így jóval bonyolultabbá vált. Tipp: Így jobb ezt a beállítást nem piszkálni – ez az egyik lehetőség, amin jobb nem változtatni.
Ha a RSTDISBL engedélyezve van (külső Reset letiltva), akkor az indítási idő (SUT1 és SUT0) 14CK + 4,1 ms-ra változik, hogy biztosítsa a (nem ISP alapú) programozási módba való belépést. Alapértelmezés szerint a beállítás RSTDISBL=1 (nincs beállítva) – azaz a Reset kivezetés engedélyezve van.
DWEN (debugWIRE enable – debugWire engedélyezés)
A kis lábszámú ATMega chipek beépített hibakereső eszközökkel rendelkeznek, amelyek alapértelmezés szerint ki vannak kapcsolva. A hibakeresési mód a DWEN biztosítékbittel kapcsolható be – azonban a debugWire ugyanazt a kivezetést használja, mint a Reset (PortC.6)! Így, ha a DWEN engedélyezve van, akkor ez a Reset helyébe lép. Így az ISP programozás elérhetetlenné válik (akárcsak a RSTDSBL esetén)!
A debugWire segítségével a chipen belüli futásidő alatti – valódi – hibakeresésre van mód: de ehhez debugWire kompatibilis programozóra van szükség. Ilyen programozó például az AVR-Dragon. Azonban az Arduino keretrendszer szoftver nem tartalmaz AVR-hez illeszkedő hibakereső eszközt – így ez a funkció csak az AVR-Studio-val használható (a módszertanról és alkalmazásról a Debugging Arduino using debugWire oldalon található egy jó cikk az induláshoz).
Az ATMega chipek elsősorban soros programozással programozhatók. A soros programozást az SPI interfészen keresztül valósul meg az ATMega chipek esetén. Ehhez az SCK (órajel), MOSI (bemenet) és MISO (kimenet) kivezetések valamint a Reset láb elérhetősége szükséges. Ha letiltásra kerül a soros programozás, akkor többé nem használhatóak az SPI kivezetések a chip programozásához (de a futó programban az SPI felület továbbra is elérhető)! A soros programozást az ún. Lockbitekkel is meg lehet akadályozni!
A normál használathoz és fejlesztéshez az SPIEN maradjon engedélyezett státuszban. Ha azonban a program már végleges és nincs szükség további chip átprogramozásra – akkor ezzel az opcióval megakadályozható, hogy az ISP programozófelületen el lehessen érni a chipet.
Az alapértelmezett beállítás: az SPIEN engedélyezve van (SPIEN=0).
Az RSTDISBL, SPIEN és DWEN biztosítékbitek átállításával meggátolható az ATMega chipek egyszerű programozása. Kezdőként, ezek elállításával a chipből ki lehet zárni magunkat.
Fontos, hogy a biztosítékbitek byte szervezésűek, így nagyon könnyű elnézni 1-1 bitet a beállítási értékek közt. Mind az ISP tiltását/engedélyezését, mind az órajelforrás megadását nagyon körültekintően kell végezni!
WDTON (Watchdog On – Watchdog időzítő automatikus bekapcsolása)
Az úgynevezett WatchDog (Őrző Kutya) felügyelet alapvetően egy felhúzható időzítő, amely a chip alaphelyzetbe állítását eredményezi, ha a beállított idő alatt nem kerül nullázásra. Ez akkor lehet hasznos, ha instabil kód fut a rendszerben, vagy olyan komplex rendszer kerül kialakításra, amelyet nem szabad hagyni, hogy lefagyjon.
Ha a watchdog időzítő engedélyezve van, a futó program összeomlása vagy lefagyása esetén az időzítő számlálója (WatchDog Timer) túlcsordul, és alaphelyzetbe állítja a chipet – ez a reset gomb megnyomásához hasonló újraindítást okoz egy futó Arduino esetében.
A Watchdog Timer szoftveresen is aktiválható a futó programból, így a biztosítékbit beállításait nem igazán kell használni. Alapértelmezés szerint a WatchDog időzítő ki van kapcsolva (WDTON=1).
Az ATMega chip átprogramozásakor a Flash memória közvetlenül az új kód feltöltése előtt törlődik. Normál körülmények között a törlés az EEPROM-ra is vonatkozik. Az EESAVE biztosítékbit segítségével beállítható, hogy az EEPROM ne kerüljön mégse ekkor törlésre. Ez például akkor hasznos, ha a programkódot frissíteni kell, de a tárolt paraméterek maradjanak változatlanok. Az alapértelmezett érték, hogy az EEPROM is törlésre kerüljön programozáskor (EESAVE=1).
Érdemes ezt a biztosítékbitet beállítani. Az EEPROM korlátozott életciklusú, így minél kevesebbszer van írva, annál jobb. Az EEPROM törlése nincs hatással az új kód feltöltésére és a projektek többsége nem is használja az EEPROM memóriát, így annak nem törlése (vagy nemtörlése) nem jelent problémát.
BOOTSZ1 & BOOTSZ0 (Boot Size – Bootloader méret)
Az ATMega chipek bootloader használatára is programozhatóak. Ez egy kis program, amely a chip bekapcsolásakor vagy alaphelyzetbe állításakor először elindul. A bootloadert (lefordítva kb. rendszerindító betöltő) általában az eszköz inicializálására, külső kommunikáció ellenőrzésére valamint szoftverfrissítés kontrolleroldali megvalósítására lehet használni. Az Arduino a bootloader segítségével kommunikál a csatlakoztatott számítógéppel, hogy vár-e új program feltöltésre. Ez az oka annak, hogy az Arduino minden esetben újraindul, amikor a kommunikációs csatorna megnyitásra kerül a számítógép irányába.
A bootloader a programmemóriában tárolódik, ugyanabban a memóriában, amit a felhasználói program is használ. Mivel a bootloader funkcióitól, forrásától, tudásától függően különböző méretű lehet – az ATMega chipen beállítható, hogy mennyi helyet foglaljon le. A normál (régebbi) Arduino bootloader 2kB méretű, de az újabb Optiboot (az UNO-n is használt) csak 0,5kB helyet foglal. Ha az optiboot bootloader kerül használatra, akkor a fennmaradó 1.5kB a főprogramhoz használható.
A bootloader a programmemória címtér végén található.
Ha a chipben van bootloader, akkor a BOOTSZ és a BOOTRST biztosítékbit együtt használandó. A BOOTRST biztosítékbit megmondja az ATMega chipnek, hogy bootloadert kell futtatni induláskor, míg a BOOTSZ azt a memóriacímet adja meg, ahol a rendszertöltő elindul. Ha a BOOTRST nincs beállítva, akkor a felhasználói alkalmazás a BOOTSZ beállításoktól függetlenül a teljes memóriát használhatja és a főprogram indul el.
A táblázatban a méretek ún. szóban (word) értendőek (1x word (16 bit) – 2x byte(8 bit)) – azaz 256 word = 512 byte. Az érintetlen, új chipek alapértelmezett értéke BOOTSZ1=0 és BOOTSZ0=0, ami azt jelenti, hogy ha a BOOTRST be van kapcsolva, akkor 4 kB memóriát foglalhat el a bootloader.
BOOTRST (Boot Reset – bootloader engedélyezés)
Az ATMega chipek tartalmazhatnak botloadert, de ekkor a chipet be kell állítani, hogy ez a program induljon el – ez a BOOTRST biztosítékbit beállításával történik. Ha nincs beállítva, a chip a 0x0000 kezdőcímre ugrik és a alapprogram indul el.
Az alapértelmezett beállítás: BOOTRST=1 (nincs engedélyezve).
Kiterjesztett biztosítékbitek (Extend Fuse)
A bővített biztosítékbitek (extend fusebit) elsősorban az ún. brown-out-detect (BOD) beállítására szolgálnak. A fennmaradó biztosítékbitek későbbi fejlesztésre vannak fenntartva.
BOD (Brown-Out-Detector – feszültségszint-figyelés)
Az ATMega chipek instabillá vagy megbízhatatlanná válhatnak, ha elégtelen feszültség mellett üzemelnek. Például az ATMega 328/328P biztonságosan működik 16 MHz-en, ha legalább 4V tápfeszültséget kap. Ha 4V alatti a tápfeszültsége, akkor az azt jelenti, hogy a chip valószínűleg hibázni fog. Ez problémát jelent, ha az eszközt érzékelőkkel használjuk a mérésekhez, vagy pontos időzítésekre van szükség. A csökkenő feszültség esetén a kontroller által előállított órajel frekvenciája elcsúszik, a SRAM tartalma sérülhet, az ADC mérés pontatlanná válik, de egyéb misztikus hibák is megjelenhetnek.
Annak érdekében, hogy a chip a megfelelő feszültségtartományban üzemeljen, beállítható egy minimális működési feszültségszint. Ha a feszültség e szint alá esik, akkor a chip automatikusan újraindul (illetve amíg a BOD feszültségszint alatt van, reset állapotban van tartva). Alapvetően, ha a tápfeszültség a BOD szint alatt van, a chip resetelve marad – ennek minden következményével: összes regiszrer alapértékre kerül, a kivezetések bemenetté válnak, a felhúzó-ellenálások ki vannak kapcsolva…
A BOD szükséges értékét a kontroller adatlapjából nézhetjük meg. A chip frekvenciája egy stabil feszültséget feltételez. Az ez alatti legmagasabb BOD értéket kell a működési határnak kijelölni.
16MHz működés esetén a feszültségigény 4.5V. Az ez alatti legmagasabb BOD: 4.3V.
Az érintetlen, új chipek alapértelmezett értékei: BODLEVEL2=1 (nincs beállítva), BODLEVEL1=1 (nincs beállítva), BODLEVEL0=1 (nincs beállítva). Összességében: BOD nincs bekapcsolva/engedélyezve.
Védelmi bitek (Lock Bit)
A lock-bitek (záróbitek) használhatók a programmemória olvasási/írási hozzáférésének korlátozására. A bootloader rész és az alkalmazás rész saját zárbitekkel rendelkezik, és az egyes területekhez való hozzáférés külön-külön beállíthatóak.
BLB1x (Boot Lock Bit 1 – bootloader védelem)
A BLB1x (bootloader záróbit) engedélyezi a Bootloader területen a program-memória szoftverből történő írását illetve olvasását. Ezek lehetőségei:
BLB12=1 és BLB11=1 : Nincs korlátozás , szoftverből írható és olvasható is a bootloader flash területe,
BLB12=1 és BLB11=0 : A bootloader területe szoftverből NEM írható,
BLB12=0 és BLB11=0 : A bootloader területe szoftverből NEM írható, olvasni csak a bootloader programból lehet,
BLB12=0 és BLB11=1 : A bootloader területét olvasni csak a bootloader programból lehet.
Ha a bootloader a BOOTRST beállításábal nincs engedélyezve, akkor irreleváns a beállítás. Alapértelmezetten a BLB12=1 és BLB11=1 (nincsen korlátozás az írás/olvasásra a boot területre).
BLB0x (Boot Lock Bit 0 – főprogram memória védelem)
A BLB0x (főprogram memória záróbit) engedélyezi a Bootloader területen a program-memória szoftverből történő írását illetve olvasását. Ezek lehetőségei:
BLB02=1 és BLB01=1 : Nincs korlátozás , szoftverből írható és olvasható is a főprogram flash területe,
BLB02=1 és BLB01=0 : A főprogram flash területe szoftverből NEM írható,
BLB02=0 és BLB01=0 : A főprogram flash területe szoftverből NEM írható, olvasni csak a főprogramból lehet,
BLB02=0 és BLB01=1 : A főprogram területét olvasni csak a főprogramból lehet.
Ha a bootloader engedélyezése be van kapcsolva, akkor a Flash memória főprogram és bootloader területre van felosztva. Ha a bootloader nem aktív, akkor a teljes Flash memória főprogramhoz tartozik. Alapértelmezetten a BLB02=1 és BLB01=1 (nincsen korlátozás az írás/olvasásra a Flash főprogrami területére).
LB (Lock bit – védelmi bit)
A Lock bitek a külső soros és párhuzamos programozók elleni védelmet határozzák meg. A beállítások hatása a külső programozó műveleti lehetőségeire:
LB2=1 és LB1=1: Nincsen semmilyen korlátozás
LB2=1 és LB1=0: A Flash és EEPROM tartalom nem programozható (de olvasható marad!)
LB2=0 és LB1=0: A Flash és EEPROM tartalom nem programozható és nem is olvasható
A külső programozó esetén (ha a tiltások érvényesek), akkor azok a biztosítékbitekre is vonatkoznak. Fontos! A biztosítékbitek még a memóriatartalom olvasás elleni védelme esetén is kiolvashatóak maradnak. Átírni, módosítani nem lehet őket. A Chip típusának azonosító byte-jai bármely beállítás esetén olvasható maradnak!
Tipp: ha egy chipet védelemmel zárunk le, akkor az újraíráshoz a feloldás a chip teljes törlésével elérhető. Így a chip gyakorlatilag üresen rendelkezésre áll, a védett program nem nyerhető ki belőle. Fontos! Arduino esetén a bootloader segítségével a lezárt chip adattartalma kiolvasható – hiszen azt a bootloader végzi és a külső programozó beállításainak nincs hatása a bootloader működésére! Ha olyan chipre van szükség (szoftvervédelem), ami a bootloaderrel csak a feltöltést engedélyezi – az a bootloader újraírásával/újraprogramozásával lehetséges.
Egyes ATMega328P kontrollerek alapértelmezett beállításai
A felhasználástól függően más beállítás lehet az ATMega328P chipeknél. A felsorolás az Arduino beállításokat hasonlítja össze a még érintetlen kontrollerrel.
OptiBoot/Uno ATMega-328 biztosítékbitek – a különbség
Optiboot Boot Loader
Az optiboot bootloaderének használata illetve a Duemilanove (nano old) bootloader közötti különbség – ha csak a biztosítékbiteket nézzük, akkor az a bootloader részére lefoglalt hely mérete. Az optiboot 512 byte, a normál bootloader 2048 byte (2 kbyte) helyet foglal le a flash memóriából.
Persze a kisebb méretbe kevesebb funkcionalitás fért bele:
hiányzik a beégetett program ellenőrzése,
az EEPROM feltöltése és ellenőrzése,
az optikai visszajelzés egyszerűbb.
Optiboot esetén 31,5kbyte, régi bootloader esetén 30kbyte programmemória marad szabadon.
Ha kicserélésre kerül a Nano lapkán a bootloader, akkor a biztosítékbitet is át kell állítani, hogy több szabad flash memória legyen elérhető a főprogram számára. Tipp: ha nagyobb bootloader terület van lefoglalva, mint a ténylegesen szükséges, akkor a bootloader előtt fennmaradó részen üres flash van (FF adattartalom). Ennek a utasításnak a jelentése: nop – azaz 1 órajel várakozás. Így a bootloader program indulása néhány microsec késleltetéssel indul…
Egyéb AVR chipek egyéb beállításai
Az Arduino által alapvetően támogatott processzor az ATMega2560 (Mega lapok) illetve a ATMega32U4 (Leonardo). Ezen chipek biztosítékbitjeinek működése azonos a megismert ATMega328 chippel.
ATMega2560 kiegészítő biztosítékbitek
Az ATMega2560 lockbitjei közül értelemszerűen a debugWire nem található meg illetve a Reset kivezetés letiltásának sincs értelme a nagyszámú elérhető lábak miatt. A chip ezek helyett két másfajta konfigurációt kapott (Az Arduino szoftver sem a JTAG alapú programozást, sem a hibakeresést nem támogatja) :
JTAGEN (JTAG Enable – JTAG engedélyezés)
Ez a debugWire helyett érhető el azonosan a High Fuse területen. A kis lábszámú chipek esetén az egyvezetéskes debugWire segítségével volt mód a hibakeresésre (a reset kivezetés hazsnálatával). A nagyobb AVR chipek esetén ez erre eredetileg a JTAG szolgált. A hibakeresés és programozó felület az ATMega2560 esetén a soros és párthuzamos módok mellett a JTAG-on keresztül is lehetséges. A Lock Bitek programozói módok tiltása a JTAG-ra is kiterjed az ezzel rendelkező chipek esetére!
Fontos! A JTAG engedélyezése a chip F portjának 4…7 kivezetéseit lefoglalja, így itt az analóg jelek mérése nem lehetséges! (Arduino alatt A4..A7 ekkor nem használható!)
Alapértelmezett beállítás új chip esetén JTAGEN=0 (JTAG engedélyezett).
OCDEN (On Chip Debug Enable – chip hibakeresés engedélyezés)
Ha a JTAG programozás engedélyezett, akkor annak kibővítése, hogy ugyanezen JTAG felületen át a chip hibakereső módját használni lehessen.
Alapértelmezett beállítás OCDEN=1 (OCDEN tiltva).
ATMega32U4 kiegészítő biztosítékbitjei
Az ATMega32U4 lockbitjei közül értelemszerűen a debugWire nem található meg illetve a Reset kivezetés letiltásának sincs értelme a nagyszámú elérhető lábak miatt. A chipben elérhető konfigurációs bitek a kissé eltérő feléíptés miatt kaptak helyet (a Leonardo beépített USB-vel rendelkezik).
HWBE (Hardware Boot Enable – boot mód hardware alapú engedélyezése)
A beépített USB port miatt a bővített (Extend) biztosíték biteknél BOD mellett érhető el a HWBE funkció. Ennek bekapcsolt állapotában az ATMega32U4 a gyárilag előre a flash memóriába beprogramozott USB bootloadert indítja el – ha a HWB kivezetésen keresztül a chipen ez engedélyezve van! Azaz mind a küslő lábon, mind a biztosítékbitek közt engedélyezni szükséges, hogy beépített bootloader elinduljon. Tipp: a bootloader kialakítása során lehetséges az Arduino-féle megközelítés: a bootloader egy idő letelte után a főprogramra adja tovább a vezérlést, vagy lehetséges az Atmel megközelítése: a bootloader a frissítésre való és a külső lábbal kerül beállításra, hoyg induljon el. Nincs ekkor időtúllépés és egyéb megoldás, vagy a bootloader fut vagy a főprogram.
Fontos! Ha a bootloader felülírásra kerül, akkor a bootloader indulására is ugyanúgy hatással van a HWBE láb! Ezen át kikényszeríthető a bootloader indítása (még ha a BOOTRST kikapcsolt állapotban is van!)
Alapértelmezett beállítás: HWBE=0 (engedélyezett)
JTAG és OCDEN
Az ATMega32U4 chip a JTAG és a OCDEN biztosítékbitekkel rendelkezik. A működésük megegyezik az ATMega2560 chipnél leírtakkal – azzal a különbséggel, hogyha a JTAG engedélyezve van, akkor az A0..A3 kivezetések nem érhetőek el.
Alapértelmezett beállítás új chip esetén JTAGEN=0 (JTAG engedélyezett) és OCDEN=1 (OCDEN tiltva).
Zárszó
A chipek konfigurációja a biztosíték és lock bitekkel könnyen kezelhető. Azonban tekintettel kell lenni arra, hogy a chipek könnyen tetszhalott állapotba is rakhatóak! Az Arduino keretrendszer a gyári beállításait a boards.txt állomány tartalmazza.
Minthogy a támogatott chipek köre egyre bővül, így az adatlapok ismerete egyre fontosabb lehet. Ez a cikk a konfigurálás kisebb rejtelmeibe próbált bevezetni. Ha valami kimaradt a cikkbőll, akkor azt a Fórumban, a Kapcsolat oldalon vagy a lap alján a hozzászólások közt is lehet jelezni.
To provide the best experiences, we and our partners use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us and our partners to process personal data such as browsing behavior or unique IDs on this site and show (non-) personalized ads. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Click below to consent to the above or make granular choices. Your choices will be applied to this site only. You can change your settings at any time, including withdrawing your consent, by using the toggles on the Cookie Policy, or by clicking on the manage consent button at the bottom of the screen.
Funkcionális Always active
A technikai tárolás vagy hozzáférés szigorúan szükséges az előfizető vagy felhasználó által kifejezetten kért konkrét szolgáltatás használatának lehetővé tételének jogos céljához, vagy kizárólag a közlés elektronikus hírközlő hálózaton keresztüli továbbításának céljához.
Beállítások
A technikai tárolás vagy hozzáférés a jogos célból szükséges, hogy olyan beállításokat tároljunk, amelyeket az előfizető vagy a felhasználó nem kért.
Statisztika
Kizárólag statisztikai célokra használt technikai tároló vagy hozzáférés.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
A technikai tárolás vagy hozzáférés felhasználói profilok létrehozásához szükséges hirdetések küldéséhez, illetve a felhasználó nyomon követéséhez egy vagy több weboldalon hasonló marketingcélokból.