TÁMOGATÁS
Ha tetszik az oldal, kérlek támogasd egy minimális összeggel!
|
KÖZÖSSÉG
Üzenőfal

Nyomj egy tetszik gombot!
Oszd meg!

Küldj mailt!
|
|
AVR - biztosíték (fuse) bitek
Sok hobbistát riaszt el az AVR-ek programozásától az úgynevezett fusebitek beállításainak nehézsége. Bár a letöltések között is találni egy interaktív PDF fájlt segítség képpen, és az engbedded.com oldalon is van egy jól használható fusebit kalkulátor, ezek mit sem érnek, ha nem vagyunk tisztában a biztosítékbitek mibenlétével, funkcióival. A helyzetet tovább bonyolítja a különböző programozó szoftverek
beállításainak különbözősége. Ez utóbbi probléma megoldása az adott program súgójának tanulmányozása lehet. A fusebitek megismerésében szertnék segíteni az alábbi írással. A leírás az AVR Tippek-trükkök ingyenes tanfolyam része, teljes egészében Cseh Róbert (TavIR) munkája, az ő hozzájárulásával teszem közre változatlan szöveggel. Ha valakit érdekel a tanfolyam többi része, ITT tud feliratkozni rá.
Az eszközeink finomhangolása, működtetése szoftverből történik. Azonban van néhány olyan tulajdonságuk, amelyeket nem lehet szoftverből elérni. Ezeket az ún. biztosítékbitekkel konfiguráljuk.
Mi az a biztosítékbit?
A kérdés könnyű, ám a válasz kevésbé.
A belső flashmemória egyik speciális területe, ahol minden egyes bitnek önálló jelentése van. Némelyek minden chip esetén, néhányuk csak 1-1 chip esetén létezik. Itt a leckében csak a gyakoribbakat járjuk körbe...
Fontos! Egyszerre csak egy paramétert szabad változtatni és menteni. Ha valamit rosszul állítunk be és tetszhalott lett a chip: tudjuk, hogy mi történt.
Még fontosabb! Ha valaminek nem tudod a következményét, vagy nem tudod, hogy mire való: NE PISZKÁLD!
Arduino alatt nagy gondunk nincs az eszközzel, mert nem férünk hozzá a biztosítékbitekhez. Készen kapjuk a chipet bootloaderrel felprogramozva és előre konfigurálva.
Bascom-AVR vagy egyéb más rendszerek alatt nekünk kell programfordításkor megadni, hogy milyen órajelről, milyen chipet használunk:
$crystal = 14745600
$regfile = M128def.dat
GCC, WinAVR, AVR-Studio alatt erre a makefile állomány szolgál.
Fontos! A fordításkor illetve a programban megadott beállítások a fordítóprogramnak szólnak, nem a programozónak!
Fontos! A fordításként kapott HEX vagy BIN állomány semmiféle információt sem tartalmaz a chipről és a konfigurálásáról!
Alapbeállítások
Az első AVR chipek csak néhány egyszerű konfigurálást tartalmaztak. Ezeket hívták egyszerűen fusebit-nek (biztosítékbitnek). Ide tartozik:
Órajel
A korai chipek semmiféle teljes órajelgenerátorral nem rendelkeztek. Egyszerűen külső négyszögjelet vártak el, vagy rezonátort/kvarcot lehetett rájuk akasztani. A mai chipek órajele már lehet belső RC-tag által előállított (1-2-4-8MHz, 128kHz), külső RC-tagból származó vagy rezonátor/kvarcból kinyert rezgés. Ezek besorolása, konfigurálása sok lehetőséget biztosít. Ami beállítás vagy figyelmetlenség általában hibát okoz:
External clock = külső négyszögjel,
External quartz/resonator = külső kvarc!
Hibás órajel-beállítás esetén a chip ISP felületű programozáskor tetszhalott állapotba kerül! Ekkor általában megoldás lehet bármilyen órajel-generátor által előállított 1..16 MHz jel bekötése az órajelek XTAL1 kivezetésére.
Felmerül egy kérdés: Miért van ennyi féle órajel? Mert mindig az adott feladat határozza meg a pontosság, kalibrálhatóság, hőfok/páratartalom-függőség és költség alapon, hogy melyiket válasszuk.
CkOpt
A magas (~1cm) kvarcok esetén a berezgés nehezen indul. A CkOpt engedélyezésével a kvarc két oldala közt 4V feszültség alakul ki, míg a normál beállításkor ez 1V. Az első megváltoztatott jellemző magas kvarc esetén a CkOpt legyen!
CkOut
Egy belső kapun keresztül az órajel leválasztásra kerül. Így a kvarckivezetések melletti lábon az órajel elérhető. Így ideális megoldás ez kizárt IC-k órajel-generátorának létrehozására.
Extended Fuse
A biztosítékbitek száma idővel megnövekedett, a bővülő funkcióknak köszönhetően. Így előbb a High Fuse, majd az Extend Fuse is bevezetésre került.
Reset disable
Kis lábszámú chipek esetén minden láb számít! Itt van arra mód, hogy a reset kivezetést I/O lábként használjuk.
Fontos! Ha a reset-kivezetést I/O-ként konfiguráltuk, akkor ezután csak a nagyfeszültségű soros/párhuzamos égetővel programozhatjuk!
dW/JTAG enable/disable
A chipek futásidő alatti online monitorozását oldhatjuk meg a nagyobb chipeken a JTAG, a kisebbek esetén debugWire felületen keresztül. Fontos! A debugWire a Reset kivezetésen át kommunikál, így bekapcsolása után sem Reset kivezetésként, sem I/O lábként nem használható!
Fontos! A JTAG kivezetés a nagyobb chipeken négy analóg bemenettel közös, így futásidő alatt ezek az analóg kivezetések nem használhatóak ADC funkcióra!
Preserve EEPROM / EESAVE
A Preserve EEPROM biztosítékbit mondja meg, hogy a chip törlésekor/újraírásakor a nemfelejtő memória tartalma megmaradjon-e. Ennek akkor van gyakorlati haszna, ha itt pl. kalibrációs adatokat tartunk, amit nem akarunk újra-meg-újra beírogatni...
BOD vagyis Brown-out Detector
Ez a funkció a tápfeszültséget figyeli. Az egyik korábbi leckében szó volt a memória korrumpálódásáról - alacsony tápfeszültség esetén (<1.6V). A BOD beállítható feszültségszint alatt a chipet RESET állapotban tartja, majd a feszültség visszatértekor a chip alaphelyzetből újraindul. Ökölszabály, hogy 5V rendszerfeszültség esetén a BOD 4.3V, míg 3.3V rendszernél 2.7V-ra állítandó.
Bootloader size és BootRst
A chipek önprogramozó képességét használjuk ki az emlegetett bootloaderrel. Maga a chip a feltöltött programról nem képes eldönteni, hogy szándékosan van a memóriaterület végén, vagy ténylegesen bootloaderként működik. Ezt kell konfigurálnunk.
A BootRST bittel azt mondjuk meg, hogy a chip a főprogramot indítsa bekapcsoláskor a $0000 memóriacímről, vagy pedig a bootloader programot futtassa a Bootloader size által adott címtől. Ha a BootRST ki van kapcsolva, a bootloader méretbeállításnak semmiféle hatása nincsen.
Fontos! A bootloader mérete kötött. Jellemzően 256word...2kword méret közt lehet - de sokszor csak memóriacímre történik az utalás (ahol a bootloader blokk kezdődik).
Fontos! Miért word-ben van megadva a méret? Mert az AVR chip belül nem byte, hanem word alapú flash-memória szervezéssel bír!
Különleges biztosítékok: lockbit
A védelmi biztosítékbitek szerepe nem elhanyagolható. Ezzel megakadályozható a chip írása illetve a belső programtartalom kiolvasása.
Programming/Verification disable/enable
A chip programmemóriájának elérési módját adhatjuk meg. Ha nincs védelem bekapcsolva, akkor egyszerűen a program (Flash) és EEPROM tartalom kiolvasható. Azaz a chip egyszerűen klónozható. Megadható, hogy a beégetett tartalom csak ellenőrizhető legyen vagy akár ne legyen egyáltalán kiolvasható. Ez utóbbi két beállítás esetén a chip olyan adatsort ad vissza, mintha a chip üres lenne.
LPM/SPM enabe/disable
A chip bootflash illetve főprogram flash területén a flashmemória közvetlen írását/olvasását végző gépikódú utasítások engedélyezhetőek vagy tilthatóak. A bootrészen - ha használunk bootloadert - érdemes a flashkezelést tiltani. Így véletlenül sem tudjuk egy hibás programmal felülírni.
Mielőtt a chipet programozni kellene...
Fontos! A chip programozóra csatlakoztatása után - mielőtt bármi programozást megkezdenénk - a chipID kiolvasás legyen az első lépés! Így a kommunikációt ellenőrizhetjük le. A visszakapott chipID minden chiptípusra egyedi - gyakorlatilag a chip típusszámát jelenti.
Itt csak a gyakoribb biztosítékbiteket jártuk körbe. A kisebb chipeknek kevesebb, a nagyobb, komplexebb chipeknek több biztosítékbitje van. Ezek az adatlapokból ismerhetőek pontosan meg.
A következő fejezet a már említett órajeleket járja körbe.
Róbert
TavIR-AVR oktatásfelelős és AVR megszállott
|
Lap tetejére
|
|