"Historie" CANu
Dostupnost levných a výkonných mikroelektronických součástek umožnila automobilovému průmyslu zavést autonomní electronické řídící jednotky (ECU) pro různé funkční oblasti, jako je zapalování, ovládání převodovky nebo ABS.
Brzy bylo jasné, že pro další rozvoj funkčnosti, a potažmo značné zlepšení jízdního chování, bude zapotřebí synchronizace různých procesů, dosud distribuovaných mezi různé řídící jednotky. Bylo třeba zajistit řízenou výměnu dat mezi jednotkami.
Zavádění digitální komunikace do automobilového odvětví bylo rovněž motivováno rostoucím počtem komponent šasi a "elektroniky pro pohodlí posádky", které bylo třeba propojit. Patří sem např. klimatizace, nastavení polohy sedadel a zrcátek, elektrické ovládání oken, alarmové jednotky proti odcizení, centrální zamykání, osvětlení atd.
Cílem systémů digitální komunikace v automobilu je především omezit množství / délku kabeláže a odstranit tradiční "bolavá místa" jako je průchod kabelového zvazku z vnitřku karosérie do předních dveří.
V kontextu zvlášť vysokých požadavků na bezpečnost datového přenosu, v prostředí plném elektromagnetického rušení, bylo třeba vyvinout vhodnou koncepci digitální komunikace.
Toto byl výchozí bod ve vývoji sběrnice Controller Area Network (CAN), který započal ve firmě Bosch v roce 1983.
Od té doby se CAN rozšířil do četných dalších oblastí. Vedle běžných automobilů je používán také v následujících odvětvích:
Topologie sběrnice, počet uzlů ("účastníků")
CANovské sběrnice jsou typicky uspořádány jako symetrické vedení, opatřené dvěma zakončovacími odpory o hodnotě 120 Ohmů (na každém konci jeden, viz obr.). Jsou povoleny odbočky o omezené délce a možná je také hvězdicová topologie, např. právě v automobilním použití. Počet účastníků není omezen protokolem, ale kvalitou provedení jednotlivých účastnických uzlů.
Pozn.překl.: fyzická vrstva CANu je oproti jiným symetrickým vedením zvláštní v tom, že budič "tahá silou jenom jedním směrem" a nemá třetí stav. Resp. má jenom jeden stav aktivní a jeden stav s vysokou impedancí. Aktivní stav, zde zvaný "dominantní", znamená, že budič tahá CAN-HI k +napájení a CAN-LO k -napájení. Naopak ve stavu "recesivním" má budič vysokou impedanci, a pouze díky terminátorům (které fungují zároveň jako pull-down odpor) konverguje tento stav k 0 V diferenciálně mezi vodiči v páru. Takto vypadá konkrétně fyzická vrstva dle ISO 11898-2. (Existuje ještě fyzická vrstva dle ISO 11898-3, která se v detailech liší.) Dále platí, že dominantní stav odpovídá log.0, recesivní stav odpovídá log.1. Čili funguje to trochu jako I2C (otevřený kolektor proti pull-up rezistoru). Toto "jednočinné" zapojení budičů umožňuje finty s implicitním logickým OR mezi uzly navzájem v rámci protokolu (využívají se pro všelijaký handshaking).
Pokud je třeba CANovou sběrnici prodloužit, přijdou k užitku CANové repeatery. Používají se, pokud je třeba provázat dva nebo více segmentů sběrnice CAN, vytvořit hvězdicovou či stromovou topologii, nebo připojit dlouhé odbočné vedení. Je také možno segmenty sběrnice navzájem galvanicky oddělit izolačním repeaterem.
Pozn.překl.: prostý CANový repeater musí věrně přenášet ACK a další bitwise "handshaking s otevřeným kolektorem". Podrobnosti budou vysvětleny níže. Jedině v tom případě může zůstat zachována "celistvost CANové signalizace na fyzické vrstvě" napříč sítí pospojovanou pomocí repeaterů. A z toho také plyne, že není v moci prostého repeateru, prodloužit sběrnici nad fyzikální meze dané délkou bitu a rychlostí šíření. Existují také CAN bridge, které provádějí "store and forward" (případně relay nad jinou technologií) a tudíž nejsou transparentní pro základní CANový handshaking, nefunguje okamžitá signalizace chyb, v přenosu přibyde dodatečná latence. Mají své použití, ale je třeba s jejich vlastnostmi počítat při integraci hardwaru a softwaru.
Telegramy sběrnice CAN
Komunikace na sběrnici CAN probíhá pomocí "telegramů", které nesou řídící a datové bity. "Standardní" konfiguraci takového telegramu se říká "rámec".
Výměna zpráv dle principu producent-konzument
V protikladu k "uzlově orientované" komunikaci, kde si zprávy navzájem vyměňují dva koncové účastnické uzly, komunikace na CANu je založena na principu "producent-konzument". Zprávu odeslanou účastníkem-producentem dostanou všichni ostatní účastníci (konzumenti). Z toho důvodu nejsou zprávy opatřeny adresou příjemce, ale unikátním "identifikátorem zprávy". Odesílání zpráv všem účastníkům na sběrnici se také nazývá "broadcasting".
Obrázek: 11-bitový identifikátor (standardní formát, CAN 2.0A)
Identifikátor zprávy druhově označuje obsah zprávy, nikoli cílový uzel. V měřícím systému například mohou být přiřazeny různé identifikátory jednotlivým proměnným jako je teplota, napětí nebo tlak. Několik proměnných nicméně může také cestovat zprávou pohromadě pod společným identifikátorem, pokud se vejdou = pokud jimi alokované počty bajtů v součtu nepřekročí délku oblasti zprávy pro užitečná data (8B).
Naslouchající uzly na sběrnici se podle identifikátoru přijaté zprávy rozhodují, zda je zpráva pro ně relevantní či nikoli (tzn. přijaté zprávy na vstupu filtrují).
Standardní formát CANového identifikátoru je 11-bitový, v tom případě lze rozlišit 2048 různých zpráv. Toto číslo dostačuje pro většinu úloh. K dispozici je ovšem také 29-bitový formát identifikátoru (Advanced Format, CAN 2.0 B) který umožňuje až 512 milionů různých zpráv - což se hodí v některých konkrétních nasazeních, např. na nákladních vozidlech dle SAE J1939.
Formát rámců
Začátek zprávy (viz obr.) je ohlášen úvodním dominantním bitem. Následuje 11-bitový identifikátor a následuje RTR bit, jenž rozlišuje mezi "užitečnou" zprávou a "vzdáleným požadavkem na odeslání".
"Vzdáleným požadavkem" (RTR) si kterýkoli uzel na sběrnici může vyžádat odeslání konkrétní zprávy (proměnné) příslušným jiným uzlem.
"Řídící pole" (Control Field = IDE + r0 + DLC) specifikuje formát identifikátoru (standardní/rozšířený) a počet následujících užitečných datových bajtů.
"Datové pole" (užitečná data) v CANové zprávě může mít délku 0 až 8 bajtů.
Následuje 15-bitový CRC segment, který umožňuje přijímači ověřit bezchybný přenos přijaté zprávy.
ACKnowledgement bit slouží k potvrzení přenosu: potvrzení směrem od příjemců k odesilateli. Alespoň jeden příjemce musí v tomto bitu budit dominantní napěťovou hladinu. Přesněji řečeno, dominantní ACK bit mají poslat všichni příjemci, kteří zprávu bezchybně přijali.
Pole End of Frame (konec rámce) nakonec uzavírá zcela bezchybný přenos CANového rámce.
Obrázek: Formát standardního CAN rámce
Přenos zpráv spouštěný událostmi, s podporou multi-master provozu
Každý účastník (uzel) na sběrnici CAN může začít vysílat zprávu jakmile je sběrnice volná. Může se stát, že začne vysílat více uzlů současně. Specialitou CANu je nezdržující mechanismus "rozhodnutí priority" ("arbitration"), který zajišťuje, že pouze jeden uzel svou zprávu skutečně odvysílá.
Kterýkoli uzel může odvysílat zprávu z vlastní iniciativy - je tak umožněn přímý přenos dat mezi účastníky navzájem. Konkrétní uzel vyšle data pouze, pokud má proč ("na základě události"). Ve srovnání s cyklickými přenosy je toto uspořádání obecně méně náročné na kapacitu sběrnice (bitrate)
resp. vystačí si s nižší zátěží sběrnice.
Bezeztrátové dohadování bit po bitu
"Dohadování" (arbitration) umožňuje na sběrnici CAN hladký a bezchybný přenos. V průběhu "dohadovací fáze" (arbitration phase) se určí, která ze simultánně započatých zpráv má nejvyšší prioritu. Pouze uzel, který vysílá tuto vítěznou zprávu, smí pokračovat v odvysílání zbytku zprávy, který následuje po "arbitration phase". Nejvyšší prioritu má zpráva s nejnižším identifikátorem.
"Dohadovací fáze" se skládá z indentifikátoru a RTR bitu. V jejím průběhu všechny uzly na sběrnici, včetně vysílajících, sledují úroveň signálu na sběrnici. Pokud konkrétní vysílající uzel vysílá bit recesivní, ovšem na sběrnici zároveň detekuje bit dominantní, přeruší odesílání své zprávy a přepne budič do naslouchajícího stavu ("příjem"). Zpráva je v každém případě odvysílána, ovšem odvysílá ji pouze uzel, který "vyhrál dohadování". Mechanismus dohadování priority v průběhu vysílání "adresy" lze v tomto smyslu označit za "bezeztrátový".
Pozn.překl.: Zopakujme, že dominantní úroveň odpovídá log.0. Pak to celé začne dávat smysl -dominantní logické nuly "vyhrají vhazování", tedy vyhraje nejnižší ID.
Obrázek: princip "bezeztrátového dohadování po jednotlivých bitech"
Uzly 1, 2 a 3 započnou dohadování ve stejném okamžiku. V čase (2) uzel č.2 zjistí, že sběrnice nemá očekávanou recesivní úroveň (kterou sám vysílá) a jde dobrovolně z kola ven. V čase (3) vzdává uzel č.1. V čase (4) = po skončení dohadování pokračuje ve vysílání pouze vítězný uzel č.3 (odešle zbytek své zprávy).
Pozn.překl.: možná Vám vrtá hlavou, "jak to, že se dva (a více) vysílající uzly tak pěkně sejdou, když ani nemají explicitní společné hodiny". 1.) No ony se sejdou obvykle tím způsobem, že se sběrnice z nějakého důvodu přetíží, takže zprávy ve výstupních frontách jednotlivých uzlů nějakou dobu čekají, až se sběrnice uvolní. Takže několik uzlů číhá, až aktuální frame skončí (+ povinná pauza) a v tu chvíli se do toho pustí všichni hezky naráz. Vnitřní lokální hodiny (xtal) mají natolik shodné, že se během těch pár bitů nestihnou významně rozejít. Předpokládejme, že vnitřní časová základna CAN řadiče umožňuje automaticky zasynchronizovat takt posuvných registrů (jmenovitým baudem) na hrany bitů rámce, který vysílá někdo jiný. Takže 2.) pokud by se stalo, že si nějaký uzel vzpomene "o fous pozdě", tzn. prostě mu přijde z "lokálního hostitele" další zpráva: nezapomeňte, že neaktivní transceiver neustále naslouchá, takže když mu v interním bufferu přistane nová zpráva k odeslání "pár vteřin po dvanácté", tak linkový přijímač už stihl nahodit interní příznak "sběrnice je busy" (přijímač je také zasynchronizovaný na probíhající "cizí" zprávu), řadič vůbec nezačne vysílat SOF a odchozí zpráva si hezky počká ve frontě. A dále viz bod 1.)
Pozn.překl.: termín "bezeztrátový" (lossless) v kontextu řešení kolizí na sdíleném médiu je poměrně neobvyklý. Pravda je, že v kontextu technologií jako CSMA-CD (collision detection) nebo TDMA (collision avoidance) je naopak nečekaná a nezvyklá vůbec možnost, vyřešit kolize bez dodatečného zdržení. Ten mechanismus není bezkolizní, on se kolizi nevyhýbá, on ji rovnou vyřeší v průběhu jejího trvání. "Collision detection and simultaneous in-place resolution" :-)
Komunikace se zohledněním priorit
Shora popsaný dohadovací proces garantuje, že zpráva s nejvyšší prioritou je odeslána vždy jako první, jakmile se sběrnice uvolní.
Princip komunikace se zohledněním priorit umožňuje efektivní využití šířky pásma na sběrnici. Umožňuje využít sběrnici na 100% zprávami o nižší prioritě a zároveň garantovat prioritním zprávám přednostní doručení bez významného zdržení. Např. při bitové rychlosti 1 Mbps bude mít nejprioritnější zpráva maximální latenci 130 bitů=mikrosekund. Na druhou stranu je třeba při návrhu komunikačního schématu dávat pozor, aby nehrozilo trvalé zahlcení sběrnice zprávami s vysokou prioritou. V konkrétních implementacích CAN uzlů bývá možnost, omezit periodicitu odesílání zpráv s konkrétním identifikátorem - standardní CANopen tomuto parametru říká "inhibit time" = minimální pauza mezi dvěma zprávami s tímtéž ID.
Bitová rychlost vs. délka sběrnice
Princip bitwise dohadování (a ACKování) na CANu znamená, že je třeba porovnat lokální úroveň každého jednotlivého bitu na každém jednotlivém uzlu - a uzly jsou rozmístěny podél celé délky sběrnice. Porovnání jednotlivého bitu se logicky musí stihnout v rámci délky jednoho bitu v čase -napříč celou sběrnicí.
A protože přenosové zpoždění na komunikačním vedení je přímo úměrné délce vedení, technicky nutná minimální doba trvání jednoho bitu roste s délkou vedení (sběrnice). Maximální přípustná délka sběrnice je určena prakticky pouze rychlostí šíření signálu na sběrnicovém médiu: při rychlosti 1 Mbit/s například vychází maximální délka sběrnice na 40 m, při 80 kbit/s je to 1000 m.
Obrázek: závislost maximální bitové rychlosti na délce sběrnice
Čárkovaná čára znázorňuje níže uvedenou rovnici pro bitové rychlosti pod 400 kbps a délky sběrnice nad 100 m. Zelená plocha ukazuje použitelné kombinace bitové rychlosti a délky sběrnice. Nejsou brány v úvahu spínací časy budičů a další omezující parametry.
Mezi délkou sběrnice a maximální bitovou rychlostí tedy platí nepřímá úměra. Pro sběrnice delší než 100 m lze použít následující rovnici:
baud [Mbps] * délka [m] = 60
Detekce chyb a izolace poruchy
Jednou ze základních vlastností CANu je schopnost detekovat chyby přenosu. Díky tomu je CAN schopen dostát vysokým nárokům na komunikaci řídících jednotek ve vozidlech.
Kvalitní detekce chyb je zajištěna kombinací několika opatření. Asi nejúčinnějším z nich je sledování úrovní vlastních odesílaných bitů vysílajícím uzlem ("bit monitoring"). Už na této úrovni jsou detekovány všechny "globálně účinné" chyby. Navíc každý naslouchající uzel (příjemce) taktéž kontroluje každou přijatou zprávu podle CRC segmentu a pevně umístěných částí fomátu rámce. Tímto způsobem jsou s vysokou mírou jistoty detekovány také chyby s pouze lokálním účinkem. A ještě navíc, kromě uvedené detekce chyb přenosu, obsahuje CAN také mechanismus pro detekci a odpojení vadných uzlů. Tím je zajištěno, že vadné uzly na sběrnici neznemožní přenos zpráv ustavičným vyrušováním.
Signalizace chyb
Na rozdíl od komunikačních koncepcí orientovaných na účastníka, CAN, jakožto protokol orientovaný na zprávu, uplatňuje svébytný princip signalizace chyb, kde všechny uzly kontrolují integritu všech zpráv na sběrnici.
Jakmile odesílající nebo přijímající uzel detekuje chybu, signalizuje ji všem ostatním uzlům odvysíláním chybové zprávy (Error Frame). Touto zprávou je (jinak neplatná) sekvence šesti bitů o shodné polaritě, obvykle dominantní. Všechny uzly chybovou zprávu detekují a zahodí již přijatou část původně přenášené "užitečné" zprávy.
Tímto způsobem je zajištěna jednotná množina dat pro všechny účastnické uzly na sběrnici.
Jakmile odesílající uzel odeslal nebo přijal chybovou zprávu, okamžitě se pokusí původní užitečnou zprávu odeslat znovu = začne "se dohadovat" znova od začátku.
Tento mechanismus signalizace chyb garantuje, že výměna zpráv je bezchybná a konzistentní pro všechny účastníky na sběrnici.
A protože je chyba signalizována okamžitě po detekci, jsou také garantovány velmi krátké časy pro zotavení se z chyby. Tento mechanismus signalizace chyb vykazuje také příjemně nízkou dodatečnou "režii" (zátěž na sběrnici), protože hlášení o chybě obere sběrnici o čas jenom v případě, že k chybě skutečně došlo - srovnejte s přenosovými mechanismy, které zpětně potvrzují úspěšné doručení samostatným režijním rámcem.
Protokoly vyšších vrstev
Výše popsaný CAN protokol, standardizovaný normou ISO 11898, odpovídá vrstvám 1-2 OSI modelu. Pro realizaci sítí jsou ale zapotřebí další funkce.
Pro nasazení v embedded zařízeních a průmyslové automatizaci jsou k dispozici dvě oblíbené sady protokolů: CANopen a DeviceNet.
CANopen se rozšířil v "embedded" oblasti, DeviceNet je naopak populární v průmyslové automatizaci díky rodné firmě Rockwell Automation. V nákladních a užitkových vozech je také populární norma SAE J1939.
odkazy: