Bootloader (bootloader) mikrokontrollerekhez avr, avr, programozás

A bootloader technológia leírása. Beépített minden Atmel AVR mikrokontroller az ATmega családban. A cikk anyaga a scienceprog.com oldalról származik.

Lehetséges, hogy a mikrokontroller programozásának legmegfelelőbb és legmegfelelőbb módja a bootloader program használata. Mivel akkor nem kell használni egy speciális adapter programozásra vagy speciális képességek - Csak csatlakoztatni kell szabványos kábelt a PC-t a cél tábla, és fut a PC egy speciális programot, amely összeköti a bootloader tárolt program a mikrokontroller. Az ötlet egyszerű:

Bootloader (bootloader) mikrokontrollerekhez avr, avr, programozás

Kétségtelen, hogy a leginkább felhasználóbarát letöltési felület az USB. Ez az interfész nagyon népszerű, minden operációs rendszeren működik. De az USB-protokoll meglehetősen bonyolult, ezért a rendszerindító-író beépítése egy olyan mikrokontrollerbe, amely nem rendelkezik USB hardver támogatással, jelentős mennyiségű kódot (legfeljebb 2 kilobájt) igényel. Az USB protokoll leggyakoribb szoftverfejlesztése a Célkitűzés - V-USB [6] cégtől. Van még egy szoftver-implementáció - USBtiny [7].

Az AVR mikrokontrollerek hardveres USB interfésszel (például AT90USB162) az Atmel saját USB-letöltőket kínál. Néhány mikrokontrollert a gyárból szállítunk egy bootstrapperrel, amely már be van töltve a memóriába (például ugyanaz az AT90USB162). Az ilyen rendszerindítóval használt technológiák neve DFU és Flip. Részletekért lásd: [5].

[Különböző bootrók az AVR számára]

Sok AVR rendszerbetöltő egy COM portot használ a PC-hez való csatlakozáshoz. Ez jól működik, ha USB-USART hardverhídot használ. Ha a rendszertöltő önállóan íródott, akkor nem tény, hogy azonnal elkezd dolgozni. A hibakeresést és a mikrokontroller dokumentációját gondosan el kell olvasni. A listában láthatók a kész népszerű boot-betöltők, amelyeket használhat (a lista nagyobb lehet):
* Atmex oldal: ladyada.net. COM, 19200bps, Assembler; JAvrProg (Java), ATtiny2313 (8-16Mhz);
* AVR Bootloader programozó Peter Dannegger site: mikrocontroller.net. COM, Assembler; ATmega8 / 16/32/128;
* AVRProg-kompatibilis Bootloader Martin Thomas webhely: siwawi.arubi.uni-kl.de. COM, WinAVR (C); AVRProg; Különféle AVR-ek és sebességek;
* USBisp Bootloader Matthias Weisser oldal: matwei.de. USB, COM, AVR-GCC (C); AVRProg; STK-500; ATmega8, FT245BM; 6MHz;
* Bootloader ATmega8 AVR mikroprocesszor helyszín: stratoserver.net. COM, 19200bps, ASM, AVRProg; ATmega8 7,3728MHz;
* Chip45boot webhely: chip45.com. COM, 11500 bps, WinAVR; Hyper; Különféle AVR
* STK500-Bootloader Pascal Stang. COM, Hex; AVRProg; STK500; ATmega8-128; 7,3 - 22,1 MHz
* AVR109 (AVR Butterfly) oldal: atmel.com. COM, IAR (C); ATmega sorozat; 12MHz;
* AVRUSBBoot - USB bootloader az Atmel AVR vezérlőkhöz: fischl.de. USB, AVR-GCC; ATmega8 (más Megas); 12MHz;
Megaload webhely: microsyl.com. COM, 11500 bps, ICCAVR (C); Megaload.NET; Különféle AVR;
* BootloadHID webhely: obdev.at. USB, HID, WinAVR; ATmega8;
* Crypto-Boot webhely: wikidot.com. USB, IAR (C); Titkosított AES; ATmega32; 12MHz.

A legtöbb bootloadert a COM porthoz tervezték, ami már elavult, és a modern számítógépekben ritka. A legegyszerűbb módja ezeknek a rendszerindító eszközöknek USB-re történő beállításához az USART hardverhíd használata <-> USB típusú FT245BM. De valószínűleg sokkal kényelmesebb, ha az USB közvetlenül a mikrokontrollerhez csatlakozik, és a bootloader kommunikáció egy részét a firmware USB meghajtója végzi.

A bootloader az egyik legfontosabb dolog, amely megkülönbözteti az Adruino-t egy egyszerű Atmel AVR mikrokontrollertől. Amikor összegyűjted a kártyádat, vagy amikor véletlenül vásárolt egy eBay-kártyát, amelyet a rendszertöltő nem varrott össze, szükség van egy külső ISP-programozóra, hogy a rendszerindítót a mikrokontroller memóriájába flashelje.

Bootloader (bootloader) mikrokontrollerekhez avr, avr, programozás

A rendszertöltő állapota. Vannak olyan rakodógépek, amelyek azonnal továbbítják a vezérlést a felhasználói programhoz (késedelem nélkül), ha a betöltési feltétel nem teljesül. Ez olykor történik, hogy felgyorsítsa a felhasználói program indítását. A terhelési állapot eltérő lehet, de leggyakrabban olyan jumper, amely lezárja a mikrokontroller egy bizonyos (előre ismert felhasználói) pólusát. Ha a jumper telepítve van, a rendszerindítási feltétel végrehajtásra kerül, és a rendszerindító betöltő vár a terhelés megkezdésére, nem pedig átirányítja a vezérlőt a felhasználói programba.

[Amire figyelmet kell fordítanunk a rendszertöltő programozásakor]

Bootloader kiválasztása. Mivel a célrendszer különböző verziói lehetnek, különböző mikrokontroller-modellek alkalmazhatók (ATmega168, ATmega328, ATmega32U4 stb.). A mikrokontrollerek különböző típusaihoz tartozó rakodók egymással összeegyeztethetetlenek lehetnek.

A kvarc rezonátor gyakorisága. Ügyeljen arra, hogy a rendszertöltő pontosan megegyezzen a rendszer működési frekvenciájával, a kristály más frekvenciájával (általában 8 vagy 16 MHz, de lehetnek más lehetőségek is). A mikrokontroller működési frekvenciája általában a biztosítékok konfigurációjától és a külső kvarc vagy kerámi rezonátor frekvenciájától függ.

Fyuz. A megfelelő működése rakodó fontos 2 vonatkozásai vannak beállítva Fyuz - méretének kiválasztása a letöltés rész (Fyuz BOOTSZ1, BOOTSZ0), lehetővé teszi a boot loader (Fyuz BOOTRST), valamint a konfigurációs órát (Fyuz, oszcillátor órajel és előosztóval - CKDIV8, SUT1, SUT0, CKSEL3..0).

Ha helytelenül fuzzy BOOTSZ1, BOOTSZ0, BOOTRST, akkor a bootloader kód nem indul el, és a betöltő nem fog működni. Hasonlóképpen, ha a helytelenül beállított Fyuz órát és előosztóval a mikrokontroller kihasználni a frekvencián, amelyen a boot loader nem tervezték, és rakodó működését is érinti. A fyuzek helyes értékének kiszámításához a Fyuz kalkulátor [6] segít.

A táblázatban adtam a legnépszerűbb rakodókat és konfigurációkat számukra. A fúziók hexadecimálisak, ahol a HFUSE a források nagybájtja, a LFUSE alacsony bájtfúziója, a kiterjesztett fúzió EFUSE bájtja.

4. táblázat: Arduino UART rakodók.

Arduino firmware rendszerbetöltők megtalálható a mappát, ahol a rendszer van telepítve Arduino fejlesztési általában egy mappát a teljes utat, mint a c: \ Program Files \ Arduino1.0.6 \ hardver \ arduino \ betöltőtől. Itt található a rakodók forráskódja. Szintén kész firmware és forráskód minden letöltők itt letölthető [9], lásd. Arduino mappa \ betöltőtől \ HEX fájlt, és keresse meg ott nevek firmverfájlok táblázatban felsorolt ​​4., 5., 6. (firmware fájl neve szerepel a firmware oszlop) .

5. táblázat: Atmel DFU rakodók.

A szakasz méretének, bájtjának letöltése

6. táblázat.

A szakasz méretének, bájtjának letöltése

[Bootloader forráskódja]

Bizonyos esetekben előfordulhat, hogy újra kell fordítania a bootloader firmware-t - például ha egy bizonyos kvarc frekvenciát használ, vagy ha be kell állítania a betöltő viselkedését.

A táblázatban leírtam azokat a legnépszerűbb rakodókat, amelyeket Arduino-kompatibilis táblákban használnak. A rakodók forráskódja a kész firmware-sel együtt letölthető a linkből [9].

7. táblázat: Az Arduino fejlesztőplatformra felhasznált rakodók sokasága.

ATmega8, ATmega168, ATmega328 és mások

A legtöbb Arduino kártyára használják, amikor a kódot az USB-UART hídon keresztül töltik fel.

ATmega32U4 és mások

Alkalmazható olyan esetekben, amikor az AVR mikrokontroller hardveres USB interfésszel rendelkezik a fedélzeten. A betöltő az Atmel DFU Flip protokollon és a nyílt LUFA könyvtáron alapul.

A metaboard táblákra vonatkozik. A betöltő a nyílt V-USB könyvtáron alapul, emulálja a népszerű USBasp programozó viselkedését.

Hogyan kell összeállítani. A fordításhoz szüksége lesz az AVR-GCC toonra, amely a legtöbb operációs rendszerhez elérhető - Linux, Mac OS, Windows. A Windows operációs rendszeren letöltheti és telepítheti a WinAVR csomagot vagy az Atmel Studio fejlesztői környezetét.

A betöltő összeállítja a make parancsokat. Általában a betöltõ forráskódjához kell mennie a könyvtárba, és 2 parancsot kell végrehajtania:

Ezt követően, az aktuális könyvtár fájlt a HEX - kész firmware loader kell jegyezni a mikrokontroller memóriájában egy hagyományos ISP-programozó (ne felejtsük el, hogy megfelelően telepíteni Fyuz mikrokontroller!).

A kompilaciós utasításokat és az egyéni beállításokat általában a bootloader projekt Makefile fájljának és a mellékelt readme.txt dokumentációs fájloknak a vizsgálatával szerezheti meg.

[Példa az Arduino UART rendszerbetöltõ beállítására]

A bootloader firmware beszerzésének folyamata a Makefile előkonfigurálásából áll. ahol a beállításokat (ha szükséges) konfigurálják, majd összeállítják a tiszta és a gyártmányt. Természetesen a fordításhoz szükséged kell egy tolchein (AVR GCC fordító és könyvtárak). A Windows operációs rendszeren akkor kaphatja meg a hulk-ot, ha telepíti a WinAVR vagy az Atmel Studio fejlesztői csomagját.

Amikor arra van szükség, hogy a bootloader az Arduino, gyakran (attól függően, hogy milyen típusú kártyát vagy a design) egy mikrokontroller atmega328 vagy kevesebb ATmega168, ATmega8, ATmega32U4. Ezért először választania kell a használni kívánt indító betöltőt. Szinte az összes etetők megtalálható a telepítési mappában Arduino c: \ Program Files \ Arduino1.0.6 \ hardver \ arduino \ betöltőtől, elosztott alkönyvtárak atmega8, ATmega és mások.

Bootloader kiválasztása. Ha az ATmega8 rendszerindítót igényel, akkor a forráskódja és a Makefile az atmega8 mappában található. Ha az ATmega168 vagy az ATmega328 rendszerindító rendszerre van szüksége, akkor nézze meg az atmega mappát. Ha szüksége van az ATmega32U4 rendszerindító-betöltőre, megtalálhatja azt a LUFA könyvtárában, lásd a Bootloaders \ DFU mappát.

