U prethodnom tekstu obradili smo fizički sloj CAN protokola: žice, naponske nivoe, terminaciju, brzinu prenosa i način na koji se signal fizički prenosi kroz instalaciju vozila. Međutim, fizički sloj sam po sebi ne zna šta predstavlja poruka, gde počinje frejm, kako se rešava sukob više modula na mreži i kako se proverava da li je poruka ispravno primljena.
Za ta pravila zadužen je logički sloj CAN protokola. On definiše kako se formiraju CAN frejmovi, kako funkcionišu identifikatori, na koji način se vrši arbitraža, kako se otkrivaju greške i kako CAN kontroler odlučuje da li je poruka validna.
Uloga CAN kontrolera
U CAN čvoru postoje dve važne komponente: CAN kontroler i CAN primopredajnik (transceiver). Primopredajnik je zadužen za fizički sloj: on pretvara logičke signale u diferencijalne napone na CAN H i CAN L linijama.
CAN kontroler radi logički deo posla. On priprema frejm za slanje, čita frejmove sa mreže, proverava greške, učestvuje u arbitraži i odlučuje da li će poruka biti prihvaćena ili odbačena.
- CAN transceiver – radi sa naponskim nivoima na CAN H i CAN L linijama
- CAN kontroler – radi sa bitovima, frejmovima, ID-jevima, CRC proverom i greškama
- Mikrokontroler / ECU – koristi primljene podatke u aplikativnoj logici
Dominantna i recesivna logika
Na fizičkom sloju smo videli da CAN ima dva stanja: dominantno i recesivno. Na logičkom sloju ta stanja se prevode u bitove:
- dominantno stanje = logička 0
- recesivno stanje = logička 1
Ovo je veoma važno za razumevanje arbitraže. Kod CAN-a logička nula ima prednost nad logičkom jedinicom. Ako jedan čvor šalje recesivni bit, a drugi dominantni bit, na mreži će se očitati dominantno stanje, odnosno logička nula.
CAN frejm
CAN ne šalje podatke nasumično, već u strogo definisanoj strukturi koja se zove CAN frejm. Frejm sadrži početak poruke, identifikator, kontrolna polja, podatke, proveru ispravnosti i potvrdu prijema.
Postoji više vrsta CAN frejmova, ali za početak su najvažniji:
- Data Frame – frejm koji prenosi podatke
- Remote Frame – zahtev da drugi čvor pošalje podatke
- Error Frame – frejm kojim čvor javlja grešku na mreži
- Overload Frame – frejm kojim čvor traži dodatno vreme
U automobilskoj dijagnostici i analizi komunikacije najčešće se susrećemo sa Data Frame porukama, jer one nose korisne informacije koje su modulima potrebne.
Standardni CAN Data Frame
Standardni CAN frejm koristi identifikator dužine 11 bita. Zbog toga se često naziva i 11-bitni CAN ili standard frame.
Osnovna struktura standardnog CAN data frame-a sastoji se od sledećih delova:
- SOF (Start of Frame) – početak frejma
- Arbitration Field – identifikator poruke i RTR bit
- Control Field – kontrolni bitovi i DLC
- Data Field – korisni podaci, od 0 do 8 bajtova
- ACK Field – potvrda da je poruka primljena
- CRC Field – provera ispravnosti prenosa (15 bitova)
- EOF (End of Frame) – kraj frejma (7 bitova)
SOF – Start of Frame
Svaki CAN frejm počinje jednim dominantnim bitom koji se naziva SOF. On označava početak poruke i služi da se ostali čvorovi na mreži sinhronizuju sa predajnikom.
Identifikator poruke
Identifikator ne predstavlja adresu primaoca u klasičnom smislu. Kod CAN-a poruka nije poslata određenom modulu, već se emituje na celu mrežu. Svaki čvor sam odlučuje da li ga ta poruka interesuje.
Identifikator određuje dve važne stvari:
- značenje poruke – šta ta poruka predstavlja u sistemu
- prioritet poruke – ko pobeđuje u arbitraži
Extended CAN Data Frame
Pored standardnog 11-bitnog identifikatora, CAN podržava i prošireni format sa 29-bitnim identifikatorom. Ovaj format se naziva Extended CAN Frame.
Prošireni CAN frejm omogućava mnogo veći broj različitih identifikatora, što je korisno u sistemima sa većim brojem poruka i složenijim komunikacionim pravilima.
Extended frame ima sličnu osnovnu strukturu kao standardni CAN frejm, ali je arbitražno polje prošireno. Umesto 11-bitnog ID-a koristi se kombinacija osnovnog i proširenog dela identifikatora.
Kako funkcioniše CAN arbitraža?
Jedna od najvećih prednosti CAN protokola je činjenica da više čvorova može pokušati da pošalje poruku u isto vreme bez sudara podataka i bez potrebe za centralnim upravljačem mreže.
Ovaj mehanizam naziva se nedestruktivna arbitraža (Non-Destructive Arbitration) i predstavlja jednu od ključnih karakteristika CAN protokola.
Arbitraža se odvija tokom slanja identifikatora poruke, odnosno u okviru Arbitration Field dela frejma.
Primer arbitraže
Pretpostavimo da dva ECU modula istovremeno pokušavaju da pošalju poruku:
- ECU A: ID = 0x100
- ECU B: ID = 0x120
Oba modula počinju slanje u istom trenutku i istovremeno emituju bitove svog identifikatora. Dokle god šalju iste bitove, arbitraža traje.
Kada dođu do prve pozicije na kojoj se razlikuju:
- jedan ECU šalje dominantnu nulu
- drugi ECU šalje recesivnu jedinicu
Na magistrali će se očitati dominantna nula. ECU koji je pokušao da pošalje jedinicu odmah zaključuje da je izgubio arbitražu i prestaje sa slanjem.
ECU sa dominantnim bitom nastavlja komunikaciju bez prekida.
Zašto manji ID ima veći prioritet?
Pošto dominantna nula pobeđuje recesivnu jedinicu, identifikatori sa manjom numeričkom vrednošću imaju više dominantnih nula na početku i samim tim veći prioritet.
Na primer:
- ID 0x080 (0b010000000) ima veći prioritet od
- ID 0x180 (0b110000000)
Zbog toga kritične poruke poput ABS-a, motora ili ESP sistema često koriste identifikatore višeg prioriteta.
DLC – koliko podataka nosi poruka?
Nakon arbitražnog polja dolazi Control Field. Jedan od najvažnijih delova ovog polja je DLC (Data Length Code).
DLC određuje koliko bajtova podataka sledi u Data Field delu frejma.
| DLC | Broj bajtova |
|---|---|
| 0 | 0 bajtova |
| 1 | 1 bajt |
| 2 | 2 bajta |
| 3 | 3 bajta |
| 4 | 4 bajta |
| 5 | 5 bajtova |
| 6 | 6 bajtova |
| 7 | 7 bajtova |
| 8 | 8 bajtova |
Kod klasičnog CAN-a maksimalna količina korisnih podataka u jednom frejmu iznosi 8 bajtova.
Primer:
ID = 0x123
DLC = 8
DATA = 0x11 22 33 44 55 66 77 88
Ovo znači da poruka sa identifikatorom 0x123 sadrži osam bajtova podataka.
CRC – kako CAN otkriva greške?
Jedan od razloga zbog kojih je CAN toliko pouzdan jeste veoma razvijen sistem za otkrivanje grešaka. Najvažniji mehanizam za proveru integriteta poruke je CRC (Cyclic Redundancy Check).
Pre slanja poruke CAN kontroler izračunava CRC vrednost na osnovu sadržaja frejma. Dobijeni rezultat se upisuje u CRC polje frejma.
Kada drugi čvor primi poruku, on ponavlja isti CRC proračun.
- ako se rezultat poklapa – poruka je ispravna
- ako se rezultat razlikuje – prijavljuje se greška
Šta se dešava kada CRC nije ispravan?
Ako bilo koji čvor otkrije CRC grešku:
- šalje Error Frame
- poruka se odbacuje
- predajnik pokušava ponovno slanje
Na ovaj način CAN postiže veoma visok nivo otpornosti na smetnje i oštećenje podataka.
ACK polje – potvrda prijema
Nakon CRC polja dolazi ACK (Acknowledge) polje. Njegov zadatak je da potvrdi da je poruka uspešno stigla do najmanje jednog čvora na mreži.
Tokom slanja ACK bita:
- predajnik šalje recesivni bit
- primaoci koji su uspešno primili poruku upisuju dominantni bit
Ako predajnik vidi dominantni bit, zna da je bar jedan uređaj uspešno primio poruku.
Ako ACK izostane:
- predajnik smatra da poruka nije primljena
- povećava brojače grešaka
- ponavlja slanje poruke
Bit Stuffing – kako CAN održava sinhronizaciju
CAN komunikacija je asinhrona. Na mreži ne postoji posebna takt linija koja bi svim čvorovima govorila kada počinje sledeći bit. Zbog toga svaki CAN kontroler mora neprekidno da održava sinhronizaciju sa ostatkom mreže.
Problem nastaje kada se pojavi veliki broj uzastopnih istih bitova. U tom slučaju prijemnik dugo ne vidi promenu stanja na magistrali i vremenom može doći do odstupanja u vremenskoj sinhronizaciji.
Da bi se to sprečilo, CAN koristi mehanizam koji se naziva Bit Stuffing.
Na primer, nakon pet uzastopnih bitova iste vrednosti:
- 11111 postaje 111110
- 00000 postaje 000001
Prijemnik zna za ovo pravilo i automatski uklanja ubačeni bit tokom dekodovanja. Na taj način se održava sinhronizacija bez potrebe za dodatnim signalom takta.
Zašto je Bit Stuffing važan?
Bit Stuffing nije mehanizam za ispravljanje grešaka već za održavanje sinhronizacije između svih čvorova. Međutim, on indirektno pomaže i u detekciji grešaka.
Ako prijemnik primi više od pet uzastopnih bitova iste vrednosti bez očekivanog ubačenog bita, zaključuje da je došlo do greške i generiše Error Frame.
Error Frame – prijava greške na mreži
Jedna od posebnosti CAN protokola je to što svaki čvor aktivno učestvuje u proveri ispravnosti komunikacije. Ne postoji centralni uređaj koji nadgleda mrežu. Svaki ECU samostalno proverava poruke koje prima.
Kada CAN kontroler otkrije grešku, on trenutno prekida komunikaciju slanjem posebnog frejma koji se naziva Error Frame.
Error Frame obaveštava sve ostale čvorove da trenutna poruka nije validna i da mora biti ponovo poslata.
Šta može izazvati Error Frame?
- CRC greška
- Bit Stuffing greška
- Format greška frejma
- ACK greška
- Bit Monitoring greška
Kada se pojavi Error Frame, trenutni frejm se odbacuje i predajnik pokušava ponovno slanje poruke.
Overload Frame – zahtev za dodatnim vremenom
Pored Error Frame-a postoji i Overload Frame. Njegova uloga je da privremeno odloži početak sledeće poruke kada CAN kontroler nije spreman da nastavi prijem.
Ovaj frejm se danas relativno retko sreće u modernim sistemima jer savremeni CAN kontroleri imaju dovoljno procesorske snage i memorije.
Ipak, standard ga i dalje definiše kao deo CAN protokola.
Praktično gledano, većina dijagnostičara i autoelektričara nikada neće naići na situaciju u kojoj će Overload Frame biti uzrok problema na mreži.
Brojači grešaka CAN kontrolera
CAN ne proverava samo poruke. On stalno prati i ponašanje svakog čvora na mreži.
Svaki CAN kontroler vodi dva interna brojača:
- TEC (Transmit Error Counter)
- REC (Receive Error Counter)
Kada kontroler detektuje greške tokom slanja ili prijema, odgovarajući brojač se povećava. Kada komunikacija funkcioniše normalno, brojači se postepeno smanjuju.
Na osnovu ovih brojača CAN kontroler određuje svoje stanje na mreži.
Error Active stanje
U normalnom radu CAN kontroler se nalazi u stanju koje se naziva Error Active.
To znači da učestvuje u komunikaciji punim kapacitetom i da može da šalje aktivne Error Frame-ove kada otkrije problem.
Većina CAN modula tokom svog životnog veka provede praktično sve vreme u ovom režimu rada.
Error Passive stanje
Ako broj grešaka postane prevelik, CAN kontroler prelazi u stanje Error Passive.
U ovom režimu modul i dalje može da komunicira, ali više nema pun autoritet na mreži. Njegova mogućnost prijavljivanja grešaka postaje ograničena kako ne bi ugrozio rad ostatka sistema.
Drugim rečima, CAN mreža pokušava da izoluje modul koji često pravi probleme, ali mu još uvek dozvoljava da učestvuje u komunikaciji.
Bus Off stanje
Ako broj grešaka nastavi da raste, CAN kontroler na kraju prelazi u stanje koje se naziva Bus Off.
Ovo je zaštitni mehanizam CAN protokola.
Kada CAN kontroler uđe u Bus Off stanje:
- prekida slanje poruka
- isključuje se sa CAN magistrale
- prestaje da utiče na komunikaciju ostalih modula
Na ovaj način CAN sprečava da jedan neispravan uređaj potpuno blokira komunikaciju svih ostalih ECU jedinica.
Šta ovo znači za dijagnostičara?
Većina autoelektričara neće analizirati CRC polja ili brojati bitove na osciloskopu. Međutim, posledice rada logičkog sloja CAN protokola svakodnevno se vide na dijagnostici.
Poruke poput:
- Bus Off
- Communication Error
- CAN Timeout
- Lost Communication With Module
vrlo često su direktna posledica problema koje CAN kontroleri detektuju kroz mehanizme opisane u ovom članku.
Bus Off
Najčešće ukazuje na ozbiljan problem sa komunikacijom:
- prekid CAN linije
- kratak spoj CAN H ili CAN L
- neispravan CAN transceiver
- neispravan ECU
Communication Error
Obično znači da je CAN kontroler registrovao veliki broj CRC, ACK ili Bit Stuffing grešaka, ali još nije prešao u Bus Off stanje.
CAN Timeout
CAN Timeout se pojavljuje kada ECU očekuje određenu poruku u definisanom vremenskom intervalu, ali je ne dobije.
To ne mora značiti kvar magistrale. Uzrok može biti i ECU koji je prestao da emituje očekivanu poruku.
Lost Communication With Module
Ova greška najčešće znači da drugi moduli više ne vide poruke određenog ECU-a na mreži. Uzrok može biti:
- Bus Off stanje tog ECU-a
- prekid napajanja modula
- prekid CAN instalacije
- potpuni kvar ECU jedinice
Zaključak
Logički sloj CAN protokola definiše kako se od pojedinačnih dominantnih i recesivnih bitova formiraju poruke, kako se rešavaju sukobi između više čvorova i kako mreža automatski otkriva i izoluje greške.
Zahvaljujući arbitraži, CRC proveri, ACK mehanizmu, Bit Stuffing-u i sistemu Error Active / Error Passive / Bus Off, CAN je postao jedan od najpouzdanijih komunikacionih sistema u automobilskoj industriji.
U sledećem članku prelazimo na aplikativni sloj CAN protokola, gde ćemo objasniti kako nastaju protokoli kao što su OBD, UDS i J1939, kao i kako ECU moduli tumače CAN poruke koje putuju mrežom.