Pāriet pie satura

CAN ir CAN FD magistralių dekodavimas

CAN magistralė (Controller Area Network) — serijinių duomenų standartas, kurį XX a. devintajame dešimtmetyje iš pradžių sukūrė Robert Bosch GmbH automobilių pramonės reikmėms. Šiandien jis plačiai naudojamas ir pramoniniuose procesų valdymo bei aviacijos ir kosmoso sprendimuose.

Jis leidžia mikrovaldikliams ir elektroniniams įtaisams bendrauti tarpusavyje be pagrindinio kompiuterio ir užtikrina greitą bei patikimą duomenų perdavimą elektriškai triukšmingoje aplinkoje — pigiai ir su minimaliu laidų kiekiu.

CAN naudoja diferencinį signalą, kuris suteikia aukštą atsparumą elektriniams trikdžiams.

1991 m. Bosch paskelbė CAN 2.0 specifikaciją, kurioje aprašomi du formatai:

  • CAN 2.0A — standartinis formatas su 11 bitų identifikatoriumi.
  • CAN 2.0B — išplėstinis formatas su 29 bitų identifikatoriumi.

1993 m. ISO (Tarptautinė standartizacijos organizacija) išleido CAN standartą ISO 11898, kuris vėliau buvo pertvarkytas į tris dalis:

  • ISO 11898-1 — apima duomenų perdavimo lygmenį (data link layer)
  • ISO 11898-2 — apima didelės spartos CAN fizinį lygmenį (iki 1 Mbit/s).
  • ISO 11898-3 — apima mažos spartos, gedimams atsparaus CAN fizinį lygmenį (iki 125 kbit/s)

Vėliau Bosch išleido CAN FD 1.0 (CAN su lanksčia duomenų sparta), kuris buvo įtrauktas į ISO 11898-1:2015. Ši specifikacija leidžia perduoti ilgesnius duomenis, taip pat pasirinktinai perjungti į didesnę bitų spartą po to, kai išsprendžiamas arbitražas. CAN FD yra atgaline eiga suderinamas su esamais CAN 2.0 tinklais, tad nauji CAN FD įtaisai gali veikti tame pačiame tinkle kartu su esamais CAN įtaisais.

Laidai

Prie CAN magistralės galima prijungti daug įtaisų — nuo sudėtingų elektroninių valdiklių iki paprastų įvesties/išvesties įtaisų. Kiekvienas įtaisas vadinamas mazgu (node).

Kiekvienas CAN mazgas perduoda diferenciniu būdu dviem laidais: CAN High ir CAN Low.

Signalas

CAN perduoda diferenciškai dviem linijomis — CAN High ir CAN Low. Yra dvi loginės būsenos:

  • Dominuojanti (dominant) – loginis 0
  • Recesyvinė (recessive) – loginis 1

Įtampos lygiai priklauso nuo specifikacijos. Čia nagrinėjame didelės spartos CAN (High Speed CAN).

Perduodant recesyvinį lygį (loginį 1), magistralė nėra aktyviai valdoma ir ilsisi ties maždaug 2,5 V.

Perduodant dominuojantį lygį (loginį 0), CAN High keliamas link 5 V (arba Vcc), o CAN Low žeminamas link 0 V.

Arbitražas

CAN duomenys siunčiami kadrais (Frames), prasidedančiais dominuojančiu 0, po kurio eina identifikatorius — jis sudaro arbitražo (prioriteto) pagrindą, kai du ar daugiau mazgų bando perduoti vienu metu.

Kiekvienam mazgui priskiriamas identifikatorius, kurio ilgis gali būti 11 bitų (CAN 2.0A) arba 29 bitai (CAN 2.0B).

Lentelėje parodyti trys mazgai, bandantys perduoti vienu metu; kiekvienas pradeda dominuojančiais 0. Kai mazgas perduoda recesyvinį 1, bet mato, kad magistralė lieka ties dominuojančiu 0, jis supranta, jog kilo konfliktas, nustoja perduoti ir laukia kitos progos perduoti.

Taip arbitražą laimi mažiausios reikšmės identifikatorių turintis mazgas ir jam suteikiamas prioritetas perduoti likusią kadro dalį.

Kadrai

CAN turi keturis kadrų tipus:

  • Duomenų kadras (Data frame): kadras, kuriame yra mazgo duomenys perdavimui.
  • Nuotolinis kadras (Remote frame): kadras, kuriuo prašoma perduoti tam tikrą identifikatorių.
  • Klaidos kadras (Error frame): kadras, kurį perduoda bet kuris klaidą aptikęs mazgas.
  • Perkrovos kadras (Overload frame): kadras, įterpiantis delsą tarp duomenų ir (arba) nuotolinių kadrų.

RTR bitas (Remote transmission request) nurodo, ar tai duomenų kadras (0), ar nuotolinis kadras (1)

CAN tinklą galima sukonfigūruoti dirbti su dviem skirtingais kadrų formatais: baziniu kadro formatu (CAN 2.0A ir CAN 2.0B), palaikančiu 11 bitų identifikatorius, ir išplėstiniu kadro formatu (tik CAN 2.0B), palaikančiu 29 bitų identifikatorius, pridedant 18 bitų identifikatoriaus plėtinį.

Identifikatoriaus plėtinio bitas (IDE) nurodo, ar naudojamas 18 bitų ID plėtinys.

Lentelėje parodytas CAN duomenų kadro su baziniu formatu (11 bitų) formatas be bitų kaišos (bit stuffing)

Duomenų ilgio kodas (Data Length Code) nurodo duomenų ilgį baitais; šiuo atveju 1 baitas.

CRC reiškia ciklinį perteklinį kodą (cyclic redundancy check), naudojamą klaidoms aptikti.

Ack lizdo bitas – visi mazgai, gavę kadrą ir neradę jame klaidų, perduoda dominuojantį 0, kuris nustelbia siųstuvo išsiųstą recesyvinį 1. Jei siųstuvas aptinka recesyvinį 1, jis žino, kad kadras nebuvo gautas teisingai.

Kadro pabaiga patvirtinama perduodant 7 recesyvinius 1.

Visa CAN duomenų kadro struktūra

Bitų kaiša (bit-stuffing)

Siekiant užtikrinti pakankamai perėjimų sinchronizacijai išlaikyti, po penkių iš eilės einančių to paties poliškumo bitų įterpiamas priešingo poliškumo bitas. Bitų kaiša netaikoma CRC skirtuko, ACK lauko ir kadro pabaigos metu.

Laukuose, kuriuose naudojama bitų kaiša, šeši iš eilės einantys to paties tipo bitai (000000 arba 111111) laikomi klaida, ir aptikęs klaidą mazgas gali perduoti aktyvią klaidos vėliavą, sudarytą iš šešių iš eilės einančių dominuojančių bitų. 

CAN FD

Po CAN standarto Bosch pristatė CAN FD 1.0 (CAN su lanksčia duomenų sparta), kuris vėliau tapo ISO 11898-1:2015 standarto dalimi. Ši specifikacija leidžia perduoti ilgesnius duomenis, taip pat pasirinktinai perjungti į didesnę bitų spartą po to, kai išsprendžiamas arbitražas.

CAN FD atliepia augantį poreikį perduoti daugiau duomenų ir greičiau vis sudėtingesnėse automobilių (ir kitose) sistemose.

CAN FD yra atgaline eiga suderinamas su esamais CAN 2.0 tinklais, tad nauji CAN FD įtaisai gali veikti tame pačiame tinkle kartu su klasikiniais CAN įtaisais.

CAN ir CAN FD protokolų skirtumai

Lentelėje parodyta CAN FD kadro struktūra.

Arbitražas ir bazinio bei išplėstinio kadrų formatų naudojimas klasikiniame CAN ir CAN FD yra vienodi.

Kadangi CAN FD nenaudoja nuotolinių kadrų, CAN naudojamas RTR bitas tampa nereikalingas ir pakeičiamas RRS bitu (Remote Request Substitution), kuris visada perduodamas dominuojantis (0).

IDE bitas naudojamas taip pat.

CAN buvęs rezervinis bitas dabar tampa FDF bitu (Flexible Data Format): dominuojantis 0 rodo, kad kadras yra klasikinio CAN formato. CAN FD formatu siunčiami kadrai žymimi recesyviniu 1.

Toliau eina rezervinis bitas ateities poreikiams.

Tada eina BRS bitas (Bit Rate Switch). Jei BRS siunčiamas dominuojantis, bitų sparta visame kadre lieka ta pati. Jei BRS recesyvinis, po šio bito iki CRC skirtuko imtinai bus perduodama didesne bitų sparta.

ESI bitas (Error State Indicator) perduodamas dominuojantis esant aktyviai klaidos būsenai (error active) ir recesyvinis esant pasyviai klaidos būsenai (error passive).

Duomenų ilgio kodas

Baitų skaičių duomenų lauke nurodo duomenų ilgio kodas (DLC). CAN ir CAN FD jo kodavimas skiriasi. Pirmieji devyni kodai sutampa, tačiau tolesni kodai, kurie CAN visi nurodo aštuonių baitų DUOMENŲ LAUKĄ, CAN FD nurodo ilgesnius DUOMENŲ LAUKUS.

