3.25. Osnove CAN sabirnice

CAN (Controller Area Network) izvorno je dizajnirao Bosch 1980-ih kako bi sve elektroničke upravljačke jedinice u automobilu povezao na jednu kratku zajedničku sabirnicu. I dalje dominira u automobilskim ožičenjima, ali ga ista robusnost, ponašanje u stvarnom vremenu i višegospodarski dizajn (multi-master) čine zadanom terenskom sabirnicom u automatizaciji, robotici te poljoprivrednoj i industrijskoj opremi svake vrste.

CAN nema jedan „upravljač” i skup „periferija” na način na koji to imaju SPI i I2C. Svaki čvor na sabirnici je ravnopravan, i bilo koji čvor može odašiljati kad god je sabirnica slobodna. Ono što omogućuje skaliranje jest dizajn sabirnice koji se temelji na emitiranju s arbitražom.

3.25.1. Emitiranje s prioritetnom arbitražom

Svaka poruka na CAN sabirnici nosi identifikator – 11 bitova za klasičnu standardnu sličicu, 29 bitova za proširenu varijantu. Identifikator nije adresa; on označava o čemu je poruka (broj okretaja motora, položaj papučice kočnice, napon baterije itd.). Kad čvor želi poslati vrijednost, emitira je označenu odgovarajućim identifikatorom, a svaki čvor na sabirnici vidi to emitiranje. Svaki prijemnik hardverski filtrira sabirnicu kako bi izdvojio samo one ID-jeve koji ga zanimaju.

Ako dva čvora pokušaju odašiljati u isto vrijeme, električni dizajn sabirnice omogućuje da pobijedi poruka s nižim brojčanim identifikatorom bez gubitka ijednog bita.

Trik su dva električna stanja sabirnice: dominantno (logički 0) i recesivno (logički 1). CAN vodiči drže se visokima (recesivno) pomoću terminacijskih otpornika kad nijedan čvor ne komunicira; bilo koji čvor može povući vodiče prema dolje (dominantno) tako da kroz svoj primopredajnik propusti struju. Rezultat je ožičeni-AND: ako bilo koji pojedinačni čvor postavi sabirnicu na dominantno, linija se očitava kao dominantna, a kao recesivna se očitava samo kad su je svi čvorovi otpustili. Dominantno uvijek pobjeđuje. (Neke reference isti raspored nazivaju ožičeni-OR, tretirajući „dominantno” kao postavljeni signal umjesto kao AND recesivnih bitova – fizičko ponašanje je u oba slučaja identično.)

Jedna sabirnička linija koju terminacijski otpornik drži visokom prema Vcc. Tri čvora (A, B, C) vise s sabirnice. Izlazni stupanj svakog čvora je dioda u seriji sa sklopkom prema masi -- dioda pokazuje od sabirnice prema dolje do sklopke, pa zatvaranje sklopke povlači sabirnicu nisko kroz diodu, ali nijedan čvor ne može postaviti sabirnicu visoko.

Ožičeni-AND u konceptualnom obliku. Pravi CAN izvodi istu logiku preko diferencijalnog para (CAN_H / CAN_L) s primopredajnicima i terminacijskim otpornicima raspoređenima preko oba vodiča, ali pravilo na sabirnici je isto: bilo koji čvor može povući dominantno, a kao recesivna se očitava tek kad ju je svaki čvor otpustio.

Arbitraža izravno koristi tu asimetriju. Svaki čvor koji odašilje šalje svoj ID bit po bit, počevši od najznačajnijeg bita (MSB), i promatra sabirnicu dok odašilje. Čvor koji na vodič postavi recesivni bit, ali natrag očita dominantni, zna da drugi čvor s nižim ID-jem odašilje u istom trenutku i da je pobijedio na toj poziciji bita. Odmah prestaje upravljati sabirnicom i osluškuje. Čvor koji pobjeđuje u međuvremenu vidi da njegovi bitovi izlaze nepromijenjeni – iz njegove perspektive ništa neuobičajeno se nije dogodilo. ID s nižim brojem pobjeđuje jer njegovi dominantni bitovi nadjačavaju recesivne bitove koje bi ID-jevi s višim brojevima inače poslali na istim pozicijama.

Gubitnik zatim čeka da sabirnica postane slobodna i automatski ponavlja pokušaj. Nema kolizija, nema izgubljenih poruka – samo determinističko redoslijed po prioritetu.

Ovo je stil objavi/pretplati se (publish/subscribe) koji omogućuje CAN-u da radi na velikoj skali: svatko može govoriti, svatko može slušati, a ID-jevi čine raspodjelu implicitnom.

3.25.2. Fizička sabirnica

CAN upravljač u MCU-u ne upravlja sabirnicom izravno. Izlaže samo dva 3,3 V CMOS pina – TX (bit koji želi poslati) i RX (bit koji vidi na sabirnici) – a ti pinovi vode do zasebnog čipa zvanog CAN primopredajnik ili PHY. Primopredajnik se nalazi između upravljača i stvarnih CAN vodiča; on je taj koji zna kako komunicirati sa sabirnicom.

