CAN-võrk

**Controller Area Network** (**CAN-siin**) on sõiduki siini standard, mis võimaldab sõidukis olevatel mikrokontrolleritel ja seadmetel omavahel juhtarvuti abita andmeid vahetada.

CAN-siin on sõnumipõhine protokoll, mis loodi konkreetselt autotööstuses kasutamiseks, kuid leiab nüüd kasutust ka teistes valdkondades, nagu lennundus, merendus, tööstusautomaatika ja meditsiiniseadmed.

CAN-siini arendamine algas 1983. aastal ettevõttes Robert Bosch GmbH. Protokolli ametlik esitlus toimus 1986. aasta Autoinseneride ühingu (SAE) kongressil Detroitis. Esimesed Inteli ja Philipsi toodetud CAN-i kontrollerikiibid toodi turule 1987. aastal. Bosch avalikustas CAN 2.0 spetsifikatsiooni aastal 1991. Aastal 2012 tutvustas Bosch täiustatud CAN-i andmekihi protokolli nimega CAN FD, mis on ISO-11898-1 edasiarenduseks.

CAN-siin on üks viiest protokollist, mida kasutatakse sõidukite pardadiagnostika standardi OBD-II alusel. OBD-II standard on olnud kohustuslik kõigile USA-s müüdavatele sõiduautodele ja väikeveokitele aastast 1996 ja EOBD standard on olnud kohustuslik kõigile Euroopa Liidus müüdud bensiinimootoriga sõidukitele aastast 2001 ja diiselmootoriga sõidukitele aastast 2004.

## Rakendused
Kaasaegses autos võib olla kuni 70 elektroonilist juhtmoodulit mitmesuguste süsteemide jaoks.
Üldjuhul on suurimaks protsessoriks mootori juhtmoodul, lisaks sellele on juhtmoodulid käigukastil, turvapatjadel, ABS-pidurisüsteemil, püsikiirushoidikul, roolivõimendil, helisüsteemidel, akendel, ustel, peeglitel ja teistel seadmetel. Mõned neist moodustavad omavahel sõltumatuid alamsüsteeme, kuid teiste omavaheline andmevahetus on hädavajalik. Lisaks peavad alamsüsteemid juhtima täitureid või hankima teavet anduritest. Selle vajaduse täitmiseks võetigi kasutusele CAN-standard.

Tänapäeval kasutatakse CAN-siini lisaks ka automaatikasüsteemides väljasiinina, suuresti tänu mõnede CAN-kontrollerite ja protsessorite soodsale hinnale.
Bosch omab CAN-tehnoloogia patente ja ühilduvate mikroprotsessorite tootjad maksavad Boschile litsentsitasusid, mis kanduvad kiibi hinna komponendina edasi kliendile.

## Tehnoloogia
CAN on mitme halduriga leviedastusel põhinev jadasiini standard elektrooniliste juhtmoodulite ühendamiseks.

Iga sõlm saab sõnumeid saata ja vastu võtta, aga mitte samaaegselt. Sõnum sisaldab identifikaatorit, mis määrab sõnumi prioriteedi, ja kuni kaheksat andmebaiti. Täiustatud CAN-i (CAN FD) andmejaotise osa on kuni 64 baiti kaadri kohta. Signaal kodeeritakse ja jõuab kõigi sõlmedeni.

CAN-võrguga ühendatud seadmeteks on üldjuhul andurid, täiturid ja teised juhtseadmed. Samas pole need ühendatud otse siini külge, vaid juhtprotsessori ja CAN-kontrolleri kaudu.

Kui siin on ooteolekus, võib iga sõlm hakata andmeid edastama. Kui kaks või mitu sõlme hakkavad sõnumeid saatma samaaegselt, kirjutab kõrgema taseme identifikaatoriga sõnum üle teise sõlme madalama taseme identifikaatorid, nii et lõpuks jääb võrku vaid kõrgema taseme sõnum ja jõuab kõigi sõlmedeni. Sellist mehhanismi nimetatakse prioriteedipõhiseks siini arbitreerimiseks. Numbriliselt väiksema ID-väärtusega sõnumid edastatakse esmajärjekorras.

### Sõlme komponendid
***[[CPU|Juhtprotsessor]]**
**Juhtprotsessor tõlgendab saabunud sõnumeid ja otsustab, milliseid sõnumeid välja saata.
**Andurid, täiturid ja juhtseadmed saab ühendada juhtprotsessoriga.
***CAN-kontroller** (sünkroonse kellataktiga riistvara)
***Vastuvõtt*: CAN-kontroller salvestab järjest siinilt vastuvõetavad bitid, kuni sõnum on täielikult kätte saadud. Seejärel edastatakse see juhtprotsessorile (üldjuhul pärast seda, kui CAN-kontroller tekitab katkestuse).
***Saatmine*: juhtprotsessor annab väljasaadetavad sõnumid CAN-kontrollerile, mis edastab bitid jadamisi siinile.
***[[Transiiver]]**
***Vastuvõtt*: seade kohandab siinilt tuleva signaali tasemed CAN-kontrollerile sobivaks ja sisaldab kontrollerit kaitsvaid ahelaid.
***Saatmine*: teisendab CAN-kontrollerilt saadud signaali ümber siinile edastamiseks.

Alla 40&nbsp;m liinipikkuste juures on võimalik saavutada bitikiirusi kuni 1&nbsp;Mbit/s. Väiksema bitikiiruse juures on võimalik kasutada suurema kogupikkusega võrke (nt 500&nbsp;m 125 kbit/s juures).

CAN-i lülikihi protokoll on standarditud ISO 11898-1 (2003) alusel, mis kirjeldab peamiselt lülikihi ja mõningaid füüsilise kihi omadusi. Kõik ülejäänud protokollikihid on võrgu disainija vaba valik.

## Andmeedastus
CAN-süsteem kasutab automaatset arbitreerimiseta andmeedastust. Kõrgeima prioriteediga sõnum jõuab alati kõigi sõlmedeni ja madalama prioriteediga sõnumit edastav sõlm jääb oma järge ootama.

See saavutatakse binaarmudeli alusel andmeedastuse teel, kus domineeriv bitt on loogiline 0 ja retsessiivne loogiline 1. 
Arbitreerimisel jälgib iga signaali edastav sõlm siini seisundit ja võrdleb vastuvõetud bitti edastatud bitiga. Kui retsessiivse biti edastamisel võetakse vastu domineeriv bitt, lõpetab sõlm edastamise.

Arbitreerimine toimub identifikaatori välja edastamise jooksul. Iga andmeedastust alustav sõlm saadab välja identifikaatori, kus kõrgemast bitist lugedes jääb domineerivaks binaarne 0. Kohe, kui sõlme ID on suurem number (madalama prioriteediga) kui vastuvõetud teate ID, lõpetab sõlm oma identifikaatori edastamise. Lõpuks jääb järele vaid üks sõlm ja kõrgeima prioriteediga sõnum jõuab võrgus takistuseta kõigi sõlmedeni.

Näide: tegemist on 11-bitise identifikaatoriga CAN-võrguga, mille sõlmede ID-d on 15 (binaarsüsteemis 00000001111) ja 16 (binaarsüsteemis 00000010000). Kui need kaks sõlme hakkavad samaaegselt andmeid edastama, saadetakse esmalt esimesed kuus nulli identifikaatorist, mille alusel ei saa otsust langetada. Seitsmenda biti edastamisel edastab sõlm ID-ga 16 väärtuse 1 (retsessiivne) ja sõlm ID-ga 15 väärtuse 0 (domineeriv). Nüüd järeldab sõlm ID-ga 16, et on arbitreerimise kaotanud ja võimaldab teisel sõlmel andmeedastust jätkata. Nii on tagatud, et madalama bitiväärtusega sõlm võidab õiguse võrku kasutada.

## Kihid
CAN-protokolli on sarnaselt paljude võrguprotokollidega võimalik jagada kihtideks.

; Rakenduskiht
; Objektikiht
* Sõnumite filtreerimine
* Sõnumite ja seisundi töötlemine
; Edastuskiht

Edastuskihil on CAN-standardi juures läbiv roll. See võtab vastu teated füüsiliselt kihilt ja edastab need objektikihile, olles vastutav bitiajastuse ja -sünkroonimise, sõnumite kadreerimise, arbitreerimise, sõnumite jaatuse, vigade tuvastamise ja nende leviku piiramise eest.
; Füüsiline kiht
Algses standardis (ISO 11898-1:2015) kirjeldati füüsilise kihi osas vaid abstraktseid nõudeid. Elektrilised näitajad (pinge, vool, juhtide arv) pandi paika standardiga ISO 11898-2:2003, mis on praeguseks laialt aktsepteeritud. Samas on füüsilise kihi mehaanilised aspektid (ühenduste tüüp ja arv, värvid, märgised, väljaviigud) siiani ametlikult määratlemata. Selle tõttu on autode elektroonilistel juhtmoodulitel üldjuhul margipõhine ühenduspistik, millega on ühendatud juhtmed, millest kaks on ühendatud CAN-siiniga.

## Kaadrid
CAN-võrgu saab konfigureerida standardsele ja laiendatud kaadrivormingule. Ainsaks erinevuseks on see, et standardse kaadri identifikaatori pikkus on 11 bitti ja laiendatud kaadri identifikaatori pikkus 29 bitti, millest 11 bitti moodustab standardosa ja 18 bitti laiendatud osa. Kaadrivorminguid eristatakse IDE-biti alusel, mis on 11-bitise kaadri korral domineeriv ja 29-bitise kaadri korral retsessiivne. Laiendatud kaadrivormingut toetavad CAN-kontrollerid saavad saata ja vastu võtta ka standardvormingus sõnumeid. Kõik kaadrid algavad kaadri algust märkiva bitiga.

; Neli kaadritüüpi
* Andmekaader: kaader, mis sisaldab sõlmest edastatavaid andmeid.
* Kaugkaader: kaader, mis esitab päringu kindla identifikaatori edastamiseks.
* Veakaader: mõne sõlme edastatav kaader, mis annab teada vea ilmnemisest.
* Ülekoormuse kaader: kaader, mis tekitab viivituse andme- ja/või kaugkaadrite vahele.

## Kõrgema taseme rakendused
Kuna CAN-standard ei sisalda rakenduskihi protokollide funktsioone nagu andmevoo juhtimine, seadmete adresseerimine, ühest sõnumist suuremate andmeplokkide edastamine ja rakenduspõhiste andmete tugi, on loodud hulk kõrgema taseme rakendusprotokolle. Mitu neist on standarditud kindlas valdkonnas kasutamiseks, kuid iga tootja saab neid oma soovi kohaselt laiendada. Igal sõiduautode tootjal on oma standard.
Mõned rakendused:
* ARINC 825 (lennundus)
* CANaerospace (lennundus)
* CANopen (tööstusautomaatika)
* DeviceNet (tööstusautomaatika)
* EnergyBus (elektrisõidukid)
* GMLAN (General Motors)
* ISO 11783 ehk ISOBUS (põllumajandus)
* SAE J1939 (raskeveokid)
* NMEA 2000 (merendus)
* RV-C (vabaajasõidukid)
* SafetyBUS p (tööstusautomaatika)
* VSCP (ehitiste automatiseerimine)

## Turvalisus
CAN on madala taseme protokoll, millel puuduvad sisseehitatud turvalisusfunktsioonid. Rakendustes tuleb kasutada protokollist eraldiseisvaid turvalisusmehhanisme, näiteks seadmete autentimine. Selle nõude eiramisel võidakse toime panna ründeid, kuna ründaja saab siinile sisestada oma sõnumeid.

## Viited

## Välislingid
* ISO 11898
* Bosch CAN FD Specification Version 1.0
* Controller Area Network (CAN) Schedulability Analysis: Refuted, Revisited and Revised
* Controller Area Network (CAN) Schedulability Analysis with FIFO Queues
* [Free Tutorial: Controller Area Network (CAN) Introduction and Fundamentals](http://microcontroller.com/CAN_(Controller_Area_Network):_Introduction_and_Fundamentals.htm)