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