Valvetaimer

Allikas: Vikipeedia
Jump to navigation Jump to search

Valvetaimer (ingl watchdog timer, watchdog, WDT) on elektrooniline taimer, mille abil tuvastatakse arvutites tekkivad tark- ja riistvaraprobleeme. Probleemi olemasolul antakse sellest teada arvutile, mis tegutseb vastavalt probleemi olemusele. Normaalse arvuti töö korral nullitakse valvetaimerit regulaarselt arvuti poolt. Kui arvutil tekib tark- või riistvara viga, siis jääb valvetaimer nullimata ning seeläbi loendab taimer üha edasi. Juhul kui valvetaimer loendab liiga kaua annab see välja signaali arvutile, et see saaks normaalse töö jätkamiseks vastavalt tegutseda. Kõige tavalisem arvuti poolne tegevus valvetaimeri signaali peale on süsteemi taaskäivitamise protseduur.

Valvetaimerit kasutatakse enamjaolt süsteemides, kus süsteemi töökindlus on väga suure prioriteediga. Valvetaimeri leiab nii arvutisse sisse ehitatult kui ka eraldi integraallülitusena. Sisse ehitatud kujul leiab seda laialdaselt mikrokontrolleritest. Valvetaimerist on kasu siis, kui süsteemi vigade tekkimisel pole võimalik inimesel füüsiliselt või piisavalt kiiresti sellele reageerida.

Valvetaimeri nullimist nimetatakse ka löömiseks (ingl kicking) või toitmiseks (ingl feeding). Mõlemad sõnad tulevad piltlikult öeldes füüsilise koera söötmisest või löömisest, mille käigus pole võimalik koeral inimest hammustada.[1]

Ajalugu[muuda | muuda lähteteksti]

Clementine kosmoseaparaat

Clementine, kosmoseaparaat mis lennutati kosmosesse 1994. aasta jaanuaris, suundus pärast kahekuulist Kuu kaardistamist Maa-lähedase asteroidi Geographos suunas. Clementini põhiline juhtprotsessor oli kahetuumaline Honeywell 1750, mis juhtis telemeetriat ning palju teisi funktsioone. Kuigi 1750 sai juhtida ka kosmoseaparaadi tõukureid, siis tegi see seda ainult hädaolukorras. Kogu tõukurite juhtimine toimus manuaalselt maapealsest juhtimiskeskusest.

Nagu oli juhtunud varemgi, tekkis ka 7. mail 1994 tarkvaras aritmeetikaviga. Varem oli tuvastatud umbes 3000 sarnast probleemi, kuid kõik saavutasid lahenduse ning kosmoseaparaat sai oma tööga jätkata. Pärast vea tekkimist 7. mail sai juhtimiskeskus kosmoseaparaadilt segast infot ning veidi hiljem kogu andmevahetus katkes. Kosmoseaparaadil olev kontroller üritas äratada 1750 protsessorit taas ellu, saates sellele 20 minutit käske tarkvaraliseks taaskäivitamiseks. Alles pärast riistvaralise taaskäivitamise käsku ning protsessori algkäivitamist sai tarkvara normaalset tööd jätkata.

Kosmoseaparaat oli küll taas töökorras, kui tarkvara vea tõttu käivitas Honeywell 1750 tõukurid, mis kulutasid ära kogu saadaoleva kütuse. Samal ajal kui protsessorit püüti taas töökorda saada, tiirles kosmoseaparaat ringiratast 80 pööret minutis, kuniks riistvaraline taaskäivitamine sulges kütuseventiili.

Honeywell 1750-l oli sisseehitatud valvetaimer olemas, aga seda ei kasutatud.[2]

Struktuur[muuda | muuda lähteteksti]

Üheastmeline ehk lihtne valvetaimer[muuda | muuda lähteteksti]

Üheastmelise valvetaimeri puhul on kasutusel üks taimer, mille aja lõppedes alustab süsteem kohe taaskäivitamise protseduuri. Seda tüüpi valvetaimerit kasutatakse enamikus mikrokontrollerites. Valvetaimer saab taktsageduse enamasti samast allikast nagu ka protsessor, millega see ühendatud on. On ka selliseid taimereid, mille taktsignaal on pärit erinevast allikast. Mõlemad taktsignaali allikatüübid on kasutusel nii sisemiste kui ka välimiste valvetaimerite puhul. Seda tüüpi struktuuri puuduseks on see, et aja täitumisel tehakse arvutile kohe taaskäivitus, kuigi tekkinud viga võib olla lahendatav mõnel muul viisil.[3] SimpleWatchdogTimer.gif

Mitmeastmeline valvetaimer[muuda | muuda lähteteksti]

Mitmeastmelise struktuuri puhul on pandud mitu taimerit jadamisi, kus ainult esimest taimerit söödetakse. Selle struktuuri eelis lihtsa struktuuriga võrreldes on võimalus süsteem parandada ilma taaskäivitamiseta. Esimese astme aja lõppedes saab arvuti vastava signaali ning käivitatakse ka järgmine aste. Esimeselt astmelt saadud signaaliga arvuti otsustab, kas on võimalik süsteemi parandada või peab tegema süsteemile taaskäivitamise. Samuti paneb arvuti vea kirja vastavasse logisse, mida kasutaja saab hiljem kasutada süsteemi hooldamiseks või parandamiseks. Arvuti poolt positiivse parandamiskatse puhul toimub kõigi mitmeastmelise valvetaimeri astmete taastamine ning arvuti saab alustada uuesti normaalset tööd. Juhul kui probleem on tõsisem ja arvuti ignoreerib esimeselt astmelt saadud signaali, siis loendab teine aste aja lõppemiseni. Kaheastmelise valvetaimeri puhul alustatakse pärast teist astet kogu süsteemi taaskäivitamisega. Kolmeastmelise puhul aga pärast teise astme aja lõppemise signaali alustatakse protseduuriga mida teostatakse ka juhul, kui arvuti enam ei reageeri. Selle protseduuriga kirjutatakse vastav viga logisse ning oodatakse valvetaimeri kolmanda astme täitumist, mille väljundsignaali ilmumisel alustatakse süsteemi taaskäivitamist.[3]

Watchdog3stage.gif

Intervall[muuda | muuda lähteteksti]

Valvetaimeri ajaline intervall on kas konstantne või muudetav. Konstantse puhul on väärtus juba eelnevalt tootja poolt seadistatud. Muudetava puhul toimub väärtuse seadistamine kas riistvaraliselt või tarkvaraliselt. Riistvaraliselt seadistatav ajaline intervall on peamiselt eraldiseisva integraallülitusega valvetaimeritel. Riistvaraline seadistamine tähendab, et taimeri intervall seadistatakse väliselt, kas täiendavate elektroonikakomponentidega või signaaliradadega. Tarkvaraliselt seadistatavat taimerit saab seadistada programmi algkäivitamisel kirjutades vajalikud väärtused õigesse kohta valvetaimeri konfiguratsiooni registrisse. Olenevalt arvutist on võimalik ka seadistada väärtused programmist eraldi.

Aknaga valvetaimer[muuda | muuda lähteteksti]

Tavapärast valvetaimeri ajaline intervall on 0 kuni n, kus n on seadistatud lõppväärtus. Kui taimerit sööta ajavahemikul 0 kuni n, siis taimeri väärtus on tagasi nullis ning alustatakse uut loendamist. Sellisel kujul valvetaimer ei pruugi alati tuvastada tark- või riistvaras juhtuvaid vigu. Kui tarkvaras tekkiva vea tõttu jääb tarkvara konstantselt valvetaimerit söötma, kuigi tarkvara enam normaalset tööd ei jätka, on tavalise 0 kuni n loendava valvetaimeri kasutamine kasutu. Sellist tüüpi vigade vältimiseks kasutatakse aknaga valvetaimerit. Aknaga valvetaimer võimaldab leida tark- või riistvara vigu ka siis, kui söötmine toimub ebanormaalselt kiiresti. Nimest tulenevalt on aknaga valvetaimeril ajaaken ehk kindel aeg, mille jooksul tuleb taimer nullida. Kui nullimine toimub aknast väljaspool saadab valvetaimer välja veasignaali. Nagu ka tavaline valvetaimer loendab aknaga valvetaimer 0 kuni n, kuid nende kahe väärtuse vahel asub ka väärtus m, mis märgib ära akna algusaja.

