CAN-busz

kommunikációs protokoll
Ez a közzétett változat, ellenőrizve: 2023. november 18.

A CAN-busz (angolul CAN bus, Controller Area Network) egy robusztus buszszabvány, mely lehetővé teszi a mikrokontrollerek és az eszközök számára, hogy központi számítógép (host) nélkül kommunikáljanak egymással. Ez egy üzenetközpontú protokoll, melyet eredetileg az autóiparban a nagy mennyiségű rézvezeték kiváltására dolgoztak ki.

A CAN-busz története

szerkesztés

A CAN-buszt eredetileg a Robert Bosch GmbH fejlesztette ki Zuffenhausenben, 1983-ban. A protokoll hivatalos bemutatója 1986-ban történt meg, a Society of Automotive Engineers (SAE) kongresszuson, Detroit-ban (Michigan). Az első CAN vezérlő chipet 1987-ben dobta piacra az Intel–Philips-duó. A Bosch által továbbfejlesztett változat 1991-ben debütált CAN 2.0 néven. A CAN teljesíti az amerikai OBD-II jármű diagnosztikai standard előírásait, mely 1996-tól érvényes az USA-ban, és az EOBD standardot, mely az európai benzinüzemű járművekre 2001-től, dízelekre pedig 2004-től alkalmazható.

A Bosch napjainkban is dolgozik a CAN továbbfejlesztésén, 2012-ben kiadta a CAN FD 1.0 specifikációt, ami a rugalmas adatsebességet vezette be a szabványba. Az FD 1.0 bár eltérő keretformátumot használ, (elvileg) kompatibilis a CAN 2,0 hálózatokkal.

A CAN célja elsősorban az volt, hogy az akkoriban robbanásszerűen fejlődő autóipar rendszer-decentralizációs törekvéseihez megbízható eszközként szolgáljon, ezért az alábbi célkitűzéseknek kellett megfelelnie:

  • robusztus kialakítás, nagy üzembiztonság, akár szélsőséges körülmények között is
  • igen rövid ciklusidő, viszonylag magas átviteli sebesség mellett
  • minimális adatmennyiség továbbítása
  • broadcasting támogatás
  • gyors és egyszerű átkonfigurálás lehetősége
  • alacsony ár

Az ambiciózus tervek ellenére a CAN-busz rendesen megállta a helyét, jelenleg is folyamatosan fejlesztik, és a járműiparban egyeduralkodóvá nőtte ki magát. Nagyon gyakran kerül olyan gyártósorokon, technológiai rendszerekben is alkalmazásra, ahol a kis mennyiségű adat rövid ciklusidővel való továbbítása az elsődleges szempont, bár napjainkban ezt a pozícióját rendesen szorongatja a Profinet.

Architektúra

szerkesztés

Fizikai felépítés

szerkesztés
 
ISO 11898-2 - gyors CAN-busz jelképzése
 
ISO 11898-3 - lassú CAN-busz jelképzése

A CAN-busz egy multi-master broadcast serial busz, melynek elsődleges feladata az ECU-k (electronic control units) összekapcsolása. Egy autóban jelenleg akár 70 ECU is lehet. A legnagyobb ezek közül szinte mindig a motor ECU-ja, de jellemzően többek között az ajtóknak, fékeknek, világításnak, műszereknek, a légzsáknak, a hangrendszernek és a riasztónak is saját ECU-ja van.

A CAN-buszra csatlakozó egységek, az ECU-k bonyolultsága egy egyszerű I/O felülettől komplex, beágyazott rendszerekig terjedhet. Az átjárók (gateway-ek) szintén ECU-k, melyek lehetővé teszik például a busz elérését egy külső számítógépről, például egy USB-re csatlakozó illesztőegységen keresztül. A CAN-busz technikailag egy kétvezetékes (multi-master) soros busz, ahol a vezeték egy csavart érpár, melynek a (névleges) impedanciája 100 vagy 120 Ω. A busz két – egymással fizikai szinten nem kompatibilis – változatra tagozódik, egyszerűen a lassú és a gyors CAN-re. Hibatűrő (fault-tolerant) átvitelnek csak a lassú CAN számít.

A CAN-busz egyedi megnevezéseket alkalmaz a jelátvitelére, annak a jellegéből adódóan. A „1” fizikai megjelenését „recesszív”, míg a 0-t „domináns” megnevezéssel illeti. Recesszív (1) állapotban a két vezeték jelszintje megegyezik (2,5V), vagy alacsony (2-3V), míg domináns jel (0) átvitele esetén maximálisan kitérnek (0V és 5V). A zavarvédelem okán a CAN_L, CAN-H vezetékeken futó jelek ellenfázisúak, azonos szingálokra ellenkező feszültségszint irányokba térnek ki. Ez a megoldás - hogy a jelek gyakorlatilag mindig azonos mértékben térhetnek ki a középértéktől - biztosítja, hogy a vezetékek GND szintje stabil marad, és így a busz (viszonylag) védett lehet a külső rádiófrekvenciás zavarójelektől.

