CAN bus
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/OBD-II_type_B_female_connector_pinout.svg/322px-OBD-II_type_B_female_connector_pinout.svg.png)
CAN (Controller Area Network) je sběrnice, využívaná nejčastěji pro vnitřní komunikační síť senzorů a funkčních jednotek v automobilu, z čehož plyne také použití pro automobilovou diagnostiku. Z této aplikační oblasti se CAN rychle rozšířil také do sféry průmyslové automatizace. Jedná se o sériovou datovou sběrnici, vyvinutou firmou Robert Bosch GmbH. Elektrické parametry fyzického přenosu jsou specifikované normou ISO 11898. Maximální teoretická rychlost přenosu na sběrnici je 1 Mb/s. CAN patří k průmyslovým komunikačním sítím označovaným jako provozní sběrnice, fieldbus.
Síťový protokol
Síťový protokol detekuje přenosové chyby vzniklé od okolních elektromagnetických polí. Data se odesílají v rámcích, každý rámec může obsahovat až 8 datových bajtů. Každý rámec obsahuje kromě datového obsahu tzv. identifikátor, sběrnice CAN nepoužívá žádnou jinou "adresu". Identifikátor definuje obsah přenášené zprávy a zároveň i prioritu zprávy při pokusu o její odeslání na sběrnici. Vyšší prioritu mají zprávy s nižší hodnotou identifikátoru. Jedna zpráva může být přijata několika zařízeními.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/CAN-Bus_Elektrische_Zweidrahtleitung.svg/320px-CAN-Bus_Elektrische_Zweidrahtleitung.svg.png)
Metody
Aby zpracování všech přenosových požadavků sítě CAN souhlasilo s dobou reakce omezenou nejnižší přípustnou přenosovou rychlostí, protokol CAN vždy používá bitovou arbitráž, garantující deterministický přístup na sběrnici. Bitová arbitráž v průběhu 13 (standardní formát) nebo 33 (rozšířený formát) bitových period určí stanici, která může vysílat na sběrnici. Na rozdíl od arbitráže (rozhodovací metody) pomocí CSMA/CD (používané například u ethernetu) tyto nedestruktivní metody zajišťují, že při "konfliktu" na sběrnici nedochází ke zpoždění vysílání zprávy s nejvyšší prioritou. Sběrnice a protokol CAN na úrovni hardware rozhoduje, která zpráva má "přednost v jízdě".
Hardware
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/9_pin_d-sub_connector_male_closeup.jpg/220px-9_pin_d-sub_connector_male_closeup.jpg)
Přenosovým kanálem je sběrnice tvořená krouceným dvouvodičovým vedením, jehož signálové vodiče jsou označeny CAN_H a CAN_L, a zakončovacími rezistory 120 Ω. K této sběrnici se připojují jednotlivé komunikační uzly, jejichž počet může být až 110.[1]
Pro připojení se používají různé typy konektorů, například OBD-II nebo devítipinový D-Sub.
Přenos dat
Datové přenosy v rámci CAN používají bezztrátovou bitovou arbitrační metodu pro stavové rozhodování. Tato arbitrační metoda požaduje, aby všechny uzly v této CAN síti byly synchronizovány a připraveny ke vzorkování ve stejnou dobu. To je důvod, proč někteří CAN nazývají synchronní sběrnicí. Bohužel, termín synchronní je zde nepřesný, jelikož data jsou odesílána bez hodinového signálu, jak je tomu u obvyklého asynchronního přenosu.
Specifikace sběrnice CAN užívají termíny dominantní a recesivní (ustupující) bity, ve kterém dominantní bit je logická 0 (aktivně řízen napětím vysílače) a recesivní je logická 1 (pasivně vybitá do zdroje přes rezistor). Stav nečinnosti je reprezentován ústupovou úrovní, tím pádem logickou 1. Pokud jeden uzel vysílá dominantní bit a další uzel vysílá recesivní bit, naskytla se zde kolize a větší prioritu má dominantní bit. To ve výsledku znamená, že zde není žádné zpoždění pro zprávy vysoké priority a uzel, který vysílal recesivní bit, se automaticky pokusí o opětovné přeposlání po šesti bitech hodinového signálu, po ukončení přenosu dominantní zprávy. Tímto se CAN stává velmi vhodným komunikačním systémem pro komunikaci v reálném čase.
Přesná napěťová úroveň pro logickou 1 a logickou 0 závisí na použité fyzické vrstvě, ale základní principy CAN požadují, aby každý uzel naslouchal data v CAN síti, včetně dat, která jsou vysílána vysílacím uzlem. Pokud je logická 1 vysílána všemi vysílacími uzly ve stejnou dobu, tak logická 1 je viděna všemi uzly, včetně vysílacích i přijímacích uzlů. Stejně tak, když je všemi vysílacími uzly ve stejnou dobu vysílána logická 0, tak všechny uzly vidí logickou 0. Vysílá-li se jedním, nebo více uzly logickou 0 a zároveň je vysílána jinými uzly logickou 1, tak je logická 0 viděna všemi uzly, včetně vysílacích uzlů, které vysílaly logickou 1. Pokud uzel vysílá logickou 1, ale vidí logickou 0, uvědomí si kolizi a přestane vysílat. Užíváním tohoto principu přestane jakýkoliv uzel vysílající logickou 1 vysílat, nebo přijde o arbitraci. Uzel, který o arbitraci přišel, zařadí svoji zprávu do fronty pro opětovné odeslání v pozdější době a CAN rámec proudu dat pokračuje bez problému, dokud nevysílá pouze jeden uzel. To znamená že uzel, který jako první vysílá logickou 1 přijde o arbitraci. Poněvadž 11bitový identifikátor (nebo 29bitový pro CAN 2.0B) je vysílán všemi uzly na začátku rámce CAN, uzel s nejnižším identifikátorem vysílá více nul na začátku rámce a tak tento uzel získá nejvyšší prioritu nebo arbitraci.
Například, uvažujme o síti CAN s 11bitovým identifikátorem (ID) se dvěma uzly s ID 15 a 16 (binárně 00000001111 a 00000010000). Pokud tyto dva uzly vysílají ve stejnou dobu, oba nejdříve vyšlou startovací bit a poté prvních 6 čísel z jejich ID, bez jakéhokoliv arbitračního rozhodnutí.
Startovní Bit | ID Bitů | Zbytek datového rámce | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |||
Uzel 15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | |
Uzel 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Zastavené vysílání | ||||
CAN Data | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
Poté, co je odeslán osmý bit, uzel s ID 16 vyšle logickou 1 (ústup) a uzel s ID 15 vyšle logickou 0 (dominance). Pokud toto nastane, uzel s ID 16 ví, že přestože vysílal logickou 1 vidí logickou 0 a že se vyskytla kolize a přijde proto o arbitraci. Přestane proto vysílat a uzel s ID 15 může pokračovat ve vysílání bez ztráty dat. Uzel s nejnižším ID vyhraje arbitraci vždy a proto má největší prioritu.
Přenosové rychlosti až do 1 Mbit/sekundu jsou možné pro vzdálenosti do 40 m. Snižováním přenosových rychlostí můžeme docílit vyšších vzdáleností (například 500 m máme rychlost 125 kbit/sekundu). Vylepšený standard CAN FD umožňuje zvýšení přenosových rychlostí po arbitraci a může zvýšit rychlost v dané datové sekci až na osminásobek arbitrační přenosová rychlost.
Přidělování ID
ID zpráv musí být na každé sběrnici CAN unikátní, jinak by 2 uzly mohly pokračovat v odesílání až za konec arbitračního pole (ID) a způsobit chybu.
Na začátku roku 1990 bylo ID zprávy voleno jednoduše podle typu dat a odesílacího uzlu; kvůli použití ID i pro prioritu zprávy to však vedlo ke špatným výsledkům při použití v reálném čase. Kvůli tomu nebylo možné v případě nutnosti doručení všech zpráv včas využití sběrnice vyšší než přibližně 30%. Avšak, pokud jsou ID přiřazovány v závislosti na deadlinu pro doručení zprávy (tedy čím je menší ID zprávy, tím má zpráva větší prioritu), je typicky možné dosáhnout využití CAN sběrnice kolem 70–80 %, než se začnou zprávy opožďovat.
Rámce
Na sběrnici CAN se v závislosti na konfiguraci mohou vyskytovat dva formáty rámců. Základní rámec má 11bitové ID, zatímco rozšířený rámec má 29bitové ID skládající se ze základního 11bitového a 18bitového rozšíření.
Existují čtyři typy rámců:
- Datový rámec - Vlastní přenos dat.
- Vzdálený rámec - Obsahuje žádost o informace od určitého ID.
- Chybový rámec - Odesláno uzlem, který detekoval chybu.
- Rámec přetížení - Pro vložení prodlevy před datovým nebo vzdáleným rámcem.
Základní datový rámec
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/54/CAN-bus-frame-with-stuff-bit-and-correct-CRC.png/880px-CAN-bus-frame-with-stuff-bit-and-correct-CRC.png)
Název položky | Délka (bity) | Význam |
---|---|---|
Začátek rámce (Start of frame) | 1 | Začátek vysílaného rámce. |
ID (zelená) | 11 | (Jedinečné) ID udávající též prioritu. |
Vložený bit (Stuff bit) | 1 | Bit opačné polarity kvůli synchronizaci. |
Vzdálená žádost (Remote transmission request, RTR) (modrá) | 1 | V datovém rámci musí být dominantní (0), ve vzdáleném rámci recesivní (1). |
Příznak rozšířeného ID (Identifier extension bit, IDE) | 1 | V základním rámci s 11bitovým ID musí být dominantní (0). |
Rezervní bit (r0) | 1 | Rezerva. Musí být dominantní (0), ale přijímají se obě úrovně. |
Délka dat (Data length code, DLC) (žlutá) | 4 | Počet bajtů dat (0–8 bajtů). Principiálně je možné do 4 bitů zapsat i hodnoty od 9 do 15, nicméně data budou omezena na 8 bajtů. |
Data (červená) | 0-8 bajtů (0-64 u CAN FD) | Odesílaná data (počet bajtů je uveden v DLC). |
CRC | 15 | Cyklický redundantní součet (CRC-15-CAN) |
Oddělovač CRC (CRC delimiter) | 1 | Musí být recesivní (1). |
ACK slot | 1 | Vysílač nastavuje jako recesivní (1), zatímco přijímač může překlopit do dominantní (0). |
Oddělovač ACK (ACK delimiter) | 1 | Musí být recesivní (1). |
Konec rámce (End of frame, EOF) | 7 | Musí být recesivní (1). |
Mezirámcová mezera (Inter-frame spacing, IFS) | 3 | Musí být recesivní (1). |
Vzdálený rámec
Od datového rámce se liší tím, že RTR je recesivní (1), DLC udává pouze požadované množství dat, ale data v rámci nejsou.
Pokud se náhodou na sběrnici potká datový a vzdálený rámec se stejným ID, tak vyhraje datový rámec.
Chybový rámec
Chybový rámec obsahuje dvě pole:
- Chybové příznaky (Error flags) - 6 bitů.
- Oddělovač chyby (Error delimiter) - 8 recesivních bitů.
Rámec přetížení
Rámec přetížení obsahuje dvě položky:
- Příznak přetížení (Overload flag)
- Oddělovač přetížení (Overload delimiter)
Reference
- ↑ Aplikování sběrnice CAN [online]. vývoj.hw.cz, 2004-11-09 [cit. 2023-01-22]. Dostupné online.
Externí odkazy
Obrázky, zvuky či videa k tématu CAN-BUS na Wikimedia Commons
- Integrované obvody pro CAN-BUS
- Časování CAN sběrnice Archivováno 2. 6. 2020 na Wayback Machine.
- Stránky sdružení CAN in Automation (technické informace, seznam dodavatelů, školení)
- Článek o protokolu CAN FD (CAN with Flexible Data-Rate) ze září 2015
- Článek Chybující CAN sběrnice