Curs de formare avr

Microcontrolerele AVR au capacitatea de a se auto-programa, adică pot schimba independent conținutul memoriei flash. În termeni practici, acest lucru înseamnă că, scriind un program special de încărcare pentru microcontroler (așa-numitul bootloader), putem actualiza firmware-ul fără a folosi programatorul. Interfața, prin care codul programului va fi transferat către microcontroler, poate fi complet arbitrar. De obicei, una dintre interfețele suportate de hardware este utilizată în acest scop, de exemplu SPI. I2C sau RS-232. Cu toate acestea, există încărcătoare bazate pe implementarea software-ului de interfețe precum USB și 1-Wire.

Pentru microcontrolerele AVR, există o multitudine de bootloadere gata făcute și, în majoritatea cazurilor, le putem folosi în siguranță în dispozitivele noastre, fără a ne deranja să scriem propriul bootloader. În acest articol, vom examina unul dintre aceste bootloadere, care este dezvoltat și distribuit gratuit de către Chip45, și vom afla cum să îl folosim.

Memoria program a microcontrolerelor AVR este împărțită în două secțiuni - secțiunea program de aplicații și secțiunea bootabilă. Un încărcător (sau un bootloader) este pur și simplu un program care este stocat în aceeași secțiune și poate scrie / citi ambele secțiuni de memorie ale microcontrolerului. Această caracteristică permite încărcătorului să modifice și chiar să se ștergă! Adică, să comită un fel de sinucidere în program.

Pentru ca noi să profităm de avantajele comodității bootloader-ului, trebuie să-l scriem în memoria microcontrolerului cu ajutorul programatorului. Domeniul de memorie în care va fi scris încărcătorul este specificat în fișierul de configurare linker înainte de a compila codul sursă al încărcătorului. Acest subiect depășește domeniul de aplicare al acestui articol și nu o vom lua în considerare aici. Pentru noi, este mai important, dacă avem un fișier hex hexagonat al încărcătorului, nu trebuie să ne gândim la nimic, ci doar îl aprindem în microcontroler în același mod ca cel mai comun program!

Dimensiunea secțiunii încărcătorului și secțiunea de aplicare sunt specificate folosind biții de configurare BOOTSZ1, BOOTSZ0. Pentru microcontrolerul ATmega16, dimensiunile secțiunilor de memorie, în funcție de valorile biților de configurare, vor arăta astfel.

Curs de formare avr

Dimensiunea maximă posibilă a partiției de boot pentru ATmega16 este de 1024 cuvinte pe 16 biți, ceea ce corespunde la 2 KB de memorie flash. În cazul în care încărcătorul nu este utilizat, programul de aplicații poate ocupa tot spațiul de memorie flash disponibil al microcontrolerului.

Valoarea biților de configurare depinde de cerințele încărcătorului particular. De exemplu, pentru un bootloader Chip45, este necesară o secțiune bootabilă de 1024 cuvinte (2 KB), dar puteți scrie și un bootloader mai compact. Totul depinde de funcționalitatea pe care o puneți în ea și de capacitatea dvs. de a face față.

Să presupunem că am scris un bootloader în microcontroler, cum să-l folosim? Pentru ca încărcătorul să funcționeze, acesta trebuie activat (funcționare). Există două moduri de a face acest lucru:

- mutați vectorul de resetare la începutul partiției de boot,

- treceți la începutul partiției de boot.

Implementarea celei de-a doua metode implică faptul că microcontrolerul conține atât un încărcător cât și un program de utilizator care va efectua tranziția către zona de încărcare atunci când are loc un eveniment.

unde (void (*) ()) este o expresie pentru turnarea tipului de date

Atunci când microcontrolerul se mișcă în secțiunea de încărcare a încărcăturii, dacă o pune așa, "aruncă toate treburile", chiar dacă acestea nu sunt terminate. În unele aplicații, acest comportament poate să nu fie acceptabil (cel mai simplu exemplu este dispozitivul de control al elementului de încălzire), deci înainte de a începe încărcarea, trebuie să aduceți microcontrolerul sau dispozitivul într-o poziție neutră. Amintiți-vă!

Ce se întâmplă când încărcătorul scrie firmware-ul în memoria microcontrolerului? El pornește fie el însuși programul aplicației, fie așteaptă o comandă din programul de control de pe computer. Acest lucru depinde deja de implementarea unui anumit bootloader.

Și ultimul punct, dacă în mod obișnuit coaseți programul de utilizator în microcontroler cu ajutorul programatorului, încărcătorul va fi șters.

Să mergem la încărcătorul Chip45. Care este particularitatea sa?

1. Prezența firmware-ului ready for flasher pentru o gamă largă de microcontrolere AVR, precum și microcontrolerele XMEGA. Nu este nevoie să vă compilați firmware-ul!


2. Mediu grafic simplu și convenabil pentru lucrul cu încărcătorul, precum și porturile sale pentru mai multe sisteme de operare (Windows, Linux, Mac OS X).

3. O interfață de comandă simplă pentru lucrul prin programe terminale.

4. Utilizați pentru schimbul de date modul UART, care vă permite să descărcați firmware-ul la microcontroler prin RS-232 sau USB, în cazul utilizării unui convertor USB-UART.

5. Suport pentru interfața RS-485.

6. Capacitatea de citire / scriere a memoriei EEPROM.

7. Setarea automată a cursului de schimb al UART-ului cu gazda, indiferent de frecvența ceasului microcontrolerului.

8. Funcții suplimentare pentru activarea încărcătorului, prin trimiterea unui șir arbitrar.

9. Dimensiunea necesară a partiției de boot este de 1024 de cuvinte (2 KB de memorie flash)

Înregistrarea încărcătorului în microcontroler constă în următorii pași:

- setați dimensiunea partiției de boot la 1024 de cuvinte,
- setați bitul de configurare BOOTRST,
- interzicem împărțirea frecvenței ceasului, dacă există un bit CLKDIV8,
- interzicem temporizatorul de watchdog, dacă este activat de un bit WDTON,
- alegeți firmware-ul potrivit pentru microcontrolerul nostru,
- scrieți-l microcontrolerului cu ajutorul oricărui programator.

Principala dificultate pentru începători este instalarea corectă a biților de configurare. Ele cauzează adesea confuzie, deoarece unii programatori percep 1 în bitul de configurare ca stare neprogramată, 0 așa cum este programată, iar unele invers. Prima opțiune corespunde foii de date a microcontrolerelor AVR (vezi imaginea de mai sus).

Singurul lucru pe care îl pot face este să te calmez - instalarea incorectă a acestor biți nu blochează posibilitatea programării microcontrolerului de către un programator obișnuit.

Programarea microcontrolerului cu ajutorul încărcătorului se realizează după cum urmează:

- conectați microcontrolerul la computer prin RS-232 sau USB, utilizând un convertor USB-UART,

- executați programul GUI Chip45boot2 (ar trebui instalat),

- setați portul COM dorit și viteza de schimb,

- selectați un fișier hex pentru a încărca în microcontroler,

- apăsăm butonul "Conectare la Bootloader",

- dacă indicatorul unei conexiuni de succes este aprins în program, scrieți firmware-ul la microcontroler făcând clic pe butonul "Program Flash"

- executați aplicația făcând clic pe butonul "Pornire aplicație"

Programul GUI Chip45boot2 vă permite de asemenea să activați bootloader-ul trimițând un șir arbitrar. Desigur, pentru aceasta, trebuie să existe deja un firmware în microcontroler care susține această posibilitate.

Acest lucru poate fi convenabil dacă dispozitivul de pe microcontroler nu are un buton de resetare disponibil, bine, de exemplu, acesta este bine închis în carcasă.

Restul informațiilor pot fi găsite în descrierea tehnică a acestui bootloader, deși majoritatea i-am spus.

Curs de formare avr

Și la mine era cel mai mult. Motivul a fost că bitul WDTON a fost pornit. De exemplu, este permisă de WATCHDOG. De îndată ce am luat-o de pe această problemă imediat dispărut. În general, acest articol este scris despre.

Nu, am dezactivat WDTON (nu este permis). Am verificat imediat. Dar problema a fost oarecum diferită: fișierul hexazecimal al firmware-ului nu sa deschis deloc în programul driverului flash. A apărut o eroare. Ie înainte de firmware-ul din MC, nici măcar nu a coborât.

Multumesc pentru articol. După ce am inundat programul meu cu chip45bootGui, am pierdut abilitatea de a vă conecta la bootloader și abilitatea de a scrie codurile mele în carne. Și de ce după ce am suprascris încărcătorul din MK se conectează, dar de aproximativ 10 ori mai lent decât atunci când a fost pre-instalat de producător. Care este greșeala mea?
Consiliul Crumb128-Can V5.1, MK AT90CAN12
Mulțumesc

Nu, conexiunea cu bootloader-ul nu este pierdută. Puteți utiliza încărcătorul de încărcare după ce ați scris memoria flash cât de multe doriți.
De ce dupa ce suprascrierea bootloader-ului se conecteaza mai lent, nu pot sa spun. Poate că a existat un alt bootloader ușor diferit, care inițial a funcționat cu un curs de schimb mai mare.

Multumesc pentru articol. Am cerut atmega644p că totul funcționează așa cum ar trebui. În cele din urmă, puteți fără cinci fire :-) Frumusețe!

Articole similare