ISO 11898-2 - gyors CAN

szerkesztés

A gyors CAN domináns jelszintjei a 3,5V (CAN Hi) és 1,5V (CAN Lo), míg a recesszív jelszintjeik mindkét vezetéken megegyeznek (2,5V). A busz átviteli sebessége leggyakrabban 512 Kbps, de (a szabvány szerint) maximum 1 Mbps lehet. Véglezárónak 120 Ω-os ellenállásokat kell alkalmazni.

ISO 11898-3 - lassú CAN

szerkesztés

A lassú CAN domináns jelszintjei a 4V (CAN Hi) és 1V (CAN Lo), míg a recesszív jelszintjeik 1,75V (CAN Hi) és 3,25V (CAN Lo). A busz átviteli sebessége leggyakrabban 128 Kbps, de (a szabvány szerint) 40 kBit/s és 125 kBit/s között kell maradnia. Véglezárónak legalább 100 Ω-os ellenállásokat kell alkalmazni.

 
CANbus Node

A CAN-buszra csatlakozó egységeket NODE-oknak nevezzük. Ezek lehetnek ECU-k, összetettebb vezérlők, vagy átjárók (gateway) is akár. Közös jellemzőjük, hogy (legalább) két részből állnak:

  • A vezérlőrész mindenképpen tartalmaz egy CAN-kontrollert is, mely az adatszintű kommunikációt (DLL: Data Link Layer) végzi. Ennek a működését az ISO 11898-1 szabvány írja le.
  • A fizikai átvitelért a fizikai hordozóhoz kapcsolódó rész (MAU: Medium Access Unit) felel, mely a kommunikáció fizikai megvalósítását végzi. Ennek a működését az ISO 11898-2 vagy az ISO 11898-3 definiálja.

Csatlakozók

szerkesztés
 
DE-9 Male

Habár a szabvány (ISO 11898-2:2003) pontosan specifikálja a csatlakozók technológiai jellemzőit (tű-kiosztás, vezetékszínek, címkék), azoknak a formai kialakítását nem írja le, így szinte minden gyártó eltérő formavilágú csatlakozókkal szereli a termékeit. Az átjárók felé viszont de facto szabványként elkezdték alkalmazni a 9-tűs D-Sub csatlakozó-típust, az alábbi tű-kiosztással:

  • pin 2: CAN-Low (CAN−)
  • pin 3: GND (ground)
  • pin 7: CAN-High (CAN+)
  • pin 9: CAN V+ (táp)

Adatátvitel

szerkesztés

A telegramok felépítése

szerkesztés

Normál üzenetkeret

szerkesztés

Kibővített üzenetkeret

szerkesztés

Arbitráció

szerkesztés
 
CAN arbitration

Ez az eljárás a CSMA/CR közeg-hozzáférési eljárás része. Feladata eldönteni, hogy melyik állomás (node) forgalmazhat. Az eljárás akkor élesedik, amikor több állomás nagyjából egyszerre kezd adni. A CSMA/CR egyidejűleg csak egy állomásnak engedi meg a forgalmazást, de ehhez meg kell tudni állapítani, hogy melyiküknek magasabb a prioritása (alacsonyabb az Identifier értéke). Az Identifier mező hossza normál üzenetkeret esetén 11 bit (2048 lehetséges azonosító kód), kibővített üzenetkeret esetén 29 bit (536 870 912 lehetséges azonosító kód).

Az oldalt látható példán 3 egység (node) kezd vetélkedni az adás jogáért. Az SOF (start of frame) után mindhárom egyidejűleg kezdi adni a saját azonosító kódját, és figyelik, hogy mi történik a buszon. Ha bármelyikük 0-t ad, az domináns adásnak számít, azaz "lehúzza" a többiek recesszív "1" értékét.

Először a node 2 hagy fel az adással 5. azonosító bitnél, mert a saját recesszív értékével szemben a buszon egy domináns jelet lát, így innen visszalép, csak hallgatózik a továbbiakban. A node 1 a 2. bit hagyja abba a forgalmazást, mert a buszról visszaolvasott információk szerint a node 3 itt is fel tudta húzni a buszon a jelszintet, azaz magasabb prioritást tudott produkálni. Így végül ebben az esetben a node 3 kapta meg az adás jogát.

Fordítás

szerkesztés
  • Ez a szócikk részben vagy egészben a CAN bus című német Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.