Bootloaders (bootloader) pentru microcontrolere avr, avr, programare

Se descrie tehnologia încărcătorului de boot. Built-in toate microcontrolerele Atmel AVR din familia ATmega. Materialul pentru articol este luat de pe site-ul scienceprog.com.

Este posibil ca metoda cea mai convenabilă și cea mai corectă de programare a unui microcontroler să fie utilizarea programului de încărcare. Din moment ce nu trebuie să utilizați un adaptor special pentru programare sau speciale aptitudini - trebuie doar să conectați cablul standard, de la PC-ul la placa de țintă și rula pe PC un program special care se conectează la programul bootloader stocate în microcontroler. Ideea este simplă:







Bootloaders (bootloader) pentru microcontrolere avr, avr, programare

Fără îndoială, cea mai ușor de utilizat interfață de descărcare este USB. Această interfață este foarte populară, funcționează pe toate sistemele de operare. Dar protocolul USB este destul de complicat, încorporarea bootloader-ului într-un microcontroler care nu are suport hardware-ul USB va necesita o cantitate semnificativă de cod (până la 2 kilobyte). Cea mai obișnuită implementare de software a protocolului USB de la compania Objective Development - V-USB [6]. Există și o altă implementare software - USBtiny [7].

Pentru microcontrolerele AVR cu interfață USB hardware (de exemplu, AT90USB162), Atmel oferă dispozitive de descărcare USB deținute. Unele microcontrolere sunt livrate din fabrică cu un bootstrapper deja încărcat în memorie (de exemplu, același AT90USB162). Tehnologiile folosite pentru un astfel de bootloader se numesc DFU și Flip. Pentru detalii, consultați [5].

[O varietate de încărcătoare pentru AVR]

Multe bootloadere AVR utilizează un port COM pentru conectarea la un PC. Acest lucru funcționează bine dacă utilizați o punte hardware USB-USART. În cazul în care bootloader-ul este scris pe cont propriu, nu este un fapt că va începe să funcționeze imediat. Va fi necesar să se depaneze și să se citească cu atenție documentația pentru microcontroler. În listă puteți vedea încărcătoare de boot populare, pe care le puteți utiliza (lista poate fi mai mare):
* Site-ul Atmex: ladyada.net. COM, 19200bps, Assembler; JAvrProg (Java), ATtiny2313 (8-16 MHz);
* Programator Bootloader AVR Peter Dannegger site: mikrocontroller.net. COM, Assembler; ATmega8 / 16/32/128;
* AVRProg compatibil Bootloader Martin Thomas site: siwawi.arubi.uni-kl.de. COM, WinAVR (C); AVRProg; Diferite AVR-uri și viteze;
* USBisp Bootloader Matthias Weisser site-ul: matwei.de. USB, COM, AVR-GCC (C); AVRProg; STK-500; ATmega8, FT245BM; 6MHz;
* Bootloader ATmega8 site-ul microprocesorului AVR: stratoserver.net. COM, 19200bps, ASM, AVRProg; ATmega8 7.3728MHz;
* Site-ul Chip45boot: chip45.com. COM, 11500 bps, WinAVR; HyperTerminal; Diferite AVR
* STK500-Bootloader Pascal Stang. COM, Hex; AVRProg; STK500; ATmega8-128; 7,3 - 22,1MHz
* Site AVR109 (AVR Butterfly): atmel.com. COM, IAR (C); Seria ATmega; 12MHz;
* AVRUSBBoot - bootloader USB pentru site-ul controlerelor Atmel AVR: fischl.de. USB, AVR-GCC; ATmega8 (alte Megas); 12MHz;
* Site-ul Megaload: microsyl.com. COM, 11500bps, ICCAVR (C); Megaload.NET; Diferite AVR;
* BootloadHID site: obdev.at. USB, HID, WinAVR; ATmega8;
* Site-ul Crypto-Boot: wikidot.com. USB, IAR (C); AES criptat; ATmega32; 12MHz.

