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.