12.4 Diagnostický Protokol UDS (Unified Diagnostic Services)

UDS (ISO14229) je aplikační protokol běžící na téměř všech ECU. Slouží ke kontrole stavu, rekonfiguraci, aktualizaci softwaru a řešení problémů v řídicích jednotkách.

Základní principy UDS
  • Je to protokol postavený na architektuře request-response (klient-server).
  • Typicky se k vozu připojuje přes OBD-II konektor (často pod volantem), kde se k tzv. Diagnostics CAN sběrnici obvykle připojujeme přes speciální piny. Většinou je tento port chráněn a připojen jen na Gateway.
  • Každá ECU v autě poslouchá a odpovídá na jiných, specifických CAN ID.
  • Zprávy běží většinou přes ISO-TP.
UDS požadavky mají strukturu tvořenou CAN ID, řídicím bajtem ISO-TP (PCI) a samotnými daty, ze kterých je nejdůležitější SID (Service Identifier) určující požadovanou službu, následován případně Sub-funkcí a parametry.
Běžné UDS služby (SID)
  • 0x10Diagnostic Session Control: Přepnutí do určité diagnostické relace (např. programovací nebo rozšířené).
  • 0x11ECU Reset: Restart jednotky (na stole fajn, za jízdy raději ne).
  • 0x22 / 0x2ERead / Write Data By ID: Čtení/zápis VIN kódu, sériových čísel nebo konfigurací.
  • 0x27Security Access: Zabezpečuje přístup (více níže).
  • 0x36Transfer Data: Slouží mj. k flashování nového firmwaru (SW update).
  • 0x3ETester Present: Udržuje diagnostickou relaci "naživu".
Security Access (0x27) - Zabezpečení na úrovni protokolu
Aby diagnostický nástroj mohl provádět nebezpečné operace (jako je programování), musí získat přístup od ECU. Tento mechanismus (Seed-Key) se obvykle skládá z následujících kroků:
  1. Klient pošle požadavek na Seed (výzvu).
  2. ECU vygeneruje a odešle zpět Seed.
  3. Klient matematicky vypočítá Key (odpověď) a zašle jej ECU.
  4. ECU provede ten samý výpočet, porovná jej a následně přístup buď udělí, nebo zamítne.
Zabezpečení může být prolomeno, pokud je algoritmus triviální, nebo pokud je klíč (či seed) u všech ECU konstantní či odvoditelný.
Odpovědi (Responses)
Pozitivní odpověď: Pokud ECU akceptuje požadavek, její Service ID (SID) v odpovědi bude rovno vyžádanému SID + 0x40.
Např. požadavek na 0x10 bude mít kladnou odpověď začínající na 0x50.

Negativní odpověď (NRC): Pokud požadavek selže, ECU vrátí zprávu začínající bajtem 0x7F, následovanou původním SID a chybovým kódem (Negative Response Code).
Např. 0x11 (Service not supported), 0x22 (Conditions not correct), 0x33 (Security access denied).