Sama sabirnica je 5 V diferencijalni par:

  • CAN_H – „visoki” vodič para.

  • CAN_L – „niski” vodič.

U recesivnom stanju oba vodiča leže na otprilike 2,5 V (sredina 5 V napajanja sabirnice). U dominantnom stanju primopredajnik povlači CAN_H na oko 3,5 V, a CAN_L na oko 1,5 V, stvarajući diferencijal od oko 2 V preko para. Prijemnici uzorkuju razliku između dvaju vodiča, što signal čini imunim na zajednički šum (common-mode) pokupljen preko dugih kabelskih dionica.

Dvosmjerni posao primopredajnika:

  • Na TX strani čita upravljačev 3,3 V jednostrani TX pin i ili razdvaja CAN_H i CAN_L za dominantno ili otpušta oba za recesivno.

  • Na RX strani čita diferencijalni par CAN_H / CAN_L i izvještava o jednostranoj razini od 3,3 V na svom RX pinu natrag prema upravljaču.

Dva terminacijska otpornika od 120 ohma, po jedan na svakom fizičkom kraju kabela, drže sabirnicu na recesivnoj sredini kad nijedan čvor ne upravlja njome i prigušuju refleksije koje bi inače pokvarile diferencijalni signal na dugim dionicama.

3.25.3. Podatkovna sličica

Standardna CAN podatkovna sličica izgleda ovako na vodiču:

Osam polja nacrtanih u nizu: SOF (1 bit), ID (11 bitova), RTR (1 bit), upravljanje (6 bitova), podaci (0 -- 8 bajtova), CRC (16 bitova), ACK (2 bita) i EOF (7 bitova).

Standardna CAN podatkovna sličica: polja SOF, ID, RTR, upravljanje, podaci, CRC, ACK i EOF.

Svako polje ima određeni posao:

  • SOF (start of frame). Jedan dominantni bit koji označava da započinje nova sličica i sinkronizira bitni takt svakog čvora.

  • ID (identifikator). 11-bitni identifikator nad kojim sabirnica provodi arbitražu. Niži broj = viši prioritet.

  • RTR (remote transmission request). Postavlja se kod zahtjeva za podacima umjesto isporuke podataka; prijemnici s odgovarajućim ID-jem odgovaraju tako da sami pošalju podatke.

  • Upravljanje. 6-bitno polje koje kodira duljinu podataka (DLC) i nekoliko pomoćnih bitova.

  • Podaci. 0 do 8 bajtova korisnog tereta (CAN Classic; CAN FD proširuje ovo na 64 bajta).

  • CRC. Ukupno 16 bitova: 15-bitni CRC nad prethodnim poljima plus 1-bitni CRC graničnik.

  • ACK. Ukupno 2 bita. U prvom bitu – ACK utoru – odašiljatelj otpušta liniju i bilo koji čvor koji je ispravno primio sličicu povlači je nisko; drugi bit je recesivni graničnik. Izostanak ACK-a govori odašiljatelju da nijedan čvor nije čuo sličicu i da bi trebao pokušati ponovno.

  • EOF (end of frame). Sedam recesivnih bitova koji zatvaraju sličicu.

Sve to hardverski generira i dekodira CAN upravljač; softver vidi samo ID, podatke i nekoliko zastavica.

3.25.4. Gdje se CAN smješta

Dizajnerski odabiri CAN-a određuju njegovu nišu:

  • Robustan. Diferencijalno signaliziranje na upletenom paru, ugrađeno otkrivanje pogrešaka, determinističko prioritetna arbitraža i automatski ponovni pokušaji čine da CAN preživljava električno bučna okruženja u kojima bi UART i SPI pokvarili podatke.

  • Višegospodarski (multi-master). Bilo koji čvor može govoriti u bilo kojem trenutku. Nije potreban središnji upravljač i nijedan čvor nije jedinstvena točka kvara.

  • Ograničene propusnosti. Klasični CAN doseže najviše oko 1 Mbit/s; CAN FD ovo proširuje. CAN je pravi odgovor kad je veza između ploča ili modula, često preko više metara kabela, s pouzdanošću kao prioritetom.

  • Protokoli viših slojeva. Gola CAN sabirnica ne kaže što ID znači niti kako podijeliti dugu poruku na fragmente. Protokoli aplikacijskog sloja – CANopen, J1939, ISO-TP/UDS, NMEA 2000 – nadograđuju ta pravila na vrhu. Zasebna stavka koju vrijedi znati jest DBC datoteka: tekstualni format specifičan za proizvođača koji bilježi koji ID-jevi nose koje signale na razini bitova na određenom vozilu ili sustavu. DBC datoteke su format metapodataka koji opisuje raspored poruka jedne sabirnice, a ne protokol sam po sebi.

Upravljački program u CAN sabirnica u kodu obrađuje CAN sličicu na razini vodiča; mapiranje ID-jeva na značenja posao je aplikacije.