# ATMEL mikrokontrolleri >  AVR Bootloader

## marcina

Tātad man nu nekādīgi nepielec - kas tas tāds Bootloaders ir???
Vismaz man vienmēr licies, ka tas ir tas pats RESET vektors (nu, piem., tur AVR kontroliera timeru inicializēšana utt.)...   ::  
Ļooti gribētu zināt atbildi uz šo jautājumu!  ::

----------


## M_J

Ne gluži tā. Bootloaderis ir programma, ar kuras palīdzību Tu ielādē mikrokontrolierī pārējo programmu. Būtībā jau mikrokontrolierī bootloaderi iebūvē jau ražotājs - kā citādi ar programmatora palīdzību Tu tur dabūtu iekšā savu programmu. Bet mikrokontrolieru ražotāji piedāvā Tev iespēju ielādēt kontrolierī arī savu bootloaderi - nelielu, noteiktā vietā novietotu programmiņu, ar kuras palīdzību Tu vari nomainīt savā mikrokontrolierī programmu. Ja tu mirokontrolierī esi ielādējis bootloaderi, tad turpmāk Tev vairs nav nekādas vajadzības to slēgt pie programmatora, lai ieprogrammētu jauno programmas versiju. Es šo iespēju izmantoju, tas ir ļoti ērti. Visas manas pēdējās konstrukcijas ir slēdzamas pie datora. Nu un attiecīgajā datora programmā, kas apkalpo šo ierīci izvēlnē ir punkts "programmas nomaiņa". Ierīce strādā, ir pieslēgta pie datora, kaut ko gribas uzlabot. Nokompilē jauno kodu un neizslēdzot ierīci dažu sekunžu laikā jaunais kods tiek ielādēts mikrokontrolierī. Vēl viena priekšrocība - ātrums ar kādu var iedzīt programmu kontrolierī izmantojot bootloaderi ir krietni lielāks, kā to pašu darot ar programmatoru, neskaitot to ka nav nekāda čakarēšanās ar programmatoru.

----------


## marcina

Hmm - ļoti interesanti. Paldies par informāciju!   :: 
Tad jau skatīšu, kā to tālāk realizēt, jo tik tiešām: man uzlodēta plate: Atmega8535 un FTDI, un tad man vajagot divus USB portus - vienu programmatoram, otru FTDI   ::  
Būtu interesanti uzzināt - programmēt to megu nāksies pa tām pašām kājām? Kaut gan - ja es pats rakstu progu - bootloaderi, tad jau izvēle manās rokās - pa kurām! Saprotams, ka izmanto drošvien tās, kas izmanto USART'am, TWI utt. Vai ne!?
M_J, to izmanto jau kādu gatavu loaderi vai arī pats rakstīji?   ::

----------


## M_J

Izmantoju USARTu, bootloaderi rakstiiju pats.

----------


## marcina

Vēl līdz šobaltdienai neesmu rakstījis savu bootloaderi, bet radies tāds jautājums:
Es tak ceru, ka mans uzrakstītais bootloaderis nepārrakstīs oriģinālo... citādi tā MCU nočakarēt ir viens divi...




> Nokompilē jauno kodu un neizslēdzot ierīci dažu sekunžu laikā jaunais kods tiek ielādēts mikrokontrolierī.


 Pie kādiem tad gadījumiem jāizslēdz ierīce - vismaz ISP MKII vienkārši taisa RESET. Vai arī Tu bootloaderi izvietoji programmas sadaļā un izsauc ar call?   ::

----------


## M_J

Oriģinālo bootloaderi nesačakarēsi - tas ir iešūts kaut kur, es pat nezinu kur, domāju ka tam gribēdams klāt netiksi. To bootloaderi, kuru raksta pats, nevar izvietot, kur ienāk prātā - to ir atļauts izvietot vecākajās programmas atmiņas adresēs. Sākot ar kuru adresi atļauts ievietot bootloaderi - to vari nodefinēt ar "fuse" bitu palīdzību, bet pārāk liela brīvība tur nav. Visādi citādi jau tā vieta, kur izvietots bootloaderis ir parasta programmas atmiņas sadaļa, kurā nokļūstu arī ar CALL. Vispār man nokļūšana bootloaderī notiek divos gadījumos: no galvenās programmas ar CALL un, ieslēdzot ierīci. Ieslēdzot ierīci procesors kādu pussekundi padzīvojas pa bootloaderi un paskatās, vai viņā kāds negrib kaut ko ielādēt. Doma ir sekojoša: laikā kamēr ar bootloadera palīdzību procesorā kaut kas tiek ielādēts viss kas var notikt: var pārtrūkt barošana, var nejauši tikt izrauts vads, galu galā var ielādēt kontrolierī galīgi gļukainu programmu. Īsāk sakot - iespējama situācija, kad ielādētā galvenā programma nestrādā. Tad no galvenās programmas bootloaderī vairs netiksi. Bet meklēt programmatoru, sprausties klāt programmēšanas galiem - vai kāds slinkums! Tad nu paliek iespēja uzsākt galvenās programmas nomaiņu ieslēgšanas brīdī. Par komandu CALL no galvenās programmas - var jau to lietot, bet jāatcerās ka ar RET vienalga atgriezties vairs nevarēs - galvenā programma ta būs nomainīta, un atgriežoties uz to adresi, no kuras nācām tur jau būs kaut kas pavisam cits. Tāpēc pēc sekmīgas programmas nomaiņas eju uz resetu. Kāpēc pieminēju, ka programmu mainu neizslēdzot ierīci - tāpēc, ka man programmators nestāv visu laiku pieslēgts ierīcei. Normālā darbības režīmā tās kājas, pie kurām slēdz programmatoru kaut arī izvestas uz štekeri, man tiek izmantotas citiem mērķiem. COM ports arī kompim man tikai viens. Tad nu iznāk tā - ja jāmaina programma parastajā veidā, izslēdzu ierīci, izeju no programmas, kas savieno PC ar ierīci, atveru PonyProg, sameklēju pagaldē programmatoru, pārspraužu vadus, ielādēju Atmelī jaunuzcepto programmas versiju un pēc tam atkal daru visu pretējā secībā. Neērti taču, ja var vienkārši ieiet programmas sadaļā "update" un ielādēt kontrolierī jauno kodu.

----------

