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ă, prin scrierea unui program special pentru încărcător microcontroler (numit bootloader), putem actualiza firmware-ul fără a utiliza programator. 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 microcontrolere AVR există o multitudine de bootloader gata, și, în cele mai multe cazuri, le putem folosi în condiții de siguranță în dispozitivele lor, nu deranjează să scrie propriile lor 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 de programe a microcontrolerelor AVR este împărțită în două secțiuni - o secțiune a programului de aplicații și o secțiune 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ți de configurare BOOTSZ1, BOOTSZ0. Pentru microcontrolerul ATmega16, mărimea secțiunilor de memorie, în funcție de valorile biților de configurare, va 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 toate 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 și capacitatea de a codifica.

Să presupunem că am scris un bootloader în microcontroler, cum să-l folosim? Pentru ca încărcătorul să funcționeze, trebuie activat (executați). 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 nu poate fi permisă (cel mai simplu exemplu - sistemul de control de încălzire), astfel încât aveți nevoie pentru a aduce un microcontroler sau un dispozitiv în unele neutru înainte de a începe încărcător. 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







Articole similare

Trimiteți-le prietenilor: