12.3 Sběrnice CAN a Transportní Protokol ISO-TP

Controller Area Network (CAN bus)
CAN je nejrozšířenější a velmi robustní automobilová sběrnice. Jedná se o síť typu broadcast – všechny ECU mohou posílat zprávy a všechny je přijímají.
  • Žádné explicitní adresování uzlů: CAN ID neoznačuje příjemce nebo odesílatele, ale identifikuje zprávu samotnou. Každý uzel má předdefinováno, které zprávy má zpracovávat.
  • Rychlost: Typické rychlosti jsou 125 kbps, 250 kbps, 500 kbps nebo až 1 Mbps.
  • Priority: Nižší CAN ID znamená vyšší prioritu (např. informace o rychlosti vozidla mají nižší ID než diagnostické zprávy, a proto projdou sběrnicí dříve).
  • Bezpečnost: Na úrovni CAN protokolu neexistuje žádné šifrování ani autentizace.
Struktura CAN Rámce (Frame)
Běžný datový rámec má velmi omezenou kapacitu payloadu:
  • Arbitration Field (CAN ID): 11bitový (Standard) nebo 29bitový (Extended).
  • DLC (Data Length Control): Určuje délku dat.
  • Payload: Omezeno na 0 až 8 bajtů dat.
  • CRC: Kontrolní součet pro detekci chyb.
  • ACK Field: Vyplňuje jej kdokoliv na sběrnici, kdo rámec úspěšně přijal.

Nástroje a Transportní Protokol (ISO-TP)

Sběrnici CAN lze jednoduše číst z běžného Linuxu pomocí sady can-utils (např. příkazy candump) a levných USB adaptérů jako Korlan USB2CAN nebo PiCAN.

ISO-TP (ISO 15765-2)
Vzhledem k tomu, že CAN rámec pojme pouze 8 bajtů, je pro posílání složitějších zpráv nutná fragmentace. ISO-TP je transportní protokol pro CAN (obdoba TCP pro IP sítě).
  • Umožňuje rozdělit zprávy přesahující 8 bajtů do série po sobě jdoucích CAN rámců.
  • Tento protokol je klíčový pro fungování aplikačních protokolů jako UDS, které často vyžadují přenos mnohem větších dat (až 4095 bajtů na payload).
  • Při komunikaci přes ISO-TP se používá jedno CAN ID pro odesílání požadavků (např. 111) a jiné CAN ID pro příjem odpovědí od konkrétní jednotky (např. 110).
  • Komunikaci lze navázat nebo odposlouchávat pomocí isotpsend, isotprecv, isotpdump či programově např. přes modul v jazyce Python.