Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

După cum s-ar putea să fie conștienți, Arduino (sau, mai degrabă, microcontrolerul pe bord) sprijină watchdog (watchdog), care vă permite să setați intervalul de timp după care microcontrolerul va fi resetat, chiar dacă programul se blochează. În acest caz, temporizatorul poate fi resetat programat. Schema de lucru este aproximativ următoarea: "vom introduce" cronometrul pentru un anumit număr de secunde, iar apoi în programul principal vom reseta contorul în mod constant, dacă totul merge normal. De îndată ce oprim resetarea contorului (care poate însemna o trecere în mișcare), controlerul va reporni automat după un anumit timp. Cu toate acestea, lucrul cu supraveghetorul va fi suportat de încărcătorul de bord. Faptul este că, după reboot, care a fost numit watchdog, controlorii din ultimele emisiuni părăsesc temporizatorul pentru o perioadă minimă, adică 15ms. Este necesar să fie în măsură să învețe în program, că resetarea a fost pe watchdog.Poetomu încărcător de prioritate - informații magazin care o repornire a fost „neașteptat“ și opriți imediat garda. Dacă acest lucru nu se face, sistemul se va deplasa la boot, adică va fi întotdeauna supraîncărcat. După cum știți, Arduino are un bootloader special, care este executat mai întâi după repornirea sistemului. Și, din păcate, bootloader-ul standard nu restabilește watchdog-ul! Astfel, sistemul intră într-o bootă aprigă (starea "nebun condus", în care LED-ul de pe pinul 13 clipește ca un nebun). Din articol, veți învăța cum să verificați încărcătorul încărcat de pe cardul dvs. pentru a susține ceasul de supraveghere și ce să faceți dacă nu este acceptat.







Pentru a testa încărcătorul, încărcați următoarea schiță în placă:

După punerea în funcțiune, LED-ul încorporat va lumina intermitent, semnalizând că încărcătorul a pornit. Mai departe, în secțiunea de configurare, supraveghetorul cu temporizatorul este pornit timp de 8 secunde. După 8 minute de funcționare, ar trebui să apară o repornire. Dacă după repornirea panoului se repetă întregul ciclu, atunci cartea dvs. susține căștile:

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Arduino nu este afectată de bootloop

În caz contrar, veți vedea cum LED-ul de pe pinul 13 începe să clipească febril. Aceasta este doar manifestarea externă a bootloop-ului. În monitorul portului veți vedea numai primul ciclu. După aceasta, se vor elimina noi linii:

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Arduino este supus la bootloop

Apăsarea butonului de resetare nu schimbă situația. Pentru a "vindeca" placa, trebuie să fie deconectată de la sursa de alimentare, apoi să reconectați și să vărsați orice altă schiță.

După ce clipește încărcătorul de încărcare optiboot, nu mai puteți încărca schițe în placă cu setările de mediu standard. Prin urmare, recomandăm ca toate acțiunile ulterioare să fie efectuate pe o copie a mediului de dezvoltare. În linux OS, este suficient să copiați directorul din care este lansat mediul de dezvoltare cu noul nume. În Windows, se pare că pur și simplu copiați dosarul (în mod implicit C: \ Program Files (x86) \ Arduino). Apoi, toate căile spre dosare și fișiere sunt relative la directorul rădăcină cu mediul de dezvoltare.

Fișierul optiboot-master / optiboot / bootloaders / optiboot din arhivă trebuie mutat în hardware / arduino / avr / bootloaders / optiboot







Conținutul fișierului optiboot-master / optiboot / boards.txt trebuie să fie atașat la sfârșitul fișierului hardware / arduino / avr / boards.txt

După lansarea (re) lansării mediului de dezvoltare, pe lista placilor apar noi plăci marcate [optiboot].
Veți avea nevoie de 2 plăci Arduino pentru a bloca bootloader-ul. Unul dintre ei va fi folosit ca programator. Teoretic, orice placă este potrivită ca programator. Dar am reușit să obțin doar Arduino Uno să lucreze. Neano și leonardo nu au vrut să lucreze ca programatori. Dacă nu arduino Uno, nu-l cumpărați de la un vânzător confirmat, pot aici.

Conectați placa la un programator de calculator și completați schița ei Arduino ISP-ul, care este un mediu de dezvoltare standard (Dosar-> Arduino ISP-> Arduino ISP).

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Arduino firmware-ul sketch ISP

Acum puteți să deconectați temporar programatorul de bord din computer. Și conectați-l la placa în care vrem să înregistrăm bootloader-ul. În cazul meu, va fi Arduino Nano. Firmware-ul este realizat printr-un conector ICSP separat, care se află pe aproape toate panourile. MISO se conectează cu MISO, MOSI cu MOSI și SCK cu SCK. În același timp, ICSP a panoului țintă trebuie să fie conectat la pinii obișnuiți ai plăcii programatorului. Acest lucru este destul de ciudat, dar conexiunea ICSP-ICSP nu funcționează. Deși contactele sunt conectate fizic între ele. Conexiunea trebuie făcută în conformitate cu următoarea schemă:

Numărul de ieșire de pe placa de programare

Ieșire conector ISCP

Iată conectorul conectorului ICSP (placa este orientată cu conectorul USB spre dreapta):

Conector ICSP Arduino

În plus, este necesar pentru programator pentru a seta bord-capacitate condensator electrolitic puțin 10mkF (uF) între Reset terminal și GND, pentru a preveni programator reseta automat la începutul EEPROM. Nu uitați să conectați alimentarea la placa țintă.

De asemenea, puteți seta LED-urile (prin intermediul unui rezistor) cu care programatorul semnalează erori:

Numărul de ieșire de pe placa de programare

Modifică cu ușurință luminozitatea care semnalizează funcționarea normală

Eroare în timpul firmware-ului

Clipește în timpul firmware-ului

Asa ar trebui sa arate ca in final:

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Programatorul este conectat la Arduino Nano

Circuitul nu prezintă rezistențe pentru LED-uri, astfel încât să nu aglomereze ilustrația. Dacă nu știți de ce LED-urile au nevoie de rezistențe, atunci am scris întregul articol pentru tine: LED.

În cazul firmware-ului Arduino Pro Mini, care nu are IΣSP, conexiunea se face direct la pinii:

Numărul de ieșire de pe placa de programare

Concluzie Arduino Mini

După conectarea plăcii țintă la programator, trebuie să conectați programatorul la computer, selectați "Arduino ca ISP" ca programator:

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Și ca bord pentru firmware pentru a indica taxa țintă, nu programator. TE în cazul meu, ca o plată aleg Arduino Nano:

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Selectarea unui card pentru firmware

Acum este suficient sa selectati elementul "Tools" -> "Record bootloader":

Arduino, watchdog, bootloader și firmware bootloader optiboot, cookie-uri electronice

Înregistrați încărcătorul pe placă

După scrierea încărcătorului de boot, trebuie să remediați config-ul. Încărcătoarele optiboot au încă o caracteristică - ele măresc viteza de comunicare pe portul serial, deci atunci când folosiți placi cu optiboot, trebuie să faceți modificările corespunzătoare la placile.txt:

Pentru Arduino Nano:
menu.cpu.nano.atmega328.upload.speed = 115200
Pentru Arduino Mini:
menu.cpu.mini.atmega328.upload.speed = 115200

Cu aceste setări, nu mai puteți completa schițele pe placa de bază cu încărcătorul original. Prin urmare, trebuie fie să blițați toate plăcile în optiboot, fie să aveți o copie a mediului de dezvoltare cu setările modificate. Prin urmare, la începutul articolului am sugerat crearea unei copii a mediului.

După toate manipulările, conectați placa țintă la computer și reîncărcați schița de testare de la începutul articolului. Totul ar trebui să funcționeze.

Este posibil ca procesul de firmware să nu pornească și să apară o eroare:







Articole similare

Trimiteți-le prietenilor: