HTML

Műszer

Hobby és amatőr elektronika, műszerépítés a XXI. században

Címkék

Friss topikok

  • Nite: @fromi: Ha egy bejegyzéssel kapcsolatos kérdésed van, akkor jobb odaírni kommentbe, mert esetleg m... (2010.11.26. 15:17) FAQ

Licenc

Creative Commons Licenc

PIC Programozó vs Bootloader

Nite 2010.03.01. 09:34

 Ha valaki PIC-ekkel akar foglalkozni, már a dolog legelején problémákba fog ütközni. Megveszed a szép új PIC-edet, betolod a próbapanelodba, elolvasod az adatlapját, letöltöd a fejlesztőeszközt a Microchip-től, összerakod az első "Hello World" mórickaalkalmazásodat, aztán őőőőőőőő... hogy is kerül ez most le oda a PIC-re? Természetesen erre van pár megoldása a gyártónak, amik szépen be is szerezhetőek a Chipcad-nél, vagy közvetlenül a Microchip-től is. Egy egyszerű programozó 40000-ért?? Ez azt hiszem bőven kimeríti sok egységsugarú amatőr hobbyjára szánt éves keretét, és akkor még nem csinált semmit. Ne is beszéljünk az olyan úri huncutságokról, mint a Real ICE, ami már debugolni is tudna, de horrorisztikus ára van (arról ne is beszéljünk, hogy mennyi értelme van debugolni olyan real-time környezetben, ahol ha megállítod a program futását, lemaradsz az összes eseményről amire kíváncsi voltál...)

 Szerencsére a PIC-ek programozása nem vészesen bonyolult, és a Microchip elég jól le is dokumentálja a folyamatot ahhoz, hogy akár magunknak építsünk programozó hardvert/szoftvert (ettől azért én mindenkit óva intenék), de van egyszerűbb megoldás is: csak követni kell a többi csóró által kitaposott utat, és az interneten elérhető rengeteg ingyenes / low cost megoldás közül kell válogatni. Egyik legjobb programozó szoftver szerintem a WinPIC, aminek a fejlesztése sajnos leállt, de így is támogat minden PICet ami számít. Hardverből is bőséges a kínálat, csak a WinPIC oldalán van vagy négy amivel együtt tud működni. Sajnos az a programozó, amit én használok, már nem kapható, de azért ide rakom mert állítólag csak szünetel a gyártás. Most hirtelen itt is találtam egy oldalt ahonnan primitív programozót lehet rendelni, de nem tudom, él-e még, ki nem próbáltam.

 Namost, tételezzük fel, hogy beszereztük a pöppec programozó kellékeinket, és nekilátunk fejleszteni. Arról gondolom mindenki az első 5 alkalom után letesz, hogy a programozás kedvéért ki-be cibálja a PIC-et a próbapanelról (vagy egyéb foglalatból), és gyárt magának valamilyen saját csatlakozót, amire a megfelelő lábakat rákötheti, majd amikor szükséges, erre csatlakoztatja a programozót. Az én esetemben ez a folyamat kicsit túl van bonyolítva, mivel hátrányos helyzetből indulok: annyira új alaplapot sikerült szereznem a PC-mbe, hogy nincs rajta soros port... Ebben az esetben a fejlesztési ciklus így néz ki:

- Kód megírása, lefordítása, nem fordul, anyázás, hibajavítgatás, fordítás, most jó. (A VS2008 és az intellisense használata ebben a lépésben a csúnya beszéd mennyiségét jelentősen csökkentette)
- Régebbi gépem (Pentium III) beröffentése, bootol egy ideig... Majd Hex fájl átmásolása.
- PIC lekötése a próbapanel tápról (azt azért nem hajtja meg az égető), és felkötése a programozóra
- PIC programozása, régi gépről Remote Desktoppal irányítva
- PIC táp visszakötése a próbapanelre
- Indít! Nem működik vagy rosszul, anyáz, agyal, fejben kódot futtatva debuggol, heuréka-érzés, és vissza az első lépésre.
- Ha meguntam, régi gépem lelövöm.

 Ez a folyamat azért a valóságban jóval több ideig tart annál, amit hosszú távon tolerálni lehet, bármennyire is rutinos vagyok már benne. Mindezt úgy, hogy USB-s PICekkel dolgozom, tehát a cucc folyamatosan össze van kötve a gépemmel, csak éppen nem olyan madzaggal, amin keresztül tudnám programozni - azazhogy mégiscsak, mégpedig bootloaderrel.

 Amikor először kezdtem a PIC-en USB-vel foglalkozni, a microchip USB library-je elég kezdetleges formában létezett, és a 18F2455-ön (és családján), ami jelenlegi kedvencem, nem futott módosítás nélkül. Mire beüzemeltem, az jó két hetes szopás volt, és ez tartott vissza a bootloader használatától is. Amikor nemrég ujra felvettem a fonalat, a Microchip egy hatalmas, jól struktúrált és átgondolt példakód tömeget tett fel a weboldalára, Microchip Application Libraries néven. Ebben idáig bármilyen kódot fordítottam, elsőre működött minden (ok, kis testreszabás után). Ha valaki még mindig soros portos programozóval büntetné magát annak ellenére, hogy USB-s PIC-et használ, ne tegye. 

 A továbbiakban közreadom amit bootloader témában alkottam, de hozzá kell tennem, ez 99%-ban így benne van a fent nevezett library-ben.

 HIDBootloader: A 18F2455-re optimalizált HID Bootloader verzió (a családból a többire is jó). A módosítások a következők:

- Áttettem Visual Studio-val fordítható állapotba, főleg azért, hogy ha turkálok benne, jobban tudjak navigálni, illetve a #define és #if defined rengetegbe utat vágjak. Persze VS nélkül is fordul, csak a picbuild.bat-ot kell indítani. Ja, újabban szoktam csinálni egy másik bat-ot is, ami release-be fordítja.
- Az io_cfg.h-ban beállítottam az USB által használt ledeket (az én panelomon csak kettő van, és nem ott ahol a demo boardon), és a bootloadert indító mikrokapcsoló helyét (sw2). Ez ha jól rémlik, nekem az MCLR-re van kötve, mivel azt másra nem használom.
- Az io_cfg.h-ban beállítottam az USB_BUS_SENSE-t, mert szeretem ha tudja a cucc, hogy mikor van kábel bedugva és mikor nincs. Ezzel viszont vagy 4 bájttal kilógott a bootloader a neki szánt memóriaterületről (0x1000-ig), így kivettem belőle a ledek villogtatását.

  HIDBootLoader.exe: Ez a PC-n futó programozó szoftver, ez ugyanaz, amit a Microchip ad.

 ClockGen_bldr: A régebbi ClockGen projektem bootloaderesített verziója. A következőket kellett változtatni, hogy menjen:

- A fordításhoz kapott egy új linker script fájlt (18f2455_g_bldr.lkr), ezt az eredeti script alapján vadásztam össze. A lényeg a következő sor:

CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED
 Ami valami olyasmit mond a linkernek, hogy 0x0000 címtől 0x0FFF címig ne tegyen semmit, mert ott a bootloader. Ennek a fájlnak a mintájára a többi PIC-hez is lehet linker scriptet gyártani, de érdemes előtte megnézni, hogy nem ad-e készen a Microchip.

- Az összes többi változás az interrupt.c fájlban található. A lényeg annyi, hogy az eredeti reset = 0x0000, interrupt low = 0x0008, interrupt hi = 0x0018 vektorok helyett 0x1000, 0x1008, 0x1018 az új vektorok helye. A bootloader ide fogja adni a vezérlést. A projekt letölthető sima soros programozóval is, és működni is fog, mivel a régi vektorok is ki vannak töltve.

 A bootloader működése, használata:

 A bootloader firmware-t felprogramozva elfoglalja az eredeti reset és interrupt vektorokat. A PIC resetkor ő fog elindulni. Első dolga megvizsgálni, hogy a beállított mikrokapcsoló le van-e nyomva, ha igen, akkor programozó üzemmódba lép. Ha nincs lenyomva, akkor a vezérlést a feltöltött programra adja, az 0x1000 pozíciótól. A bootloader saját USB stack-el rendelkezik, ezért elég nagy. Filóztam rajta, hogy hogy lehetne megosztani az USB-s rutinokat a feltöltött alkalmazással, de egyelőre nem küzdök helyhiánnyal úgyhogy jó ez így.

 Ha a bootloaderrel indítjuk a PIC-et, akkor egy USB HID eszközként ismeri fel a PC, nem kell hozzá külön driver. Olyan eszköznél, ami gyártásba kerül(het), a bootloader és a fő program USB VID és PID értékeit ne felejtsük el átírni!

 A HIDBootloader.exe-t elindítva le tudunk tölteni egy .hex fájlt a PIC-re, majd a bootloaderen a Reset gombot megnyomva a PIC ujraindul, a feltöltött kódot futtatva. Innen már a feltöltött kód USB stack-je él, és a PC számára már más USB eszközként látszik.

 Záró gondolatként még annyit, hogy a bootloader meg tudja kapni a vezérlést a fő programból is, aminek különösen akkor van szerepe, ha bedobozoltuk a termékünket és elvitte a felhasználó. Ekkor, ha ügyesek voltunk, tudunk olyan USB utasítást adni, amivel elindítható a bootloader, feltölthetünk új firmware-t, majd resetelhetjük az eszközt - magyarul a felhasználó mindenféle plusz feladata nélkül tudjuk frissíteni a firmware-t. Nem kell hozzá speciális kábel, nem kell visszahozni frissítésre oda, ahol vette (vagy szervízbe), ebből adódóan kevesebbet fog írni a Homárra, és ha azt vesszük, hogy nekünk sem kell programozóval vacakolni, mindenkinek tiszta haszon.

Címkék: pic

Szólj hozzá!

A bejegyzés trackback címe:

https://muszer.blog.hu/api/trackback/id/tr201799059

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása