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

Szeretném a Galep-5-ös programozómmal betölteni a bootloder filét.Tud valaki segiteni

Érdekelne egy bascom könyvÜdv

TavIR-Facebook