Megjegyzés: a forráskód és a firmware-letöltő letölthető a linkből [9].

• DEFS. Ez az opció meghatározza a rendszer órajelét az F_CPU makróváltozó értékén keresztül. Ha például megadja az opciót:

akkor ez azt jelenti, hogy a firmware-t a 8 MHz-es órajel frekvenciája alapján állítják össze. A 8 MHz-et általában akkor használják, ha az AVR mikrokontroller belső RC generátora működik. Ha más órát használ, külső kvarcrezonátorral, akkor adja meg a -DF_CPU = órajel frekvenciáját Hertzben. A leggyakrabban használt órajel frekvenciája 16 MHz, azaz meg kell adnia a -DF_CPU = 16000000 értéket.

Megjegyzés: Fontos, hogy a helyes órajelfrekvencia mivel ez az érték van kötve beállítás soros UART, amelyen keresztül a bootloader kap egy kódot a fogadó (az Arduino IDE fejlesztési rendszer segítségével AVRDUDE programozási eszköz hívás). A helytelen UART beállítás miatt a betöltő nem kapja meg a felhasználói programkódot, és a mikrokontroller nem villog a rendszerbetöltőn.

Ekkor a bootloader konfiguráció teljesnek tekinthető. A betöltõ firmware-jének megõrzése érdekében továbbra is két parancssorból kell végrehajtani:

A fordítás után megkapjuk az ATmegaBOOT.hex fájlt, amelyet az ISP programozó segítségével az ATmega8 mikrokontroller memóriájába írhatunk. Ne felejtse el beállítani a mikrokontroller biztosítékokat a rendszertöltő programozása után (lásd a 4. táblázatot).

8. táblázat: Válassza ki a célt a Makefile for ATmegaXX8-ban.

Megjegyzés: A táblázatban megadott Célcél a make parancs opciójaként helyettesíti a firmware összeállításakor:

tiszta
csinál <тут надо указать Target>

Az első dolog, amit meg kell tennie, hogy válassza ki a cél a kompiláció (opció a Cél oszlopban a 6. táblázat), attól függően, hogy a kártya, amit használsz. Tegyük fel, hogy Önnek van egy saját készítésű tábla az ATmega328 mikrokontrolleren, amelyre a rendszerindítót szeretné tenni. Ezután az összeállítás célja az atmega328 lesz, a firmware-t két parancs végrehajtásával kapja meg:

Ha egy másik órajel, ellenőrizni az érték makrováltozó AVR_FREQ (alapértelmezett atmega328 kitűzött célok órajel 16 MHz: AVR_FREQ = 16000000L). A fordítás után kapja meg az ATmegaBOOT_168_atmega328.hex firmware-t, amelyet az ISP programozó segítségével meg lehet írni a mikrokontroller memóriájába. Ne felejtse el helyesen telepíteni a mikrokontroller biztosítékokat (lásd a 4. táblázatot).

A listához felvehetem az RS-485 interfészhez írt boot-betöltőt. Az avr-assm.ru webhelyen az összeszerelő betöltőjének forráskódja és a számítógép programja kerül meghatározásra.

Helló
És a PC oldalán található szoftverektől, amelyet tanácsadnak? avrdude?
Ehhez, majd gui hang.
A forgatókönyv szerint: az ügyfél csatlakoztatta az eszközt, elindította a szoftverfrissítési programot, rákattintott az "OK" gombra, és az eszközt varrta?

microsin: igen, az avrdude a legjobb. A kagyló fölött van, az avrdude-gui. Ha az USBsp betöltőt használja, a Khazama 1.6.2 és az eXtreme Burner GUI segédprogramjai is alkalmasak.

Köszönet mindenkinek, aki információkat oszt meg, külön köszönet azoknak a rajongóknak, akik támogatják a webhely munkáját! Ha nem a segítséget, azt az ügyfeleket, hogy egy hosszú erotikus módon és most - aláásta az ASM-forrás és podsunu alatt Arduinkinu ​​héj - nos, az ügyfél akar, hogy mi történt volna vele egyértelmű, ha a telepítést, és ahol a fő hurok a program ciklus)

Idézet Kaseiiro: Megint szubjektív - bootloader AVR NEM kell írni magát, jobb, mint a már megírt (és számos, amelyek nem razgrebete), soha nem írok.
Talán ennél hülyebbek, még nem hallottam. Tíz éve írtam az AVR-t 10 évig (írtam és TCP-UDP-t), és mindent megpróbálok mindent magam írni - ebben és a kontroller varázsában - mindent, amire válaszolhatsz magadnak. És hogyan találhatunk bootjelzőt a titkosítási firmware-lel, ami átadná ügyfeleinek az új verziókat anélkül, hogy képes lenne másolni a készüléket, mi?

microsin: ez az Ön választása - költeni vagy nem saját erőfeszítéseit egy kerékpár felfedezésére. Végtére is sokan nem programozzák saját örömüket, mint például te, hanem egyszerűen elvégezzék az Önnel megbízott feladatot, vagyis a feladatot a lehető leghatékonyabban végzik el. És amikor mind a TCP, mind a könyvtárak a titkosításhoz, és még sok más - már ezüst tálcán - senki sem a józan eszükben fog meríteni a drága időt.

Az ATmega16-on dolgozik, de az rs485 interfészen kétségbeesetten szükséges. Ez azt jelenti, hogy a bootloadernek is meg kell ugrani egy mikrokontrollert egy lábával, hogy a max485 meghajtót átvegye a vételre vagy átvitelre. Van ilyen?

microsin: Azt hiszem, a COM porthoz (RS232, USART) kell a bootloadert használni, és kissé módosítani kell az adatátvitel irányát. Az RS232-es rendszerbetöltõ az AVR-hez nem jelent problémát.

Kérdésem van a boot indításával kapcsolatban. Van valami módja annak, hogy a jumper nélkül is megtehesse? Ez azt jelenti, hogy egyszerűen csatlakoztatjuk az eszközt az USB-hoz, és az USB-állomás maga elmondta neki, hogy el kell indítani a bootot? Például a fő kódot kitalálni, hogyan kell tenni újraindul, de az újraindítás előtt még EEPROM, például egy zászló néhány sor újraindítani rajta nem jön ki a törmelék, amíg a firmware nem szopni? Hát, vagy valami ilyesmi?

Van-e rendszerindító a AVRprog segédprogramhoz, amely az AVRStudio része?

A fordító, akkor miért kellene tudnom a "kevesebb memóriáról"? Észre fogod venni. És a rakodó megtisztíthatja magát és megtilthatja.
És mégis, szubjektíve: a rakodó jobb önállóan írni.

microsin: a fordítóról - igazad van, ha nem gondolod, mit akarsz kérni. És a többiek. Minden ebben a világban emberi szempontból szubjektív. Beleértve a szempontomat - a rendszertöltő számára jobb, ha nem tilth meg semmit, és a lehető legnagyobb döbbenetesnek és kisebb méretűnek teszi. Ismét szubjektív - bootloader AVR NEM kell írni magát, jobb, mint a már megírt (és számos, amelyek nem razgrebete), soha nem írok.

Kérlek, kérlek, mit kell hozzáadni, konfigurálni a WinAVR IAR CVAVR projektben, ha a program létrejön a rendszerbetöltőhöz? Ez azt jelenti, hogy megmondja a fordítónak, hogy kevesebb memória áll rendelkezésre, mint a kiválasztott kavicsban?

microsin: Megadott három tervezési rendszert, így a kérdés megválaszolásához egy teljes cikket kell írni. Kérjük, kérdezze meg konkrét kérdéseit, és még jobban - írjon erről az e-mailben. A memória mennyiségét általában a mikrokontrollert leíró hederek határozzák meg. vagy a projekt beállításaiban vagy a linker beállításaiban.

Kapcsolódó cikkek