Aknaga valvetaimeri ajagraafik

[4]

Näited[muuda | muuda lähteteksti]

Väline valvetaimer[muuda | muuda lähteteksti]

STM6321 on integraallülitus, mis võimaldab lisada valvetaimeri eraldiseisvana elektroonikadisaini. Seda mikrokiipi on saadaval viiejalgses SOT-23 pakendis. See on mõeldud protsessoritele või mikrokontrolleritele millel pole integreeritud ehk sisse-ehitatud valvetaimerit. STM6321 on ST Microelectronics poolt toodetud valvetaimer. On palju teisi tootjaid ning mudeleid, mis on oma parameetrite poolest ligilähedased.

Lisaks valvetaimerile on 6321-l ka toitepinge jälgimise üksus, mis mõõdab ning tuvastab toitepinge muutuse üle etteantud lävendi. Pingelävendite väärtused on saadaval erinevaid ning see sõltub STM6321 täpsemast mudelist. Pingelävendi ületamine tekitab samasuguse väljundsignaali nagu ka valvetaimeri loenduri täitumine. STM6321 valvetaimeri ajaline intervall on tüüpiliselt 1.6 sekundit. Taimeri söötmine toimub kasutades 6321 sisendviiku numbriga 4. Sisendviik numbriga 4 on tähistatud tähisega WDI (Watchdog input). Seni kuni WDI sisendsignaal on kõrge (1) või madal (0) toimub taimeri loendamine. Taimeri nullimiseks ehk söötmiseks tuleb WDI sisendi olekut muuta ehk tuleb muuta olekut kõrgelt madalaks või madalast kõrgest. Kui valvetaimeri aeg saab täis või pingenivoo on üle etteantud lävendi, väljundviik numbriga 1 ehk RST(Reset) muudetakse madalaks. WDI on avatud neeluga aktiivselt madal väljund, seega sobib see hästi ühendamiseks otse protsessori või mikrokontrolleri taaskäivitamise sisendi külge.[5]

STM6321 plokkskeem

[5]

Integreeritud ehk sisemine valvetaimer[muuda | muuda lähteteksti]

STM8S on ST Microelectronicis poolt toodetud mikrokontroller, millel on intergeeritud harilik valvetaimer kui ka aknaga valvetaimer. Mõlemad valvetaimerid on tarkvaraliselt seadistatavad. Protsessor ning harilik valvetaimer saavad oma taktsignaali eri allikatest, selleks et valvetaimer püsiks aktiivne ka siis, kui protsessori taktsignaal lõpetab töötamise. Harilik valvetaimer saab oma taktsignaali integreeritud aeglase taktsignaali generaatorilt, milleks on 128 kHz. Edasi toimub taktsignaali kahega jagamine ning seejärel on tarkvaraliselt signaali veel omakorda võimalik jagada seitsme erineva väärtusega (4, 8, 16, 32, 64, 128, 256). Erinevad eeljagamise väärtused annavad võimaluse valvetaimeri ajalise intervalli muutmiseks. Samuti on võimalik tarkvaraliselt muuta loenduri loendamisaega mille väärtus saab olla 0–255. Muutes taktsignaali eeljagamis väärtust ja loenduri loendamisaja väärtust on võimalik ajaline intervall muuta 128 kHz taktsignaali korral vahemikus 62,5–1,02 s. STM8 valvetaimer kasutab allalugevat loendurit, seega valvetaimeri toitmisel ei nullita taimerit, vaid see hoopis algväärtustatakse. Taimeri jõudmisel nulli saadetakse taaskäivitusliinile signaal ning kogu mikrokontroller taaskäivitatakse. Kõik seadistusregistrid on kirjutuskaitstud selleks, et vigase tarkvara tõttu ei toimuks nendes registrites kindlasti mitte mingeid muudatusi. Samal põhjusel on ka valvetaimeri söötmise jaoks vajalik kirjutada ettemääratud väärtus kindlasse registrisse.[6]

STM8S hariliku valvetaimeri lihtskeem

[6]

 1 /*
 2 Näide valvetaimeri seadistamisest ja söötmisest STM8S mikrokontrollerile C keeles.
 3 */
 4 
 5 #include "stm8s.h"
 6 
 7 void wtd_init(void){
 8     // Valvetaimeri seadistamine
 9     IWDG_KR = 0xCC;      // Valvetaimeri käivitamine
10     IWDG_KR = 0x55;      // Kirjutuskaitse inaktiveerimine
11     IWDG_PR |= 6;        // Taktsageduse eeljagamine 256-ga
12     IWDG_RLR = 250;      // Ajaline intervall 1 sekund
13     IWDG_KR = 0xAA;      // Taasta kirjutuskaitse värskendades taimerit
14 }
15 
16 void main(void){
17 
18     wtd_init();
19     
20     while(1){
21     
22         /*
23         Programmi põhitsükkel asub siin
24         */
25         
26         IWDG_KR = 0xAA; // Perioodiline valvetaimeri söötmine
27     }
28 }

Aknaga valvetaimer STM8S mikrokontrolleril saab oma taktsageduse põhikellalt ehk kiirelt taktsignaali generaatorilt. Kellasignaali allikas võib olla sisemine kui ka väline generaator. Aknaga valvetaimeri üksuse taktsignaal on alati konstantselt jagatud 12288-ga, seega 16MHz taktsignaali puhul jõuab taimerini 1.302kHz. Antud taktsagedusega on võimalik saavutada 0.768 kuni 49.152 millisekundiline ajaline intervall. STM8 aknaga valvetaimeril on ainult 2 seadistus registrit. Üks neist annab ette taimeri loendamise väärtuse ning teine akna alguse väärtuse. Taimeri loendamise väärtus saab olla vahemikus 64 kuni 127 ning akna alguse väärtus saab olla 64 kuni väärtuseni seadistatud loendamise väärtuseni. Süsteemi taaskäivitamine toimub kui taimeri väärtus loendatud alla 64 või kui taimeri algseadistamine toimus väärtuse juures mis on suurem kui akna alguse väärtus.

STM8S aknaga valvetaimeri lihtskeem

[6]

/*
Näide aknaga valvetaimeri seadistamisest ja söötmisest STM8S mikrokontrollerile C keeles.
*/

#include "stm8s.h"
#include "delay.h"

void wwtd_init(void){
    // Valvetaimeri seadistamine
    WWDG_CR |= (1 << WDGA); // Valvetaimeri käivitamine
    WWDG_CR |= (1 << T6);   // T6 biti kõrgeks tõstmine, et vältida kohest taaskäivitamist
    WWDG_CR |= 0x7F;        // Ajaline intervall 49,152 ms
    WWDG_WR = 0x68;         // Akna alguse väärtus 18,432 ms
}

void main(void){

    wwtd_init();
    
    while(1){
    
        /*
        Programmi põhitsükkel asub siin mis võtab aega umbes 25-30 ms
        */
        
        delay_ms(30); // Põhitsükli viide
        
        WWDG_CR |= 0x7F; // Perioodiline valvetaimeri söötmine
    }
}

Viited[muuda | muuda lähteteksti]

  1. Michael Barr. "Introduction to Watchdog Timers". OCTOBER 01, 2001. Kasutatud 29.04.18.
  2. Jack Ganssle. "Great Watchdog Timers For Embedded Systems". Kasutatud 01.05.18.
  3. 3,0 3,1 PJim Lamberson. "Single and Multistage Watchdog Timers". PDF. Kasutatud 29.04.18.
  4. CHRIS FRANCIS. "PIC Microcontrollers for Safety Critical Applications". Kasutatud 01.05.18.
  5. 5,0 5,1 ST Microelectronics. "STM632x, STM682x". Andmeleht. Kasutatud 01.05.18.
  6. 6,0 6,1 6,2 ST Microelectronics. "RM0016 Reference Manual". Andmeleht. Kasutatud 01.05.18.