Watchdog batay sa Arduino Nano. Watchdog timer o "Watchdog" para sa teknolohiyang microprocessor

Sa page na ito matututunan mo kung paano gumawa ng sarili mong watchdog (USB Watchdog) para sa isang mining farm gamit ang sikat na Arduino platform.

Ang Arduino ay simple elektronikong taga-disenyo, batay sa mga microcontroller ng serye ng Atmega mula sa Atmel/Microchip. Layunin Proyekto ng Arduino ay upang babaan ang threshold para sa pagpasok sa larangan ng pag-develop ng naka-embed na device. Salamat sa napakalaking katanyagan ng Arduino platform, sa paglipas ng mga taon ng pagkakaroon ng proyekto, malaking bilang mga aklatan mula sa mga user na nagbibigay-daan sa iyong ikonekta ang halos anumang sensor sa Arduino (sa katunayan, ang USB Watchdog ay eksaktong parehong library). kaya lang platform na ito napakasikat bilang batayan para sa prototyping ng device. Sa constructor na ito maaari kang bumuo iba't ibang mga aparato upang i-automate ang mga pang-araw-araw na gawain. Gumagawa pa nga ng mga komersyal na produkto ang ilang manggagawa gamit ang Arduino.

Ang Arduino platform ay binubuo ng naka-print na circuit board kasama ang lahat ng kinakailangang sangkap at kapaligiran ng software Arduino IDE. Maaari kang bumili ng board sa opisyal na tindahan, mag-order ng isang clone mula sa Chinese, o i-assemble ito sa iyong sarili. Maaaring ma-download ang Arduino IDE mula sa opisyal na website.

Sa pamamagitan ng ganap na paghihiwalay ng core logic at watchdog API mula sa mga detalye ng pagpapatupad ng mga bahaging nakasalalay sa platform, ang Hardware USB Watchdog firmware ay maaaring iakma sa anumang platform na sumusuporta sa isang C++ compiler sa ilang hakbang lamang. Iyon ang dahilan kung bakit naging posible na ilipat ang firmware sa Arduino.

Pagkonekta ng Arduino sa Motherboard

Una sa lahat, kailangan namin ng debug Arduino board. Bilang watchdog timer board, maaari mong gamitin ang anumang board na sinusuportahan ng Arduino IDE. Gayunpaman, ito ay pinaka-maginhawang gamitin ang Arduino Nano dahil sa maliit na sukat nito at pagkakaroon ng lahat mga kinakailangang sangkap sa pisara. Ang mga link sa ibaba ay nag-aalok detalyadong mga tagubilin para sa pagkonekta ng Arduino Uno at Arduino Nano board sa motherboard ng computer:

Pagkatapos ikonekta ang Arduino board, kailangan mong i-load ang firmware sa microcontroller mula sa gamit ang Arduino IDE.

Matapos maikonekta ang Arduino debug board sa computer, kailangan mong i-load ang watchdog firmware dito. Upang gawin ito kakailanganin mo ang Arduino IDE. Kung nahihirapan kang i-install ang Arduino IDE, mangyaring

Ito ay hindi lihim na anumang digital na teknolohiya, maaga o huli, "nag-freeze". Ito ay palaging isang sorpresa para sa developer at ito ay palaging isang istorbo para sa gumagamit. Ito ay palaging nasa maling oras at, sayang, hindi ito hinuhulaan sa anumang paraan. At hindi mahalaga kung ito ay isang gawang bahay na "Christmas tree flasher" sa isang microcontroller chip o isang kumplikadong server na tumatakbo sa isang abalang network - mas mabuti kung ang mga pag-freeze na ito ay hindi mangyayari. At may mga sistema na ang pagyeyelo ay napaka, napakamahal.
Ang device, na tinatawag na "Watchdog," ay idinisenyo upang subaybayan ang katotohanan na ang system na kinokontrol nito ay nagyelo at, kung may matukoy na freeze, pilitin ang system na i-reboot.

Una, susulat ako ng maikling talata para sa mga "newbies" para malinaw kung ano ang pinag-uusapan ko dito. Pagkatapos ay magkakaroon ng isang talata para sa mas handa, na, na nabasa hanggang ngayon, ay hindi pa rin nais na isara ang tab ng pagsusuri :)
Ang watchdog timer mismo ay isang maliit at medyo simpleng circuit. Hangga't pana-panahong nakakatanggap siya ng mga signal mula sa kinokontrol na aparato ("oo, oo," "ayos ang lahat," "Narito ako," "Nagtatrabaho ako"), ang aso ay kumikilos nang mahinahon at hindi nakikialam sa anumang paraan . Sa sandaling huminto ang mga signal sa pagdating, ang aso ay naghihintay para sa inilaang oras (karaniwan ay ilang segundo) at, kung walang mga signal na dumating, isinasaalang-alang nito na ang aparato ay nagyelo at ipinapadala ito ng isang Reset signal, na nagre-reboot nito. Malinaw, ang isang tiyak na conditional system na nilagyan ng naturang module ay magiging mas matatag kumpara sa katulad na sistema walang asong nagbabantay: walang sinuman ang immune mula sa freezes, ngunit ang una ay lalabas sa mga freezes mismo, habang ang pangalawa ay maghihintay at tatayo hanggang sa interbensyon ng tao.
Ang isang bantay na aso ay walang pakialam kung ano ang sukat at kahalagahan ng sistemang kinokontrol nito. Maaaring ito ay isang penny na may walong paa na microcontroller chip, isang "raspberry" o "orange", isang router, o isang bahay desktop computer, at isang malaki, sopistikadong server. Kailangan lang niyang makatanggap ng mga signal tungkol sa aktibidad ng system, at upang ang system, nang naaayon, ay tumugon sa kanyang "I-reset" na salpok.
Katapusan ng talata.
Bakit isang panlabas na asong tagapagbantay kung ang anumang modernong microcontroller ay may built-in na isa? Para sa dalawang pangunahing dahilan. Una, may mga pag-freeze na hindi masusubaybayan mula sa loob ng isang kristal: ang timer ay naaantala nang live, ang watchdog ay regular na nagre-reset, at ang programa, halimbawa, ay tumatakbo sa walang katapusang loop. O naghihintay siya ng isang salpok sa ilang binti, na hindi maabot dahil sa isang uri ng aksidente. Well, hindi gaanong... Ang panlabas na hardware watchman ay hindi konektado sa mga proseso sa loob: hangga't ito ay may kapangyarihan, ito ay magbabantay.
Pangalawa, Arduino... Dapat aminin na ang bahagi ng DIY microcontroller projects na ipinatupad ng publiko gamit ang Arduino ay sumasakop sa isang makabuluhang angkop na lugar. At ang mga tagasunod ng Arduino, sayang, ay hindi maaaring samantalahin ang mga kasiyahan ng watchdog timer na binuo sa Atmega. Problema . Sa madaling sabi: gumagana lang nang tama ang watchdog sa ilang Unos, deadlocked ang natitirang mga Arduino kapag sinusubukang gamitin ang timer ng watchdog. Ang tanging solusyon ay ang pag-flash ng bootloader gamit ang isang panlabas na programmer. At ang ganitong "operasyon" ay tiyak na nakakatakot sa mga nagsisimula. At hindi lahat ay may pangalawang Arduino sa kamay upang gawin itong isang programmer upang buhayin ang una, na napunta sa isang patay na cycle dahil sa paggamit ng built-in na watchdog. Ang lahat ng mga manipulasyong ito ng isang baguhan ay malamang na matatakot lamang siya.
Ang isang panlabas na tagapagbantay ay nagbibigay-daan, gamit ang arduino sa iyong mga proyekto, upang ganap na matanggap ang lahat ng mga kasiyahan ng mga matatag na sistema, nang hindi naaabala sa mga problema ng isang panloob na timer ng tagapagbantay.

Ngayon, sa totoo lang, sa module mismo.

Ito ay maihahambing sa laki sa Arduino Pro Mini:

SA reverse side walang kawili-wili: mga track lamang na nagkokonekta ng tatlong vias sa mga module pin. Oo, hindi masyadong mataas ang kalidad na wash flux:

Ang module ay binuo batay sa Dallas DS1232 chip.
Para sa mga nakasanayan nang magbasa ng opisyal na literatura, narito.
Nagbibigay ang chip ng tatlong function nang sabay-sabay: power monitoring, watchdog timer at ang pagbuo ng tamang Reset pulse (ang kinakailangang mga gilid, amplitude at tagal), kahit na may contact bounce pindutan ng kamay i-reboot.

Sa madaling sabi at maigsi tungkol sa layunin ng mga pin ng chip

Ang ST pin ay dapat makatanggap ng mga strobe pulse mula sa kinokontrol na aparato, na nagpapahiwatig ng malusog na paggana nito.

Ang isang reset pulse ay nabuo sa RST at /RST pin. Ang pagkakaiba sa pagitan ng RST at /RST pin ay ang polarity lamang ng reset pulse. Ang signal mula sa RST pin ay dapat kunin kung ang kinokontrol na device ay na-reboot bilang isang lohikal na may normal na zero sa linya ng pag-reset. Ang /RST signal, sa kabaligtaran, ay inilaan para sa mga device na na-reboot mababang antas sa linya ng pag-reset. Karamihan sa mga modernong microcontroller (kabilang ang Atmel microcontrollers, batay sa kung saan binuo ang Arduino) ay na-reboot na may zero pulses, i.e. ang naaangkop na signal para sa kanila ay /RST.

Pinipili ng TOL pin ang katanggap-tanggap ng mga kondisyon ng supply boltahe.
- kapag ang TOL ay pinindot sa lupa, ang limang porsyentong boltahe na deviation corridor ay itinuturing na katanggap-tanggap. Yung. Darating ang reboot signal kapag bumaba ang boltahe sa 4.75V.
- kapag ang TOL ay konektado sa linya ng supply, ang koridor ng boltahe ng supply ay lumalawak sa 10%. Yung. magre-reboot ang device kapag bumaba ang supply boltahe sa 4.5V.

Pinipili ng TD pin ang maximum na oras ng kontrol pagkatapos ay gagana ang watchdog timer:
- kapag ang TD ay pinindot sa lupa, ang timeout ay 150ms (mula sa pagkakataon hanggang halimbawa, ang pamantayan ay magiging 62.5ms - 250ms);
- kapag nakabitin ang TD sa ere, ang timeout ay 600ms (mula sa pagkakataon hanggang 250ms - 1000ms);
- kapag nakakonekta ang TD sa power, ang timeout ay 1200ms (mula sa pagkakataon hanggang 500ms - 2000ms). Ang microcircuit na ito ay hindi magbibigay ng shutter speed na mas mahaba kaysa sa dalawang segundo, kahit na ayon sa teorya.


Nakatulong ang nagbebenta ng isang diagram ng module at mga wiring nito:


Tulad ng nakikita natin mula sa diagram, ang mga linya ng chip na ST, RST at /RST ay output bilang parehong pangalan at sa mga pin ng module.
Ang tagagawa ay nagbigay sa amin ng pinaka-tapat at komportableng pagsasama ng chip: ang pinakamalawak na hanay ng mga boltahe ng supply (mula 4.5 hanggang 5V) at ang maximum na posibleng timeout ng watchdog (1.2 segundo).

Ngayon ang diagram para sa pagkonekta ng module sa aming conditional Arduino ay nagiging malinaw:
- ang mga linya ng Vcc at Gnd sa module ay konektado sa dalawang linya ng parehong pangalan sa arduino;
- ang /RST line sa module ay konektado sa RST pin sa Arduino
- ang linya ng ST ay konektado sa anumang libreng pin, mas mabuti nang walang hardware PWM, - halimbawa, para sa akin ito ay pin 2.

Gumawa tayo ng isang simpleng sketch upang subukan ang modyul. Ako (para sa kalinawan lamang) ay programmatically flash ang built-in na LED sa panahon ng initialization. Hindi na kailangang gawin ito; kumikislap ang LED nang wala kami. Ngunit sa ganitong paraan ito ay mas malinaw at mas naiintindihan para sa mga nagsisimula.
void setup() ( pinMode(13, OUTPUT); // Gamitin ang panloob na LED pinMode(2, OUTPUT); // Mula sa pin na ito ang Watchdog ay makakatanggap ng mga signal digitalWrite(13, HIGH); delay(50); // Sa madaling sabi blink ang LED sa bawat reboot digitalWrite(13, LOW); void loop() ( digitalWrite(2, HIGH); delay(2); // Bumuo ng maikling gilid digitalWrite(2, LOW); delay(1150); / / Ang pinakamahabang timeout ) Sa halaga ng pagkaantala na 1150 millisecond (sa aking partikular na kaso) o mas kaunti, ang aming arduino ay tahimik na umiikot sa ikot ng trabaho, walang nakakasagabal dito. Ang LED, na kumukurap sa una, ay hindi umiilaw - walang mga reboot. Sa sandaling mapataas natin ang pagkaantala na ito sa hindi bababa sa 1200 milliseconds (o magpasok ng makabuluhang pagkaantala sa pamamaraan ng Pag-setup), makikita natin na ang LED ay magsisimulang mag-flash ng paikot-ikot: ang oras ay nagiging kritikal para sa aso at nire-reboot nito ang arduino.
Sa totoong mga kondisyon ng isang gumaganang sketch, sapat na upang idagdag ang linyang digitalWrite(2,HIGH); pagkaantala(1); digitalWrite(2,MABA);
sa pinakadulo ng pangunahing loop, upang ang module ng watchdog na konektado sa pin 2 ay makaramdam ng kalmado. Kapag ang Arduino ay sinimulan, ang lahat ng mga pin ay baluktot, kaya ang aso ay walang pakialam kung alin lohikal na antas

Ang aparato ay nagyelo: ang timer ay sinimulan at, samakatuwid, ang isang pag-reboot na salpok ay tiyak na darating.
Mga konklusyon. 1. Kailangan ba ang isang watchdog timer sa prinsipyo? Kung nag-freeze sa device na iyong idinidisenyo ay maaaring humantong sa negatibong kahihinatnan

, pagkatapos ay oo. Sa pamamagitan nito, ang sistema ay malinaw na magiging mas matatag kaysa kung wala ito. 2. Ang panlabas na asong tagapagbantay ba ay isang panlunas sa lahat? Syempre hindi. Ito ay mas mahusay kaysa sa panloob na matatagpuan sa maraming microcontroller, ngunit hindi ito isang panlunas sa lahat. Upang makamit pinakamataas na kahusayan trabaho nito, mahalagang ikonekta ito tamang lugar

iyong sistema. Mas mainam na huwag ikonekta ito sa mga linya kung saan nabuo ang mga signal sa hardware (PWM, iba't ibang mga port ng hardware na may mga strobe), pati na rin sa mga signal mula sa isang panlabas o panloob na generator ng orasan. Well, ito ay ganap na walang kabuluhan upang ikonekta ito sa mga linya na gumagana bilang isang input - sa ganitong paraan hindi namin makokontrol ang aming microcontroller, ngunit iba pa. 3. May mga disadvantages ba ang bantay na ito? Ang pangunahing kawalan ng isang panlabas na watchdog timer, sa pangkalahatan, ay ang pangangailangang maglaan ng isang pin sa iyong device para sa pagpapatakbo nito. Bagaman sa pagsasanay, ito ay madalas na maiiwasan: kung ang iyong microcontroller ay patuloy na nagsusulat o gumuhit ng isang bagay sa display, patuloy na nagpapadala ng isang bagay sa mga port, bumubuo ng ilang uri ng mga control pulse para sa- ikonekta ang guard dog sa mga linyang ito - ito ay ganap na walang malasakit sa dalas at duty cycle ng mga pulso, hangga't mayroon itong patuloy na paggalaw.
Ang pangunahing kawalan ng partikular na pagpapatupad ng timer na ito ay marahil ang medyo maikling control timeout. May mga pagkakataon na gusto mong magkaroon ng reserbang hindi bababa sa 3-5 segundo.

4. Dapat ko bang bilhin ang partikular na asong tagapagbantay? Well, lahat ay magpapasya para sa kanilang sarili. Guard dog, talagang, makukuha mo ito nang mas mababa sa $3. Mas madali para sa isang tao na bumili lamang ng chip na tinalakay sa itaas at gamitin ang LUT upang gumawa ng naturang module mismo. Para sa ilan, mas madaling kumuha ng isang maalamat at gumawa ng maluwag na tagapagbantay: mga kalamangan - mura at naa-access, kahinaan - mas magulo at nakakaubos ng oras mga electrolytic capacitor, na nangangahulugan na sa paglipas ng mga taon lahat ng mga parameter ay garantisadong lumulutang. Para sa ilan, mas madaling gumawa ng one-shot gamit ang timer gamit ang semiconductors. Dito lahat ay nagpapasya para sa kanilang sarili.
Dito, para sa napaka-abot-kayang pera, nakakakuha kami ng ganap na tapos at gumaganang device na may mga standardized na parameter.
Kaya susuriin ng lahat ang pagiging makatwiran ng pagbili sa kanilang sarili.

Ang aking gawain ay pag-usapan ang tungkol sa mga naturang device, ang mga prinsipyo ng kanilang pagpapatakbo at, marahil, bigyan ang isang tao ng isang malikhaing salpok na nakapag-iisa na bumuo ng mga bagong kagiliw-giliw na mga produktong gawang bahay.

Walang nagbigay o nag-sponsor ng anumang bagay na binili gamit ang aming sariling pera.

UPD: Habang sinusulat ko ang pagsusuri, hindi inaasahang itinaas ng nagbebenta ang presyo. Oops. Isaalang-alang natin itong pansamantalang pag-atake ng kasakiman. Pana-panahong may diskwento siya sa produktong ito. Well, walang pumipigil sa iyo na hanapin ang produktong ito mula sa ibang nagbebenta.

Balak kong bumili ng +92 Idagdag sa mga paborito Nagustuhan ko ang pagsusuri +86 +164

Nagmumungkahi ako ng opsyon sa device na awtomatikong nagre-reboot sa computer kapag nag-freeze ito.

Ito ay batay sa kilalang Arduino board na may pinakamababang bilang ng panlabas mga elektronikong bahagi. Ikinonekta namin ang transistor sa board ayon sa figure sa ibaba. Ikinonekta namin ang kolektor ng transistor sa halip na naka-on ang button na "I-reset" ng computer motherboard, sa pin na HINDI konektado sa GND.

Narito ang buong diagram:

Ang aparato ay gumagana tulad ng sumusunod: isang script ay inilunsad sa computer, na pana-panahong nagpapadala ng data sa port ng computer. Kumokonekta ang Arduino sa USB at nakikinig sa port na ito. Kung walang data sa loob ng 30 segundo, magbubukas ang Arduino ng isang transistor na kumokonekta sa I-reset sa lupa, sa gayon ay ginagaya ang pagpindot sa reset button.
Pagkatapos ng pag-reset, huminto ang Arduino ng 2 minuto, naghihintay na mag-load ang lahat ng mga programa, at pagkatapos ay magsisimulang makinig muli sa port.

Ang script at mga minero ay dapat idagdag sa startup, at ang BIOS ay dapat itakda sa awtomatikong pag-on kompyuter.

Ang paggawa ng device ay nangangailangan ng kaunting kasanayan sa pagtatrabaho sa isang soldering iron at programming ng Arduino.

Maaari mo ring gamitin ang anumang H channel transistor na may magkatulad na katangian. Ngunit siguraduhin na ang pinout ay tumutugma. Halimbawa, ginamit ko ang 9013, mayroong isang baligtad na koneksyon

Binili ko ang mga bahagi para sa pagpupulong sa Aliexpress:

Mga wire para sa pagpupulong ng breadboard http://ali.pub/22k78b

Arduino UNO (eksaktong akma) http://ali.pub/22k7dd

Arduino sketch

int LedPin = 13;
int ResetPin = 12;
int val = 0;
int bilang = 0;
void setup()
{
Serial.begin(9600);
pinMode(LedPin,OUTPUT);

//simulan ang pause 2 minuto
pagkaantala(120000);
}

void loop()
{
bilang++ ;

kung (Serial.available() > 0)
{
val = Serial.read();
kung (val == 'H')
{
digitalWrite(LedPin, LOW);
digitalWrite(ResetPin, LOW);
bilang = 0;
}
iba pa
( bilang++ ;
}
}

pagkaantala(1000);

kung (bilang > 10)
{
digitalWrite(LedPin, HIGH);
digitalWrite(ResetPin,HIGH);
}
}

Script sa pagpapadala ng data sa port:

(Get-Date).ToString('dd.MM.yyyy HH:mm') | Out-File c:\Users\miner\Desktop\reboot.txt -apend

habang($TRUE)(
Start-Sleep -s 3
$port= new-Object System.IO.Ports.SerialPort COM3,9600,Wala,8,isa
$port.open()
$port.WriteLine("H")
$port.Close()
}

Kaagad pagkatapos ng paglunsad, nagsusulat ang script sa file na reboot.txt kasalukuyang petsa at oras. Mula sa file na ito maaari mong hatulan ang bilang at oras ng mga pag-reboot. Dapat na i-edit ang path ng file at numero ng port ayon sa data ng iyong system. Ang code ay nakasulat sa isang regular na notepad at nai-save gamit ang *ps1 extension.

kasi V Patakaran sa Windows seguridad, ang pagpapatupad ng mga script ay hindi pinagana i-double click at mula sa autoload ay gumawa kami ng isang pagkukunwari sa aming mga tainga at inilunsad ang shell mula sa batch file na may sumusunod na nilalaman.

Ang Watchdog ay isang device na idinisenyo upang makita at malutas ang mga problema sa hardware. Kadalasan ito ay ginagawa gamit ang isang timer, na pana-panahong nagre-restart upang maiwasan ang pagpapadala ng signal ng pag-reboot.

Ang target na server sa Gentoo ay ginagamit ko pangunahin para sa mga eksperimento, ngunit nagpapatakbo ito ng ilang serbisyo na, kung maaari, ay dapat na magagamit nang walang pagkaantala. Sa kasamaang palad, ang mga kahihinatnan ng ilang mga eksperimento ay humantong sa kernel panic, 100% load ng CPU at iba pang mga problema sa pinaka-hindi angkop na sandali. Kaya't ang ideya ng pagdaragdag ng isang asong tagapagbantay ay matagal nang nangangailangan ng pansin at sa wakas ay natupad sa device na ito.

Matapos suriing mabuti kung ano ang magagamit at masuri ang oras na magagamit, ang pinakamahusay na pagpipilian naging isang asong tagapagbantay na pinagsama-sama Batay sa Arduino Nano. Ang listahan ng mga kinakailangan ay lumitaw nang halos pareho:

  1. Pagsisimula at pagpapahinto sa daemon upang gumana sa timer, karaniwang paraan OS (OpenRC).
  2. Ang aparato ay may sariling asong tagapagbantay, mayroon itong ATmega, kailangan mong gamitin ito.
  3. Event log sa device para mag-record ng mga reboot at timer trigger.
  4. Pag-synchronize ng oras ng device sa host upang maitala ang tamang oras sa log.
  5. Pagtanggap at pagpapakita ng katayuan ng aparato at mga entry sa log nito.
  6. Pag-clear sa log at pag-reset ng device sa orihinal nitong estado.
Kaya, ang "microscope" ay natagpuan, ang "pako" ay itinalaga ... maaari itong ipasok.

Hardware

Ang aparato ay batay sa isang Chinese clone ng Arduino Nano, batay sa CH340 chip. Sariwa Mga kernel ng Linux(nasuri mula noong 3.16) mayroon angkop na driver, upang ang device ay madaling matukoy bilang isang USB serial port.

Hindi ginustong pag-reboot ng Arduino

Sa tuwing nakakonekta ang isang terminal, nagre-reboot ang Arduino. Ang dahilan ay nagpapadala ang terminal ng signal ng DTR (Data Terminal Ready), na nagiging sanhi ng pag-reboot ng device. Kaya, inilalagay ng Arduino IDE ang device sa mode para sa paglo-load ng mga sketch.

Mayroong ilang mga pagpipilian para sa paglutas ng problema, ngunit isa lamang ang gumana - kailangan mong mag-install ng 10µF electrolyte (C1 sa diagram sa ibaba) sa pagitan ng mga contact ng RST at GND. Sa kasamaang palad, hinaharangan din nito ang mga sketch na ma-download sa device.

Bilang isang resulta, ang diagram ay naging mga sumusunod:


Iginuhit gamit ang KiCad

Mga paliwanag para sa diagram

  • R1- kasalukuyang naglilimita sa risistor, na kinakalkula ayon sa detalye para sa PC817 optocoupler: (5V - 1.2V / 0.02A) = 190Ω, ang pinakamalapit na karaniwang halaga ay 180Ω.
  • U2- optocoupler para sa galvanic isolation ng Arduino at PC. Maaari kang makakuha ng sa pamamagitan ng isang transistor, dahil ang lupa ay karaniwan (sa pamamagitan ng USB connector), ngunit ito ay mas mahusay na hindi.
  • JP1- ang jumper ay dapat na sarado sa nagtatrabaho posisyon. Upang i-download ang sketch sa device, dapat itong i-unlock.
  • C1- capacitor, hinaharangan ang device mula sa pag-reboot bilang tugon sa signal ng DTR.
  • MB_RST, MB_GND- Ang RESET ay aktibo kapag ang antas ng signal ay mababa, kaya kailangan mong i-short RST sa ground (GND). Gumagamit ang optocoupler ng transistor, kaya mahalaga na mapanatili ang polarity.
  • BTN_RST, BTN_GND- isang pindutan sa katawan, kadalasan ito mekanikal na switch Samakatuwid, ang polarity ay hindi mahalaga, ngunit may mga pagbubukod.

Boot-loop (cyclic reboot) kapag nagtatrabaho sa WDT

Ang mga microcontroller ng ATmega ay may built-in na reboot mechanism gamit ang WDT (WatchDog Timer) timer. Gayunpaman, ang lahat ng mga pagtatangka na gamitin function na ito humantong sa isang boot-loop, na maaari lamang lumabas sa pamamagitan ng pag-off ng power.

Hindi mahabang paghahanap natagpuan na ang mga bootloader ng karamihan sa mga Arduino clone ay hindi sumusuporta sa WDT. Sa kabutihang palad, ang problemang ito ay nalutas sa alternatibong bootloader na Optiboot.

Upang i-flash ang bootloader, kailangan mo ng isang programmer na maaaring gumana gamit ang SPI protocol, kanais-nais din na alam ng Arduino IDE ang device na ito sa pamamagitan ng paningin. SA sa kasong ito Ang isa pang Arduino ay magiging perpekto.

Kung kukuha ka Arduino UNO, bilang isang programmer, at ang huli sa ngayon bersyon ng Arduino IDE v1.6.5, kung gayon ang algorithm ay magiging tulad ng sumusunod:

Pagkatapos ng pamamaraang ito, kakailanganin mong mag-upload ng mga sketch sa Arduino Nano gamit ang parehong mga setting - Lupon: Optiboot sa 32 pin cpus, Processor: ATmega328p, Bilis ng CPU: 16MHz.

Paghihinang

Susunod, kailangan mong maghinang ang lahat upang magmukhang isang piraso.

Dito USB plug Kailangan ko ito dahil mayroon akong mini-ITX motherboard na may isang connector lamang sa bawat pares ng USB2.0, na kailangan sa front panel, at contact pad Walang makakonekta ang USB3.0. Kung maaari, ang mga naturang device ay dapat na direktang konektado sa motherboard upang ang mga wire ay hindi dumikit.

Ang paghihinang, bilang panuntunan, ay hindi nagiging sanhi ng mga problema, ngunit sa kasong ito ang isang breadboard ay ginagamit, at ito ay may sariling mga detalye.

Paano maghinang ng mga track sa isang breadboard

Una kailangan mong maghinang ang mga bola sa mga butas (hindi mo maiinit ang mga ito sa loob ng mahabang panahon, kung hindi man ang lata ay tumagas mula sa likod na bahagi). Pagkatapos ay magsolder ng mga jumper sa pagitan ng mga pares ng katabing bola at tapusin ang track sa pamamagitan ng paghihinang sa natitirang mga segment.

Dapat itong magmukhang ganito:



Resulta:

Dito ay maaaring mukhang ang ilang mga contact ay hindi maganda ang soldered, ngunit ito ay flux lamang. Ang pagkonsumo ng panghinang sa mga breadboard ay medyo mataas, kaya lahat ng posible ay nabahiran ng flux. Sa katunayan, ito ay magandang halimbawa kung paano hindi iwanan ang produkto pagkatapos ng paghihinang. Ang pagkilos ng bagay ay dapat hugasan, kung hindi, maaaring may mga problema sa kaagnasan ng mga koneksyon. Tatapusin ko ang pagsusulat at maghuhugas ako... Mas mabuti ito:

Bahagi ng software

Sa Objectively speaking, ang code ng proyektong ito ay hindi partikular na interes. Ang mga pagpapakilala ay malayo sa sukdulan, at ang arkitektura ay inilarawan sa isang parirala: magpadala ng isang utos - maghintay para sa isang tugon. Para sa kapakanan ng pagkakasunud-sunod, ilalarawan ko dito ang pangunahing pag-andar at maikling talakayin ang pinaka mga kawili-wiling sandali, mula sa aking pananaw.

Koneksyon ng asong tagapagbantay

Kapag nakakonekta ang isang asong tagapagbantay, isang file ng device ang gagawin na naglalaman ng serial number. Kung mayroong iba pang mga aparatong ttyUSB sa system (sa aking kaso, isang modem), pagkatapos ay lumitaw ang isang problema sa pag-numero. Upang natatanging makilala ang isang device, kailangan mong gumawa ng symlink na may natatanging pangalan. Ang udev ay inilaan para dito, na marahil ay nasa system na.

Una, kailangan mong biswal na mahanap ang konektadong asong tagapagbantay, halimbawa, sa pamamagitan ng pagtingin sa file ng log ng system. Pagkatapos, palitan ang /dev/ttyUSB0 ng kinakailangang aparato, isulat sa terminal:

Udevadm info -a -p "$(udevadm info -q path -n /dev/ttyUSB0)"

Halimbawang output

tumitingin sa device "/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0/tty/ttyUSB0": KERNEL=="ttyUSB0" SUBSYSTEM==" tty" ... tumitingin sa parent device "/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0/ttyUSB0": KERNELS=="ttyUSB0" SUBSYSTEMS= ="usb-serial" DRIVERS=="ch341-uart" ... tumitingin sa parent device "/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4:1.0 ": ... tumitingin sa parent device "/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4": SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS(idVendor) =="1a86" ATTRS(idProduct)=="7523" ATTRS(product)=="USB2.0-Serial" ...


Sa kasong ito, magkakaroon ng panuntunan susunod na view: ACTION=="add", KERNEL=="ttyUSB*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS(idVendor)=="1a86", ATTRS(idProduct)=="7523", SYMLINK+="ttyrst-watchdog"

Dapat itong ilagay sa hiwalay na file sa /etc/udev/rules.d na direktoryo, halimbawa 51-ttyrst-watchdog.rules at utusan si udev na i-reload ang mga panuntunan: udevadm control --reload-rules

Mula ngayon, kapag kumokonekta sa isang watchdog, isang link /dev/ttyrst-watchdog ang gagawin sa gustong device, na gagamitin pa.

Bash script (ttyrst-watchdog.sh)

Ang komunikasyon sa asong tagapagbantay ay isinasagawa sa bilis na 9600 baud. Gumagana ang Arduino nang walang problema kapag naka-on ang mga terminal mataas na bilis, ngunit ang mga utos para sa pagtatrabaho sa text (cat, echo, atbp.) ay tumatanggap at nagpapadala lamang ng basura. Posible na ito ay isang tampok ng aking Arduino Nano lamang.

Para sa pangunahing timer restart loop at para sa mga function command line, isang script ang ginagamit. Ang dahilan ay ang parehong mga bahagi ay gumagamit nakabahaging mapagkukunan- isang file ng device, at dapat itong ma-access nang sabay-sabay.

Ang pag-synchronize ay mahalagang binubuo ng waiting loop: habang ang fuser $(DEVICE) >/dev/null 2> ay totoo; tapos na at naka-on ang device kinakailangang oras: pusa<${DEVICE}

Malinaw, ang gayong pamamaraan ay napapailalim sa isang kondisyon ng lahi. Maaari mong harapin ito sa isang pang-adultong paraan (halimbawa, ayusin ang isang pila ng mensahe), ngunit sa kasong ito, sapat na upang itakda ang mga timeout nang tama upang matiyak na makakuha ng mga resulta sa isang katanggap-tanggap na oras. Sa katunayan, gumagana ang buong script sa mga timeout.

Ang pagdemonyo (tumatakbo sa background) ay isinasagawa gamit ang OpenRC package. Ipinapalagay na ang script na ito ay matatagpuan sa file /usr/local/bin/ttyrst-watchdog.sh, at ang OpenRC script ay nasa /etc/init.d/ttyrst-watchdog.

Kapag pinahinto ang daemon, dapat na i-deactivate nang tama ang watchdog. Upang gawin ito, isang signal handler na nangangailangan ng shutdown ay naka-install sa script: trap deactivate SIGINT SIGTERM At dito lumitaw ang isang problema - OpenRC ay hindi maaaring ihinto ang daemon, o sa halip, maaari, ngunit hindi madalas.

Ang katotohanan ay ang kill command ay nagpapadala ng signal sa script, ngunit ang sleep program, na ginagamit upang i-pause ang script, ay isinasagawa sa ibang proseso at hindi tumatanggap ng signal. Bilang resulta, ang pag-deactivate ng function ay tatakbo lamang pagkatapos makumpleto ang pagtulog, na tumatagal ng masyadong mahaba.

Ang solusyon ay ang magpatakbo ng sleep sa background at hintaying makumpleto ang proseso sa script: sleep $(SLEEP_TIME) & wait $! # variable $! naglalaman ng ID ng huling tumatakbong proseso

Mga pangunahing pare-pareho:

WATCHDOG_ACTIVE- OO o HINDI, ayon sa pagkakabanggit, magpadala ng senyales upang mag-reboot kapag ang timer ay na-trigger o hindi.
WATCHDOG_TIMER- oras sa mga segundo kung saan nakatakda ang timer.
SLEEP_TIME- oras sa mga segundo pagkatapos kung saan ang timer ay dapat na i-restart. Ito ay dapat na mas mababa kaysa sa WATCHDOG_TIMER, ngunit hindi masyadong maliit upang hindi makagawa ng labis na pagkarga sa system at device. Sa kasalukuyang mga timeout, ang isang makatwirang minimum ay humigit-kumulang 5 segundo.
DEFAULT_LOG_LINES- ang bilang ng mga kamakailang entry sa log ng device na ibinalik ng log command bilang default.

Mga utos ng script:

simulan- simulan ang pangunahing ikot ng pag-restart ng timer. Maaari kang magdagdag ng karagdagang check code sa is_alive function, halimbawa, pagsuri sa kakayahang kumonekta sa pamamagitan ng ssh.
katayuan- pagpapakita ng katayuan ng device.
i-reset- pag-clear ng EEPROM (data ng log) at pag-reboot ng device upang maibalik ang watchdog sa orihinal nitong estado.
log<число записей> - pagpapakita ng isang tinukoy na bilang ng kamakailang mga entry sa log.

Arduino sketch (ttyrst-watchdog.ino)

Upang matagumpay na ma-compile ang sketch, kakailanganin mo ng isang third-party na Time library, na kinakailangan para sa pag-synchronize ng oras.

Ang sketch ay binubuo ng dalawang file. Ito ay dahil sa ang katunayan na ang Arduino IDE ay hindi tumatanggap ng mga istruktura (struct) na idineklara sa pangunahing file; Gayundin, upang magdeklara ng isang istraktura, ang typedef na keyword ay hindi kinakailangan, malamang na nakakapinsala ito... pagkatapos suriin ang mga karaniwang pagpipilian, hindi ko mahanap ang naaangkop na syntax. Kung hindi, ito ay higit pa o mas kaunting karaniwang C++.

Gumagana ang mga function na wdt_enable at wdt_reset sa watchdog na nakapaloob sa microcontroller. Matapos simulan ang WDT, ang pangunahing bagay ay huwag kalimutang i-reset ito sa pangunahing loop at sa loob ng mga loop ng lahat ng matagal na operasyon.

Ang mga entry sa log ay isinulat sa hindi pabagu-bago ng memorya ng EEPROM, ang magagamit na laki nito ay maaaring tukuyin sa logrecord.h, sa kasong ito ito ay ang numero 1024. Ang log ay ginawa sa anyo ng isang singsing, ang separator ay isang istraktura na may mga zero na halaga . Ang maximum na bilang ng mga entry para sa 1 KiB EEPROM ay 203.

  • wdt
  • bash
  • sketch
  • Magdagdag ng mga tag
    • Tutorial

    Pag-uusapan natin kung paano panatilihing laging gumagana ang Arduino. Ang mekanismo ng watchdog ay binuo sa mga controllers ng Atmega, ngunit, sa kasamaang-palad, hindi lahat ng Arduino bootloader ay humahawak sa function na ito nang tama. Subukan nating alamin ang problemang ito.

    Kaya ano ang isang asong tagapagbantay? Sa simpleng salita, ito ay isang built-in na timer para sa isang tiyak na oras (hanggang sa 8 segundo depende sa chip), na maaaring simulan sa programmatically. Sa sandaling umabot sa zero ang timer, magpapadala ang controller tama reset signal (RESET) at papasok ang buong device mahirap i-reboot. Ang pinakamahalagang bagay ay ang timer na ito ay maaari ding i-reset sa paunang estado nito sa programmatically.

    • Tama i-reset ang signal - sapat ang tagal para magsimulang mag-overload ang controller. Minsan may tukso na ikonekta ang ilang digital na output ng Arduino sa RST input at itakda ito sa 0 kapag kailangan mong mag-reboot. Ito ay isang masamang diskarte sa paglutas ng problema, dahil... ang naturang signal ay maaaring hindi sapat na mahaba, bagaman posible na sa ilang mga kaso ito ay gagana rin.
    • mahirap Ang reboot ay isang tunay na reboot na nangyayari kapag pinindot mo ang RESET button. Ang katotohanan ay mayroon ding konsepto ng isang malambot na pag-reboot - ito ay isang paglipat ng software sa ika-0 na address. Sa prinsipyo, ito rin ay isang kapaki-pakinabang na bagay, ngunit sa tulong nito imposibleng mag-overload ang isang nakapirming Ethernet controller o isang glitchy LCD.
    Sa madaling salita, ang built-in na asong tagapagbantay ay eksaktong kailangan mo nang walang anumang karagdagang circuitry, paghihinang o koneksyon.

    Mga function ng watchdog

    Upang magamit ang mga function ng Watchdog kailangan mong ikonekta ang karaniwang library sa proyekto:
    #isama
    Ang sumusunod na tatlong function ay magagamit na ngayon sa amin:

    1. Simulan ang watchdog timer:
    wdt_enable(WDTO_8S); /* Mga posibleng value para sa pare-parehong WDTO_15MS WDTO_30MS WDTO_60MS WDTO_120MS WDTO_250MS WDTO_500MS WDTO_1S WDTO_2S WDTO_4S WDTO_8S */
    Ang timer ay bibilang nang eksakto hangga't tinukoy sa pare-pareho. Pagkatapos ng panahong ito, magkakaroon ng reboot.

    2. I-reset ang watchdog timer:
    wdt_reset();
    Sa tingin ko ay malinaw kung bakit kailangan ang function na ito - habang tinatawag mo ito, hindi mare-reset ang controller. Sa sandaling mag-freeze ang system at huminto sa pagtawag ang function na ito, magkakaroon ng reboot pagkatapos ng isang tinukoy na panahon.

    3. Huwag paganahin ang asong tagapagbantay:
    wdt_disable();
    Hindi pagpapagana ng watchdog timer.

    Sa totoo lang, maaaring ito na ang katapusan ng aming kwento tungkol sa asong tagapagbantay... ngunit ang katotohanan ay ang lahat ng ito ay gumagana lamang sa Arduino Uno, at sa Arduino Mega, Mini at Nano lahat ito ay gumagana nang eksakto sa kabaligtaran, i.e. hindi gumana lahat :)

    Bakit hindi gumagana ang asong tagapagbantay sa karamihan ng mga modernong Arduino board

    Ang katotohanan ay pagkatapos ng pag-reboot, na dulot ng watchdog, ang mga controllers ng mga pinakabagong release ay iniiwan ang watchdog na naka-enable sa pinakamababang panahon, ibig sabihin. 15ms. Ito ay kinakailangan upang ang programa sa paanuman ay makilala na ang nakaraang pag-reboot ay ginawa ng asong tagapagbantay. Samakatuwid, ang unang priyoridad ng bootloader (o ang iyong programa, kung ito ay unang tatakbo) ay i-save ang impormasyon na ang pag-reboot ay "hindi inaasahan" at agad na patayin ang watchdog. Kung hindi ito nagawa, mapupunta ang system sa bootloop, i.e. ay magpakailanman ma-overload.

    Tulad ng alam mo, ang Arduino ay may espesyal na bootloader na unang tatakbo pagkatapos ma-reboot ang system. At, sa kasamaang-palad, hindi nire-reset ng karaniwang bootloader ang asong tagapagbantay! Kaya, ang system ay napupunta sa isang brutal na bootloop (ang "crazy led" na estado, kung saan ang LED sa pin 13 ay kumukurap na parang baliw).

    Mukhang ganito ang lahat:


    Mga paraan upang malutas ang problema

    Kung titingnan mo ang mga mapagkukunan ng karaniwang bootloader (kasama sila sa paghahatid ng platform), pagkatapos ay mayroong code upang huwag paganahin ang watchdog (!), Ngunit ang code na ito ay napapailalim sa conditional compilation at, tila, ang karaniwang bootloader ay pinagsama-sama nang walang watchdog suporta. Hindi bababa sa bersyon ng pakete ng platform 1.5.2 (ang pinakabago sa oras ng pagsulat), ito ang eksaktong kaso.

    Upang malutas ang problema, binasa ko pa ang mga pahina ng tao ng platform mismo (:) at tila ang problemang ito ay inilarawan doon at kahit na ibinigay ang code na dapat magpasaya sa lahat:

    Uint8_t mcusr_mirror __attribute__ ((section (".noinit"))); void get_mcusr(void) __attribute__((hubad)) __attribute__((section(".init3"))); void get_mcusr(void)( mcusr_mirror = MCUSR; MCUSR = 0; wdt_disable(); )
    Inilalarawan nito ang get_mcusr() function na dapat tawagan kaagad pagkatapos ng pag-reset. Nakamit ito ng macro na "__attribute__((section(".init3")))". Sinubukan kong isulat ang function na ito sa lahat ng mga seksyon na posible - oo, ito ay talagang tumatakbo bago ang setup() function mula sa sketch, ngunit, sa kasamaang-palad, higit sa 15ms (ang minimum na watchdog constant) pagkatapos ng pag-reset...

    Sa madaling salita, gaano man ako nagsaliksik sa Internet sa paghahanap ng madaling solusyon sa problema, walang nakita. Nakakita lang ako ng isang paraan para makapagtrabaho ang asong tagapagbantay - para i-reflash ang bootloader... na kung ano ang gagawin natin ngayon.

    Sinusuri ang functionality ng watchdog

    Bago mag-flash ng anuman, kailangan mong suriin kung sinusuportahan ng iyong Arduino ang watchdog. Upang gawin ito, nagsulat ako ng isang maliit na sketch ng pagsubok. I-upload lang ito, buksan ang port monitor at panoorin kung ano ang mangyayari.

    Pagsusuri ng asong tagapagbantay

    #isama void setup() ( wdt_disable(); // walang kwentang linya na hindi naaabot ng execution sa panahon ng bootloop Serial.begin(9600); Serial.println("Setup.."); Serial.println("Maghintay ng 5 seg..") ; void loop())( // Bawat segundo ay kumukurap kami sa LED at isinusulat ang counter value sa Serial if(!(millis()%1000))( timer++; Serial.println(timer); digitalWrite(13, digitalRead(13) ==1? 0:1);


    Pagkatapos mag-reboot (o magkonekta ng monitor sa port), magbi-blink ang built-in na LED, na nagpapahiwatig na nagsimula na ang bootloader. Susunod, sa seksyon ng pag-setup, naka-on ang asong tagapagbantay na may timer sa loob ng 8 segundo. Pagkatapos nito, magbibilang ang LED sa oras na ito para sa amin at dapat magkaroon ng reboot.

    Pagkatapos ay magsisimula ang pinaka-kagiliw-giliw na bahagi - kung ang isang pag-reboot ay naganap at ang lahat ay paulit-ulit sa parehong pagkakasunud-sunod, pagkatapos ay mayroon kang isang Arduino sa iyong mga kamay, kung saan ang bootloader ay tama na nagpoproseso ng asong tagapagbantay. Kung pagkatapos ng pag-reboot ang LED sa pin 13 ay magsisimulang kumurap ng walang katapusang, kung gayon ang bootloader ay hindi sumusuporta sa watchdog. Kahit na ang reset button ay hindi makakatulong dito. Para sa kasunod na firmware, kailangan mong idiskonekta ang board mula sa power supply at, pagkatapos i-on ito, magkaroon ng oras upang i-flash ito bago ang unang pag-reboot.

    Sinubukan ko ang 4 na uri ng mga board at tanging ang bootloader sa Arduino Uno ang gumana ayon sa nararapat:

    Mga resulta sa monitor

    Ang Watchdog ay hindi sinusuportahan ng bootloader:

    Ang asong tagapagbantay ay sinusuportahan ng bootloader:


    Ano ang pinakamadaling paraan upang mag-flash ng bagong bootloader?

    Maaari mong i-flash ang bootloader sa Arduino gamit ang hiwalay na mga programmer, o maaari kang bumuo ng iyong sariling programmer gamit ang parehong Arduino. Yung. anumang bayad Ang Arduino ay maaaring gawing isang programmer sa pamamagitan ng pag-upload ng isang espesyal na sketch doon.

    Sa artikulong ito hindi ko ilalarawan ang lahat ng mga intricacies ng paglikha ng isang Arduino-based programmer, dahil... ang paksang ito ay medyo. Ginamit ko ang Arduino Uno bilang isang programmer. Tulad ng alam mo, ang firmware ay na-flash sa pamamagitan ng isang hiwalay na ICSP connector, na matatagpuan sa halos lahat ng mga board. Sa kaso ng Arduino Pro Mini firmware, na walang ICSP, ang koneksyon ay direktang ginawa sa mga pin.

    Koneksyon para sa firmware bootloader




    Saan ako makakakuha ng bootloader na sumusuporta sa watchdog?

    Ang kabanatang ito ay nakapagpapaalaala sa pagsasayaw gamit ang tamburin at malamang na ang lahat ay maaaring gawing mas simple, ngunit, sayang, hindi ko ito magagawa sa ibang paraan.

    Inirerekomenda na gumamit ng mga bootloader mula sa package ng optiboot. Sa prinsipyo, ang mga bootloader na ito ay kasama sa pag-install ng Arduino platform mismo, ngunit mas mahusay na i-download at i-install ang pinakabagong bersyon ng optiboot mula dito. Ang pag-install ay binubuo ng dalawang hakbang (marahil ito ay maaaring gawin sa ibang paraan):

    1. Ang bootloaders\optiboot folder ay muling isinulat sa C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\optiboot
    2. Ang boards.txt file ay idinagdag sa file na C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt
    Naturally, maaaring iba ang iyong folder ng pag-install ng platform ng Arduino.

    Susunod, nire-reload ang development environment at sa Service/Board menu makikita mo ang mga bagong board na may markang . Sa kasamaang palad, kapag pumipili ng mga board na ito, nangyayari ang ilang kakaibang mga error sa compilation at lahat ng uri ng iba pang kakaiba ay lumalabas... kaya ginagawa namin itong mas simple. Buksan ang file C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt sa anumang text editor at baguhin ang mga sumusunod na linya:

    Para sa Arduino Nano:
    menu.cpu.nano.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

    Para sa Arduino Mini:
    menu.cpu.mini.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

    Ang susunod na problema ay ang optiboot bootloader para sa Arduino Mega board ay hindi umiiral sa kalikasan, dahil... Mas maraming memory ang Mega at gumagamit ng ibang protocol. Samakatuwid, gumagamit kami ng isang karaniwang ngunit binagong bootloader, na dina-download namin mula dito. Palitan ang pangalan ng file sa stk500boot_v2_mega2560_2.hex at isulat ito sa folder na C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\stk500v2.

    Huwag maalarma na ang binagong file ng firmware para sa Mega ay 2 beses na mas maliit kaysa sa karaniwang isa - tila ito ang kaso.

    Proseso ng firmware

    Matapos ang lahat ng mga pagbabago, maaari mong i-flash ang mga bootloader sa pamamagitan ng pagpili ng mga regular na board sa menu ng board (hindi!). Sa kasong ito, ang eksaktong mga hex na file na tinukoy namin sa board.txt file ay i-flash.
    Maaaring hindi magsimula ang proseso ng firmware at maaaring lumitaw ang isang error:
    Upang malutas ang problemang ito, buksan ang sketch ng programmer at sa seksyon ng pag-setup, pumili ng ibang bilis ng serial port.
    Habang nag-a-upload sa Arduino Mega, maaaring lumitaw ang isang error na hindi dapat pansinin:
    avrdude: error sa pag-verify, unang mismatch sa byte 0x3e000 0x0d != 0xff avrdude: error sa pag-verify; hindi pagkakatugma ng nilalaman

    Panghuling manipulasyon

    Ang mga optiboot loader ay may isa pang tampok - pinapataas nila ang bilis ng paglo-load ng mga sketch, kaya kapag gumagamit ng mga board na may optiboot kailangan mong gawin ang mga naaangkop na pagbabago sa boards.txt:

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

    Mas mahusay na tandaan ang nakaraang bilis ng port, dahil... kakailanganin itong gamitin sa mga board na may mga karaniwang bootloader. Kung ang mga naturang pagbabago ay hindi ginawa, ang proseso ng pag-upload ng mga sketch ay bubuo ng isang error tulad nito:
    avrdude: stk500_getsync(): hindi naka-sync: resp=0x00

    Mga link, panitikan

    package optimoot
    Bootloader ng firmware
    Paano mag-flash ng bootloader sa Arduino Pro Mini

    Mga Tag:

    • arduino
    • asong nagbabantay
    Magdagdag ng mga tag