Bascom - Programozók és a biztosítékbitek
A Bascom-AVR fejlesztői rendszer, - mint az első LED-villogtató programnál is láthattuk - programozónak is alkalmas.
Ehhez a Send to chip (F4) menüt használhatjuk. De használat előtt előbb be kell állítani, hogy milyen programozót használunk. Ezt az Options->Programmer menüpont alatt tehetjük meg. De ha már itt járunk, vegyük jobban szemügyre…
Programozó
Itt kiválaszthatjuk a programozót. Ez lehet a legegyszerűbb 5 eres, printerportos vagy akár komplex USB felületű is.
A programozó kiválasztása a lenyíló menüből történik. Ha a programozónk netán nem található meg itt, akkor is számos lehetőségünk van még.
LPT felületű programozók
Ha printer portos (ún. LPT) programozónk van, akkor a lábbekötést ismerve könnyen beilleszthetjük a Bascom alá - ehhez csak a Bascom könyvtárában található prog.settings-be (Bascom-AVR 1.11.8.3) kell beírni a következőket:
[WinAVR and SP12] ;tested and ok BASE=$378 ;Typical $278,$378 or $3BC MOSI=BASE,128 ;Data bit 7 CLOCK=BASE,1 ;Data bit 0 RESET=BASE,2 ;Data bit 1 MISO=BASE+1,128,INVERTED ;Busy line Status bit 7
Itt a következőkre kell figyelemmel lenni:
- BASE: LPT báziscíme, amit a beállításoknál adunk meg. A portok a bázishoz képest BASE+1, BASE+2 címeken érhetők el.
- MOSI, MISO, RESET, CLOCK (SCK) értelemszerűen az ISP lábak. Fontos, hogy nem bitazonosítót, hanem az aktív értéket kell megadni: ha a bit invertált, akkor az INVERTED paraméter is szükséges.
És így a lenyíló menüből elég kiválasztani az így létrehozott programozót a beírt név alapján.
Ha az LPT-portos programozót használunk, szükségünk van a fejlettebb operációs rendszerek esetén, az LPT címekhez védett módban is direkt hozzáférést biztosító segédprogramra. Ez a Bascom-AVR 1.11.8.5 verziótól a setupio segédprogram segítségével feltelepítendő TVicPort.dll (a korábbi verziókban a port95nt kezelőprogram került alkalmazásra). Fontos! A Bascom telepítéskor nem minden esetben telepíti fel automatikusan a hozzáférést biztosító programot! A telepítéshez rendszergazdai jogosultság szükséges!
Fontos! A két, LPT-porthoz szükséges segédprogram nem mindig működik egyszerre! Azaz a telepített Bascom-AVR verziónak megfelelőt telepítsük csak fel!
Ha az alaplapon nincsen LPT-port, akkor ilyet utólag pl. PCI bővítőkártyán is beépíthetünk. Az LPT portos programozók címét a Bascomban be kell állítani:
Ha PCI-s kártyát építünk be, akkor az LPT port címe nem a szokásos (hex-ben megadott) &H278, &H3BC, &H378; hanem ettől eltérő. Itt a kártya saját címét kell megadni - melyet a vezérlőpultból nézhetünk meg.
AVR910 programozó
Az AVR910 alapú programozók közül a Bascom-AVR csak az eredeti AVRisp-t támogatja, mely programozó csak a korai chipeket ismeri és csak COM1....4 portokon kommunikál!
Fontos! Ha AVR910, AVRisp, TavIRisp vagy hasonló programozónk van, akkor a Bascom nem minden esetben kezeli megfelelően!
A leggyakoribb hiba a nem megfelelő kommunikációs sebesség kiválasztása. A Bascom-ABR-ben hiába állítunk be megfelelő sebességet, korrekten csak a 19.200 bps (vagy a 9.600 bps) sebességűt kezeli a Bascom belső felülete. Ennek megfelelően szükség van még a Windows könyvtárban található bascavr.ini állomány szerkesztésére is, ahová be kell illeszteni a következő sorokat:
[AVRISP] COM=19200,n,8,1
A Bascom-AVR újraindítása után így már az AVR910 programozó általában használható.
Ám, ha ezzel sem jutunk sikerre, akkor külső programozó-szoftvert is használhatunk.
Külső programozó szoftver
Ilyen például a parancssoros AVROSP, melyhez az AVROSPii grafikus felületet használhatjuk. Ekkor a Bascom-AVR-ben programozónak az External programmer-t kell választani:
Bascom-AVR LPT portos programozó-felületéhez hasonló, grafikus felületű - ám külső programozó még az AVRisp (ATMega128 chip-ig) vagy az AVR-DuDe (AVR-DuDe GUI vagy AVR-8-O-Mat grafikus felülettel).
Hasonlóképp beállítható külső programozó az STK500, illetve a rugalmasabb lehetőséget biztosító STK500Extend nevű égető-szoftver. Az STK500 protokollt használó programozó esetén a feltelepített AVRStudio mellett az ebben található stk500.exe file-ra is szükségünk lesz!
Külső programozó még a Java alapokon nyugvó grafikus keretrendszerű AVR8-Burn-O-Mat is. Ennek előnye, hogy mind Linux, mind Windows alatt működik a Java nyelvnek köszönhetően (Windows alatt Java értelmező szükséges hozzá). Programozóként az AVR-DuDe parancssoros rendszert használja (az AVR-DuDe által kezelt számos programozóval együttműködik).
Bootloader, mint programozó
A Bascom - beépített "programozóként" - még a bootloadert is tartalmazza. Ebből a StAVeR illetve az MCSElec nevű bootloader csomagokat használhatjuk. Ez utóbbi bootloader rugalmasan elkészíthető, nyílt forráskódú - és a Bootloader fejezetben kielemzésre is került.
Arduino
A Bascom-AVR a 2.0.7.1 verziótól beépítve tartalmazza az Arduino áramkörök programozásához szükséges keretrendszert. Ennek kiválasztása szintén programozóként lehetséges:
Fontos! Az ATMega2560 (Arduino Mega) esetén az Arduino STK500v2 kiválasztása szükséges (Bascom-AVR 2.0.7.5 után érhető el). Arduino UNO illetve Optiboot bootloader használatakor az EEPROM feltöltése a bootloader korlátai miatt nem lehetséges. A programozási sebesség az Arduino alatt a boards.txt állományból nézhető ki.
A programozás finomhangolása
A programozó beállításainál még néhány jellemzőt beállíthatunk (a programozótól függetlenül).
-
Erase warning: ha a chip nem üres, akkor figyelmeztessen rá,
-
Auto Flash: programozóablak behívásakor automatikusan kezdődjön meg a programmemória beégetése,
-
AutoVerify: beégetés után ellenőrizze az égetést, hogy a forrással megegyezik-e,
-
Upload Code and Data: a programmemória mellett az EEPROM tartalom is letöltésre kerül,
-
Set focus to terminal...: programozás után a Bascom-AVR-be beépített terminál induljon el.
A programozás indítása a Program->Send to chip-l lehetséges, vagy a programozó ikonra kattintva, illetve az F4 gomb lenyomásával. Ekkor a következő képernyőt láthatjuk STK200, AVR910, STK500, Arduino programozó esetén (a programozást ezen a leggyakrabban használt felületen keresztül mutatom be):
A “Buffer” terület tartalmazza a chipbe beégetendő lefordított programot. Ez az átmeneti terület szolgál pl. az IC-ből kiolvasott program megjelenítésére is (ha a kontroller nem védett kiolvasás ellen). Az itt található adatokat elmenthetjük fájlba (hex vagy bin formában is) vagy beégethetjük a chipbe (programozáskor). A programozó menü- és gombrendszere a következőket tartalmazza:
File - Exit
Visszatérés a program szerkesztő ablakába, kilépés a programozóból.
File - Test
Az opció segítségével tesztelhetjük az LPT portra csatlakozó programozót. Az egyes lábakra TTL 5 V szintet küldhetünk ki. Fontos! Ez a funkció csak a Sample Electronics programmer égetővel működik együtt!
Buffer - Clear
Buffer törlése.
Buffer - Load from file
A beégetendő program beolvasása külső fájlból a bufferbe (HEX vagy BIN formátumot támogat).
Buffer - Save to file
A buffer tartalmát fájlba menthetjük.
Chip - Identify
Chip azonosítójának lekérdezése, majd ez alapján a programozó paramétereinek beállítása.
Write buffer into chip
A buffer tartalmát a chip Flash ROM vagy EEPROM területére tölti (programozás).
Read chipcode into buffer
Kiolvassa a chip kód vagy EEPROM tartalmát a bufferbe.
Chip blank check
Ellenőrzi hogy a chip Flash vagy EEPROM területe üres-e.
Chip erase
A chip EEPROM és programterületének törlése, a chip védelmi bitjeinek alaphelyzetbe állítása.
Chip verify
Ellenőrzi, hogy a buffer illetve a kódterület megegyezik-e a chip tartalmával.
Chip Set lock bits
A beállított biztonságizár biteket (ún. lockbitek; LB1 illetve LB2) beégeti a chipbe. Fontos! Ezek törlése csak a chip program és adatmemóriájának törlésével együtt állítható alaphelyzetbe!
Chip auto program
A chipet törli, majd felprogramozza a chipet. A visszaellenőrzés opcionálisan beállítható.
RCEN
Elállított órajelek esetén alapértelmezésként visszaállítja a belső oszcillátort alapértelmezett órajelforrásnak. Nem minden chipen működik (programozó és chipfüggő)!
Bascom használata csak programozásra
A bufferbe mind hex-, mind bin-formátumú állományt beolvashatunk. Ha a Bascom-AVR-tól független a beégetendő hex formátumú file, arra is van lehetőség:
A főképernyőn létrehozva egy üres forráskódot (File->New), majd ezt programozzuk be a chipbe (Program->Send to chip...). Ekkor a következő hibaüzeneteket kapjuk:
Ezeket jóváhagyva, a programozó felületen találjuk magunkat. (A hibaüzenet ablakok a nem beállított chip-típus és nem létező lefordított programállomány miatti természetes hibaüzenetek.) A chipet kiválasztjuk, vagy a detect gombra kattintunk. Ekkor az AVR-chipünk kiválasztásra kerül.
Fontos! A programozás során az első lépés mindig a csatlakoztatott chip azonosítása kell legyen! Ehhez a rendszer a chipek ID kódját használja fel. Ha számára ismeretlen chip kódja jelenik meg, akkor panaszkodik rá - de tovább enged a programozó felületre. A továbblépéskor ellenőrzésre kerül, hogy a lefordított programban/ra beállított chip típus megegyezik-e a detektált IC-vel (ha a Bascomban írt forrásprogramot fordítottuk le, majd égetjük a chipbe).
A bufferbe, aktív FlashROM fül mellett beolvassuk a hex file-t. Majd a Buffer to chip-re kattintva a chipbe letöltjük a buffer tartalmát.
Fontos! A hex/bin fájlra nem vonatkozik a demo verzió 4 kbyte-s korlátja!
Az EEPROM esetén hasonlóan járhatunk el, ekkor az EEPROM fül legyen aktív!
Fontos! Bascom a programkódot a kiterjesztéséből ismeri fel. Az EPP állományt bináris belső tartalommal várja! Hex kiterjesztés esetén intel hex formátumban kell hogy szerepeljen a tartalom.
Fontos! A cél kontrollernek minden esetben tápfeszültség alatt kell lennie! Tápfeszültség-ingadozás, zajos táp - mind hibás, bizonytalan programozást eredményez!
Fontos! A legtöbb chipet programozás előtt ki KELL törölni!
A programozás a szokásos módon a Write buffer to chip gombra kattintva történhet.
Ezzel el is érkeztünk a legkritikusabb chip-beállításhoz, a biztosíték-bitekhez (fusebits).
Biztosítékbitek
Az AVR chipek számos jellemzőjét a biztosítékbitekkel állíthatjuk be. Ez történhet akár a Bascom-AVR beépített programozójának segítségével, vagy külső programozó-szoftverrel is. Fontos! A biztosítékbitek a chipből magából, pl. szoftveresen nem állíthatóak át!
A biztosítékbitek beállításait, jellemzőit legegyszerűbben a Bascom-AVR beépített STK200/300 programozóján keresztül ismerhetjük meg (ez alapján kerülnek a biztosítékbitek bemutatásra). Hasonló megoldást követ az AVROSPii (TavIRisp), AVR 8-O-Mat (TavIRisp STK500 és a TavIRisp(AVR910)) illetve az AVR-Studio STK500 felülete is.
A programozó-felületen számunkra most a legfontosabb fül a Lock and Fuse Bits feliratú. Ezt kiválasztva azonnal beolvasásra kerülnek a csatlakoztatott chip beállított alapjellemzői. Hibaüzenet esetén nincsen megjelenített választólista!
Fontos! A biztosítékbitek chipről-chipre változnak!
A biztosítékbit-beállításoknál kiválaszthatjuk az új paramétereket és ezt be is írhatjuk a chipbe. De legyünk nagyon óvatosak!
Típushibák
Ha például hibás oszcillátor beállítást választunk, akkor csak külső órajel-forrás segítségével tudjuk a chipet újra feléleszteni. Ekkor a kommunikáció felélesztéséhez egy órajel-forrást kell a chip Xtal1 vagy Xtal2 lábára kötni. Ennek órajele lehetőleg 1...10 MHz tartományba essen. Ilyen órajel-forrás lehet másik chip, oszcillátorkocka vagy egy szimpla 555 IC is. A TavIR STK500 v2 verziójától kezdődően önálló 6MHz-s oszcillátor is kiépítésre került, a hasonló „balesetek” elkerülésére.
Egyes chipek esetén lehetőség van a Reset láb I/O lábként való használatára. Ha ezt sikeresen átállítottuk, akkor a belül lévő program fut, de a chipet átprogramozni már nem fogjuk tudni ISP módon, csak ún. nagyfeszültségű programozással.
Ha az összes beállítást kiválasztottuk és a forráskódban a kurzort is a program elején hagytuk, akkor a Write PRG gombra kattintva a kódba beíródik. Ezt egyes programozók használatakor a biztosítékbitek beírására használhatjuk automatikus fordítás és programozás opcióval (a Bascom (1.11.8.3) STK200/300 nincs felkészítve erre, de a STK500 programozó például igen).
A Write xxx gombok alapértelmezetten szürkék. Csak a biztosítékbit megváltoztatása során válnak aktívvá.
A Bascom 1.11.8.7 verziótól a biztosítékbitek beírása után a chip újraolvasódik. A régebbi verziók esetén az újraolvasást kézzel kell megtennünk. Az újraolvasás azzal is jár, hogy egyszerre csak egyetlen biztosítékbit-csoportot változtathatunk meg!
Biztosítékbit csoportok és a biztosítékbitek jelentései
Az egyes csoportok jelentése (kivonat ez csak természetesen) chipenként eltérő lehet.
A Lockbitekkel a későbbi kolvasást lehet megakadályozni (ezzel védhetjük a termékünket). A hagyományos Fusebits mező a feléledési időkért és az órajelért felel. A FusebitHigh a finomhangolás és a programozási funkciók nagy részét kezeli le. A pontos működésbeli leírások a chipek adatlapjában találhatóak.
Lockbitek és kódvédelem
Védelmi szempontból a legfontosabb biztosítékbitek az ún. LockBit-ek. Itt többféle beállítással találkozhatunk:
A chip asm utasításaival (LPM/SPM) írható és olvasható a belső programmemória, ezt használja ki pl.a bootloader is. Ezt tilthatjuk a program- illetve a boot-flash részre is külön-külön. A külső programozók (soros és párhuzamos esetre is) szintén letilthatóak.
A legtöbb kontrollernél az ISP letöltés a biztosítékbitekkel kikapcsolható, ezzel az egyszerű átprogramozhatóságot és kiolvasást le lehet tiltani. Fontos! Ha ISP-n át programozunk, ez nem járható út, ugyanis ez olyan lenne, mintha a szőnyeget rántanánk ki magunk alól (képernyőfotó, serial programming enabled).
A nagyobb ATMega chipek esetén elérhető a JTAG port. Ezen keresztül valós idejű hibakövetést, debugolást végezhetünk programfutás alatt az éles rendszerben; valamint programozásra is alkalmas. Előnye mellett vannak hátrányai is: 5 kivezetést elfoglal használat közben, a processzor normál működése alatt is! Ha nem használjuk a JTAG funkciókat, érdemes letiltani.
Alap biztosítékbitek
Órajel
Az újabb kontrollerek a nagyobb fokú hőfokstabilitás miatt a belső 8 MHz RC-órajelet 8-as előosztóra vezetik. Ez viszont bármilyen órajelforrás esetén be- illetve kikapcsolható.
Bővített biztosítékbitek
A Reset láb számos - főleg a kisebb ATMega és majd az összes ATTiny - chip esetén portkimeneti lábként is szolgálhat. Viszont átállításakor a Reset funkciót elveszítjük, így csak nagyfeszültségű soros vagy párhuzamos programozóval égethető utána a chip!
A legfontosabb biztosítékbiteket az előzőekben áttekintettük, most a fennmaradó - kevesebbszer változtatott funkciókat nézzük részletesen:
LockBits, Fusebits, Fusebits High, Fusebits Extend
Az egyes biztosítékbeitek megnevezési és funkciói:
Spm/lpm: a chip futó belső programjának engedélyezzük-e a flash program/boot terület írását illetve visszaellenőrzését. Védelmi beállítás esetén a bootloaderben futó programnak engedélyezhetjuk (hisz ez a célja is), míg a flash területen levő programnak tiltsuk le (kivéve azt a speciális esetet, amikor a programmemóriát EEPROM-ként használjuk). Fontos! Az lpm/spm segítségével egyes speciális esetekben a biztosítékbiteket is módosítani lehet!
ISP read: az ISP buszon kereesztül a chip teljes flashmemóriájához való írás/olvasás kontrollja. Védendő chip esetén mind az olvasást, mind az ellenőrzést tiltsuk le.
Fontos! A védelmi bitek ilymódon való beállítása még nem elegendő a teljes védelemhez. A chip flash memóriájához való hozzáférés az ún. JTAG rendszeren keresztül is lehetséges. Az ilyen módon való kiolvasás ellen a JTAG-tiltás és az OnChipDebug letiltása is szükséges!
EESAVE: a bit segítségével beállítható, hogy a chip törlésekor az EEPROM tartalom érintetlen maradjon.
ResetDSBL: a Reset kivezetés tiltása és I/O kivezetésként való használata. Fontos! A láb átállítása után ISP módban nem, csak nagyfeszültségű módban lehetséges a további programozás!
CKDiv8: Az újabb chipeken alkalmazott megoldás a bizonytalan indulás kiküszöbölése, órajelforrás hőfokfüggésének csökkentése. A névleges sebesség az órajel 1/8-a lesz. Ennek stabilizáló hatása a belső RC tag használata esetén kiemelkedően fontos.
CKOUT: az órajel kimenetté válik a láb. Gyakorlatilag bufferleválasztott belső órajel-kimenet.
CKOpt: a kvarc illetve a rezonátor maximális amplitudóval rezeg. Ez némileg nagyobb áramfelvételt jelent, ugyanakkor stabilabb rezgést biztosít.
SPIEn: ISP kivezetés engedélyezése. Ennek letiltása az egyszerű programozó metódus tiltását is jelenti. Ezután már csak ún. nagyfeszültségű programozás alkalmazásával ill. bootloader segítségével programozhatjuk a chipet.
JTAGEN: a nagyobb ATMega chipek esetén a valós idejű nyomkövetés és programozó JTAG funkció engedélyezésére szolgál. Fontos! A védelmi bitek (lock bit) bekapcsolásával együtt a JTAG hozzáférést is tiltsuk le!
DWEn: az újabb, kis lábszámú chipek esetén ún. DebugWire protokollal történik a hibakeresés és a nyomkövetés. Ez a reset lábon került elhelyezésre. Így a funkció aktiválása után a chip programozásához DW-képes programozó szükséges.
OCDEn: a chipben levő beépített debugger használata. JTAG-on keresztül való hibakereséshez mindenképp aktívnak kell lennie.
BODEn, BODLEVEL: a két összetartozó bit a tápfeszültség-ingadozás hibás működését okozó hatását hivatott csökkenteni. A BrownOut Reset (?) különböző feszültségszintek esetén beállíthatóan a chipet újraindítja (mintha Reset történt volna). Pl. 5V tápfeszültség esetén érdemes a 4.3V-os küszöbszintet beállítani - így a chip stabilan lekapcsol vagy újraindul a tápfeszültség csökkenésekor.
WDTOn: a Watchdog figyelő automatikus (bekapcsoláskori) hardveres inicializálása. Bekapcsot állapotban a processzor inicializálása során ha időtúllépés történik, a processzor állandóan resetel. Ha ki van kapcsolva, a programfutás alatt kapcsolhatjuk be.
BootRST, Bootsz: a beállításával a chip indításakori kezdőcím állítható be. Ha inaktív, akkor a normál módú indulást végez a chip (programfutás kezdete a $0000 címen). Aktív állapot esetén a memória felső részén található bootloader-memóriarész aktivizálódik. A kezdő memóriacímet a Bootsz beállításon keresztül változtathatjuk meg.
ClkSel: a biztosítékbit beállításával számos órajelforrás közül választhatunk. Alapesetben a chipek a belső 1 MHz órajelüket a belső RC-tagból nyerik (az újabb chipeknél a ClkDiv (1/8-ados előosztó) bekapcsolásával és a belső RC-oszcillátor 8 MHz sebességen járatásával). Egyes ATTiny chipeknél ez a belső 9.6 MHz órajelet és 1/8-ados előosztót jelent. Az egyéb órajelbeállítások esetén lehetőség nyílik a bekapcsolási órajel-késleltetésre is, akár órajelben, akár késleltetési időben megadva. Mód van az órajel külső kvarccal, rezonátorral, RC-taggal illetve külső órajelforrásból való beállítására. Fontos! Hibás órajeltípus beállításkor a chip tetszhalottá válik!
SelfPrgEn: egyes chipek esetén nem állítható a boot illetve az adatterület átprogramozása (mint volt LPM/SPM), csak tiltható a SelfPrgEn bittel.
Compatibility Bits: ha egy chip valamely régebbi kiváltására készült - visszamenőleges kompabilitással. Ilyen pl. Az ATMega128, mely alapesetben ATMega103 módban aktivizálódik.
Eesave: mely segítségével beállítható, hogy az EEPROM a flash újrapogramozásakor ne törlődjön.
Kapcsolódó oldalak
Felhasznált források
Hozzászólások
Kérés
Szeretném a Galep-5-ös programozómmal betölteni a bootloder filét.Tud valaki segiteni
bascom
Érdekelne egy bascom könyvÜdv