Cele mai multe bootloadere sunt concepute pentru portul COM, care este deja învechit și în computerele moderne este rar. Cea mai ușoară modalitate de a adapta aceste bootloadere la USB este să utilizați podul hardware USART <-> Tip USB FT245BM. Dar este probabil mai convenabil atunci când USB-ul este conectat direct la microcontroler, iar o parte din comunicațiile bootloader-ului sunt realizate de driverul USB al firmware-ului.

Bootloader-ul este unul dintre principalele lucruri care distinge Adruino de un microcontroler Atmel AVR simplu. Atunci când se colectează o taxă, sau atunci când a cumpărat accidental pe bootloader comision eBay nu cusută, aveți nevoie de un programator extern ISP, memorie flash în bootloader microcontrolerului.

Bootloaders (bootloader) pentru microcontrolere avr, avr, programare

Starea încărcătorului de boot. Există încărcătoare care transferă imediat controlul către programul utilizatorului (fără întârziere), dacă condiția de încărcare nu este îndeplinită. Acest lucru se face uneori pentru a accelera lansarea programului de utilizator. Condiția de încărcare poate fi diferită, dar cel mai adesea este un jumper care închide pământul unui anumit pin (cunoscut în avans de către utilizator) al microcontrolerului. Dacă jumperul este setat, starea de boot este executată și încărcătorul de boot așteaptă începerea încărcării, fără a transfera controlul către programul de utilizator.

[Ce trebuie să acorzi atenție la programarea încărcătorului de încărcare]

Selectarea bootloader-ului. microcontroler model diferit poate fi aplicat (ATmega168, ATmega328, ATmega32U4, etc ...) - Deoarece pot exista diferite forme de realizare ale unui sistem țintă. Încărcătoarele pentru diferite modele de microcontrolere pot fi incompatibile între ele.

Frecvența unui rezonator cuarț. Asigurați-vă că ați boot-cusute exact corespunde cu frecvența de funcționare a sistemului, diferit de frecvență a rezonatorului de cuarț (de obicei, 8 sau 16 MHz, dar pot fi și alte exemple de realizare). Frecvența de operare a microcontrolerului depinde, de obicei, de configurația siguranțelor și de frecvența cuarțului exterior sau a rezonatorului ceramic.

Fyuz. Funcționarea corectă a încărcătorului sunt importante 2 aspecte care sunt configurate Fyuz - Selectați dimensiunea secțiunii de download (Fyuz BOOTSZ1, BOOTSZ0), permite încărcătorul de boot (Fyuz BOOTRST), precum și ceasul de configurare (Fyuz, controlat de ceas oscilator și prescalar - CKDIV8, SUT1, SUT0, CKSEL3..0).

Dacă va coase perfect împreună în mod corespunzător Fyuz BOOTSZ1, BOOTSZ0, BOOTRST, codul bootloader nu va rula, iar încărcătorul nu va funcționa. În mod similar, în cazul în care ați configurat incorect ceasul Fyuz și prescaler, microcontrolerul poate valorifica pe frecvența la care bootloader nu este proiectat și operarea încărcător va fi de asemenea afectate. Pentru a calcula valoarea corectă a fuzelor, vă va ajuta calculatorul Fyuz [6].

În tabel am dat cele mai populare încărcătoare și configurații pentru ele. Fyuz dată în valoare hexazecimală, în cazul în care acesta este ridicat octetul HFUSE Fyuz, LFUSE scăzut octet Fyuz, eFuse bytes extins Fyuz.

Tabelul 4. Încărcătoare Arduino UART.

Arduino firmware incarcator de boot pot fi găsite în dosarul în care sistemul este instalat de dezvoltare Arduino, de obicei, este un dosar cu o cale completă, cum ar fi c: \ Program Files \ Arduino1.0.6 \ hardware \ Arduino \ bootloader. Acolo puteți găsi codul sursă al încărcătoarelor. De asemenea, firmware-ul gata și codul sursă pentru toate downloader poate fi descărcat de aici [9], a se vedea. Arduino dosarul \ bootloaders fișier \ HEX, și căutați acolo nume de fișiere firmware enumerate în tabelele 4, 5, 6 (nume de fișier firmware-ul este listat în coloana firmware) .







Tabelul 5. Încărcătoare Atmel DFU.

Descărcați dimensiunea secțiunii, octeți

Tabelul 6. Încărcătoare USBasp.

Descărcați dimensiunea secțiunii, octeți

[Codul sursă pentru bootloader]

În unele cazuri, poate fi necesar să recompilați firmware-ul bootloader - de exemplu, dacă utilizați o anumită frecvență de cuarț sau dacă trebuie să efectuați ajustări ale comportamentului încărcătorului.

În tabel, am prezentat o descriere a celor mai populare încărcătoare care sunt utilizate în plăcile compatibile cu Arduino. Codul sursă al încărcătoarelor împreună cu firmware-ul terminat pot fi descărcate de pe link-ul [9].

Tabelul 7. Varietatea încărcătoarelor care pot fi utilizate pentru platforma de dezvoltare Arduino.

ATmega8, ATmega168, ATmega328 și altele

Folosit pentru majoritatea cardurilor Arduino, când codul este încărcat prin intermediul podului USB-UART.

ATmega32U4 și altele

Aplicabil pentru cazurile în care microcontrolerul AVR are la bord o interfață USB hardware. Încărcătorul se bazează pe protocolul Atmel DFU Flip și pe biblioteca deschisă LUFA.

Se aplică la plăcile metaboard. Încărcătorul se bazează pe biblioteca deschisă USB, simulează comportamentul programatorului popular USBasp.

Cum se compilează. Pentru a compila, veți avea nevoie de toon AVR-GCC, disponibil pentru majoritatea sistemelor de operare - Linux, Mac OS, Windows. Pe sistemul de operare Windows, îl puteți obține dacă descărcați și instalați pachetul WinAVR sau mediul de dezvoltare Atmel Studio.

Încărcătorul compilează comenzile de marcă. De obicei, trebuie să intrați în directorul cu codul sursă al încărcătorului și să executați două comenzi:

După aceea, în directorul curent se va depune la HEX - (! Nu uitați să instalați corect Fyuz microcontroler) gata încărcătorul de firmware pentru a fi înregistrate în memoria microcontroler folosind un ISP-programator convențional.

Instrucțiunile de compilare și opțiunile personalizate pot fi obținute, de obicei, prin examinarea conținutului fișierului Makefile al proiectului bootloader și a fișierelor de documentație readme.txt însoțitoare.

[Exemplu de configurare a bootloaderului Arduino UART]

Procesul de obținere a firmware-ului bootloader constă în preconfigurarea fișierului Makefile. în cazul în care opțiunile sunt configurate (dacă este necesar) și apoi compilate cu face curat și face. Desigur, pentru compilare trebuie să aveți un tolchein (compilator AVR GCC și biblioteci). Pe sistemul de operare Windows, puteți obține hulk-ul dacă instalați pachetul de dezvoltare al WinAVR sau Atmel Studio.

Când aveți nevoie pentru a obține bootloader la Arduino, de multe ori (în funcție de tipul de card sau de design-ul) este un microcontroler ATmega328, sau mai puțin ATmega168, ATmega8, ATmega32U4. Prin urmare, mai întâi trebuie să alegeți ce încărcător de boot să folosească. Aproape toate dispozitivele de alimentare pot fi găsite în instalarea dosarul Arduino c: \ Program Files \ Arduino1.0.6 \ hardware \ Arduino \ bootloader, subdirectoarele distribuite ATmega8, ATMEGA și altele.

Selectarea bootloader-ului. Dacă aveți nevoie de un bootloader pentru ATmega8, atunci codul sursă și Makefile se află în dosarul atmega8. Dacă aveți nevoie de un bootloader pentru ATmega168 sau ATmega328, consultați dosarul atmega. Dacă aveți nevoie de un bootloader pentru ATmega32U4, îl puteți găsi în biblioteca LUFA, consultați folderul Bootloaders \ DFU.

Notă: codul sursă și descărcările de firmware pot fi descărcate de pe linkul [9].

• DEFS. Această opțiune specifică viteza ceasului de sistem prin valoarea variabilei macro F_CPU. De exemplu, dacă opțiunea este specificată:

atunci aceasta înseamnă că firmware-ul va fi compilat pe baza frecvenței ceasului de 8 MHz. 8 MHz este de obicei utilizat dacă generatorul RC intern al microcontrolerului AVR funcționează. Dacă utilizați o frecvență de ceas diferită, setată de un rezonator cuarț extern, specificați apoi lângă -DF_CPU = frecvența ceasului în Hertz. Cea mai frecventă frecvență a ceasului este 16 MHz, adică trebuie să specificați -DF_CPU = 16000000.

Notă: Este important să se specifice frecvența corectă de ceas, deoarece această valoare este legată setarea UART serial, prin care bootloader primește un cod de gazdă (de la sistemul de dezvoltare Arduino IDE folosind AVRDUDE programare apel instrument). Setarea incorectă va cauza UART că încărcătorul nu se poate obține codul de program de utilizator, iar microcontrolerul nu va reflash prin intermediul bootloader.

În acest moment, configurația bootloader-ului poate fi considerată completă. Pentru a obține firmware-ul încărcătorului, rămâne să executați o serie de două comenzi:

După compilare, obținem fișierul ATmegaBOOT.hex, care poate fi scris folosind programatorul ISP în memoria microcontrolerului ATmega8. Nu uitați să setați siguranțele microcontrolerului după ce ați programat încărcătorul încărcător (vezi tabelul 4).

Tabelul 8. Selectați țintă în Makefile pentru ATmegaXX8.

Notă: Obiectivul țintă, specificat în tabel, este înlocuit ca o opțiune a comenzii de execuție la compilarea firmware-ului:

face curat
face <тут надо указать Target>

Primul lucru pe care trebuie să-l faceți este să selectați țintă pentru compilare (opțiune din coloana Țintă din tabelul 6), în funcție de cardul pe care îl utilizați. Să presupunem că aveți o placă de sine stătătoare pe microcontrolerul ATmega328, pentru care intenționați să faceți bootloader-ul. Apoi, obiectivul pentru compilare va fi atmega328, firmware-ul este obtinut prin executarea a 2 comenzi:

Dacă utilizați o viteză diferită de ceas, verificați valoarea AVR_FREQ variabile macro (obiectivele atmega328 implicit set frecvență de ceas de 16 MHz: AVR_FREQ = 16000000L). După compilarea veți obține ATmegaBOOT_168_atmega328.hex firmware-ului, care pot fi scrise în memorie microcontroler folosind programator ISP. Atenție, nu uitați să instalați corect siguranțele microcontrolerului (vezi tabelul 4).

În lista dvs. pot adăuga un bootloader scris pentru interfața RS-485. Pe site-ul avr-assm.ru codul sursă al încărcătorului în asamblare și programul pentru calculator sunt stabilite.

Alo
Și din software-ul de pe partea PC-ului pe care îl sfătuiți? avrdude?
Pentru asta, atunci gui atârnă.
În scenariu: clientul a conectat dispozitivul, a lansat programul de actualizare a software-ului, a făcut clic pe butonul "OK" și dispozitivul a fost cusut?

microzin: da, avrdude este cel mai bun. Deasupra lui este shell-ul, avrdude-gui. Dacă utilizați încărcătorul USBasp, utilitarele GUI ale Khazama 1.6.2 și eXtreme Burner sunt, de asemenea, potrivite.

Vă mulțumim tuturor celor care împărtășesc informații, mulțumiri speciale entuziaștilor care susțin activitatea site-ului! Dacă nu pentru ajutor, aș trimite clienții la un mod erotic lung, iar acum - a subminat lor ASM-source și podsunu sub Arduinkinu ​​shell - bine, clientul doreste, ce s-ar fi întâmplat cu el este clar în cazul în care configurarea, și în cazul în care bucla principală a ciclului de program)

Citat Kaseiiro: Din nou, subiectiv - bootloader pentru AVR nu trebuie să vă scrie ca mai bine decât a fost deja scris (și mulți care nu sunt razgrebete), nu va mai scrie.
Probabil că sunt mai proastă decât asta, nu am auzit încă. Scriu pe ASMA pură pentru AVR timp de 10 ani (scris și TCP-UDP), și întotdeauna încerc să scriu totul singur - în acest și farmecul controlorului - pentru tot ce vă puteți răspunde singur. Și cum să găsești un bootloader cu firmware-ul de criptare, care ar transfera clienților noștri versiuni fără capacitatea de a copia dispozitivul, nu?

microsină: este alegerea dvs. - să vă petreceți sau nu eforturile proprii pentru a inventa o bicicletă. La urma urmei, mulți oameni nu se programează pentru plăcerea lor, ca tine, de exemplu, ci pur și simplu îndeplinesc sarcina care ți-a fost încredințată, adică îndeplinesc sarcina cât mai eficient posibil. Și când ambele pachete TCP, și bibliotecile pentru criptare și mult, mult mai mult - deja pe o tavă de argint - nimeni în mintea potrivită nu va îndrăzni să piardă timp prețios.

Un bootloader care lucrează la ATmega16, dar pe interfața rs485 este cu disperare necesar. Adica, bootloader-ul trebuie de asemenea sa smulga un microcontroler cu un picior pentru a comuta driverul max485 la receptie sau la transmisie. Există un astfel de lucru?

microsin: Cred că trebuie să luați bootloader-ul pentru COM-port (RS232, USART) și ușor modificați-l pentru a comuta direcția transferului de date. Bootloaderul RS232 pentru AVR nu este o problemă.

Am o întrebare despre pornirea boot-ului. Există vreo modalitate de a face acest lucru, astfel încât să puteți face fără un jumper? E. Pur și simplu conectat la dispozitivul USB și gazdă USB însuși ia spus că el ar trebui să fie sticle Start rapid? De exemplu, în codul principal pentru a da seama cum să-l reporni, dar înainte de a reporni încă EEPROM, de exemplu, un steag de un anumit set pentru a reporni pe ea nu iese din moloz până la firmware-ul nu suge? Păi sau ceva de genul ăsta?

Există un bootloader pentru utilitarul AVRprog, care face parte din AVRStudio?

Compilatorul, atunci de ce ar trebui să știu despre "mai puțină memorie"? Veți observa. Și încărcătorul se poate curăța și îl poate interzice.
Și totuși, subiectiv: încărcătorul este mai bine să scrie independent.

microzin: despre compilator - ai dreptate, dacă nu te gândești la ceea ce ai vrut cu adevărat să întrebi. Și restul. Totul în această lume este subiectiv din punct de vedere uman. În special, din punctul meu de vedere - încărcător este mai bine să nu interzică și să permită mai prost și mai mici. Din nou, subiectiv - bootloader pentru AVR NU trebuie să vă scrie ca mai bine decât a fost deja scris (și mulți care nu sunt razgrebete), nu va mai scrie.

Spuneți-mi, ce trebuie să adaug, configurați în proiect WinAVR IAR CVAVR dacă programul este creat pentru bootloader? Asta este, cum să-i spuneți compilatorului că există mai puțină memorie disponibilă decât în ​​cazul pietrei selectate?

microsină: ați specificat trei sisteme de design, astfel încât să răspundeți la întrebarea pe care va trebui să o scrieți un articol întreg. Adresați-vă întrebări specifice, și chiar mai bine - scrieți despre acest lucru la e-mail. Cantitatea de memorie este specificată în general în descrierile care descriu microcontrolerul. sau în setările proiectului sau în opțiunile linkerului.







Articole similare

Trimiteți-le prietenilor: