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.)

A single bus line held high by a termination resistor to Vcc. Three nodes (A, B, C) hang off the bus. Each node's output stage is a diode in series with a switch to ground -- the diode points from the bus down to the switch, so closing the switch pulls the bus low through the diode but no node can drive the bus high.

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:

Eight fields drawn in sequence: SOF (1 bit), ID (11 bits), RTR (1 bit), control (6 bits), data (0 -- 8 bytes), CRC (16 bits), ACK (2 bits), and EOF (7 bits).

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.