CAN FD CRC laukas

Dėl ilgesnių CAN FD duomenų CRC patikrai reikia daugiau bitų. Jei kadre yra 16 baitų ar mažiau, naudojamas 17 bitų CRC; jei CAN kadre yra daugiau nei 16 baitų, naudojamas 21 bito CRC.

Po CRC lauko Ack ir kadro pabaigos struktūra yra tokia pati kaip klasikiniame CAN.

CAN magistralės gedimų paieška

Klaidų gali kilti dėl induktyvumų, ričių ir galios įtaisų, sukeliančių dideles įtampos smailes, triukšmą ir skambėjimą (ringing).  Prie automobilių CAN magistralių jungiama vis daugiau įterptinių kompiuterių ir įtaisų, o pridedant daugiau mazgų vis labiau užimamas turimas magistralės laikas. Kai srautas pasiekia maždaug 40 % magistralės laiko, gali pradėti atsirasti klaidų. Tokiu atveju tinklo gedimams tirti gali prireikti osciloskopo.

Norint stebėti CAN magistralę ir rasti joje gedimus, svarbu turėti osciloskopą su didele atmintimi, kad būtų galima užfiksuoti platų laiko langą su daugybe duomenų kadrų. Tuomet prietaisas gali apdoroti visą užfiksuotą signalo formą ir priartinti duomenų paketus analizei.

Rekomenduojame, kad prietaiso dažnių juosta būtų dešimt kartų didesnė už CAN duomenų spartą (baud rate) — taip galėsite analizuoti kilimo trukmes ir bet kokias gedimo sąlygas. 

Pirmas žingsnis – prisijungimas zondais

CAN yra diferencinis signalas: CAN Low yra CAN High inversija. Stebint šių dviejų skirtumą pašalinami visi bendrosios veikos (common-mode) trikdžiai, patiriami signalo perdavimo metu.

Geriausius rezultatus pasieksite fiksuodami CAN Low ir CAN High signalų skirtumą diferenciniu zondu arba diferencinių įėjimų osciloskopu, tokiu kaip PicoScope 4444.

Signalą vis dar galima fiksuoti vienpusiu (single-ended) zondu, prijungtu prie CAN Low arba CAN High, tačiau tuomet bus rodomas ir bendrosios veikos triukšmas, kuris gali sukelti dekodavimo klaidų osciloskope — nors CAN imtuvui jos įtakos neturėtų.

Antras žingsnis – užfiksuokite CAN duomenų signalą

Nustatykite pakankamą atminties ilgį, kad užfiksuotumėte tiek kadrų, kiek reikia, ir su tokia skiriamąja geba, kokios reikia atskiriems bitams atskirti.

Arba naudokite buferio atminties indeksą, kad užfiksuotumėte trumpus kadrų pliūpsnius, ignoruodami tarp jų esantį tuščią laiką.

Trečias žingsnis – dekoderio nustatymas

Meniu Tools pasirinkite Serial Decoding, spustelėkite Create, tada pasirinkite CAN.

Pasirinkite Channel > Data > A ir Configuration — arba Low , arba High , jei matuojate vienpusiu būdu, arba High , jei matuojate diferenciškai.

PicoScope automatiškai apskaičiuos optimalią slenkstinę vertę, histerezę ir duomenų spartą, tačiau prireikus šias reikšmes galima keisti.

Meniu Display pažymėkite Graph arba Table, arba abu, tada pasirinkite reikiamą formatą —Hex/Binary/Decimal/ASCII— ir spustelėkite OK.

Pasirinkus Graph, grafiko lange atsiras spalvomis koduota kreivė, laike susieta su užfiksuotais duomenimis.

Pasirinkus Table, visi duomenys bus pateikti lentelės pavidalu. Su lentele galimos kelios naudingos funkcijos:

  • Du kartus spustelėjus kadrą grafike, atitinkamas kadras bus paryškintas lentelėje.
  • Pasirinkite Export, kad išsaugotumėte lentelės duomenis .csv formatu.
  • Nustatykite Link file, kad lentelės duomenys būtų rodomi kaip prasmingas tekstas.
  • Filtruokite lentelę, kad bet kuriame lauke rastumėte konkrečias reikšmes, pavyzdžiui, neteisingus CRC.

Santrauka

CAN ir CAN FD dekodavimas yra standartinė PicoScope programinės įrangos funkcija ir gali būti naudojamas su visais realaus laiko PicoScope osciloskopais.

Straipsnis išverstas iš Pico Technology bibliotekos su gamintojo leidimu. Originalas: picoauto.com. PicoScope įrangą rasite mūsų kataloge.

Hitachi Zaxis 135: MCU valdiklio gedimas