Přeskočit na obsah

E39 Elektronika a sběrnice aktualizováno 3. 8. 2026 4 min čtení

Mezi sběrnicemi I-BUS a K-BUS v BMW E39 dělá bránu přístrojová deska

Moduly v pětce E39 spolu nemluví přes jeden řídicí počítač, ale po dvou pomalých sběrnicích. Formát zprávy je natolik prostý, že se rámec dá dekódovat tužkou: čtyři bajty režie, jeden bajt příkazu, nejvýš dvaačtyřicet bajtů dat a na konci XOR všeho předchozího. Dva nezávislé otevřené projekty ho mají popsaný přímo ve zdrojovém kódu.

Přístrojová deska BMW E39 523i z roku 1999
Přístrojovka BMW E39 523i z roku 1999. Jednotka za ní se v dokumentaci značí IKE a kromě otáček a rychlosti obstarává i přemostění mezi oběma sběrnicemi vozu. Foto: Untitled, Wikimedia Commons (CC BY-SA 3.0)

Pátá řada E39 se podle anglické Wikipedie vyráběla od roku 1996 do roku 2004 a její elektrika nestojí na jednom velkém řídicím počítači. Rádio, navigace, světla, klimatizace i přístrojovka jsou samostatné jednotky, které se domlouvají po dvou pomalých sběrnicích. Jmenují se I-BUS a K-BUS.

Kdo v tom provozu chce číst, nemusí spoléhat na fóra. Protokol mají popsaný dva nezávislé otevřené projekty a v obou se dá ověřit řádek po řádku. node-bmw-client je software pro Raspberry Pi pod licencí MIT; jeho repozitář vznikl 24. dubna 2017 a autor v něm uvádí, že projekt vyvíjí na americké E39 540i z roku 2000 a na E39 M5 z roku 2002. BlueBus je firmware sériově vyráběného modulu do téhož vozu, repozitář je z 14. června 2018. Oba obsluhují I-BUS i K-BUS jedním a týmž kódem, protože formát zprávy je na obou stejný.

Kdo sedí na které sběrnici

node-bmw-client má v souboru lib/bus-data.js funkci, která podle cílového modulu rozhoduje, kterou sítí zprávu poslat. Je to nejjasnější veřejně dostupný soupis toho, kdo kam patří.

Na I-BUS podle ní patří rádio, měnič CD, navigační jednotka, palubní monitor, víceřádkový displej MID, ovládání na volantu, parkovací senzory, zesilovač DSP, světelný modul LCM, telefon a přístrojovka. Je to tedy zhruba všechno, co má co dělat s obsluhou a zábavou.

Na K-BUS patří karosářský modul GM, který ovládá zámky, okna a osvětlení interiéru, dále automatická klimatizace, imobilizér EWS, airbagová jednotka, střešní okno, dešťový a světelný senzor a nezávislé topení. Tedy karoserie a komfort.

Adresy modulů jsou jednobajtové a pevně dané: rádio 0x68, přístrojovka 0x80, měnič CD 0x18, karosářský modul 0x00, klimatizace 0x5B, ovládání na volantu 0x50. Úplný seznam vede node-bmw v souboru bus-modules.js a nezávisle na něm hlavička ibus.h ve firmwaru BlueBus. Tam, kde se překrývají, se shodují do posledního bajtu.

Zprávu z jedné sítě do druhé přeposílá přístrojovka

Zvláštní postavení má adresa 0xBF, označovaná zkratkou GLO. Zpráva poslaná na ni je určená všem. Komentář u téhle adresy v bus-data.js říká, že právě takové zprávy přístrojovka zrcadlí mezi I-BUS a K-BUS. Přístrojovka tedy není jen budík: je to brána, přes kterou se hlášení z jedné sítě dostane do druhé.

Pro hledání chyby z toho plyne užitečná věc. Modul připojený na I-BUS uslyší hromadné hlášení modulu z K-BUS, ale adresnou zprávu mezi dvěma jednotkami K-BUS ne. Když se tedy dvě jednotky „neslyší“, nemusí být hned na vině vodič nebo konektor. Může jít o zprávu, která přes bránu z principu neprochází.

Rámec: čtyři bajty režie, nejvýš dvaačtyřicet dat

Stavbu zprávy má ibus.h zapsanou jedinou řádkou komentáře nad definicí maximální délky: odesílatel, délka, příjemce, příkaz, data a kontrolní součet. Celý rámec smí mít nejvýš 47 bajtů, na data tedy zbývá dvaačtyřicet.

  • bajt 0, odesílatel – adresa modulu, který mluví.
  • bajt 1, délka – počet bajtů, které následují za ním, tedy příjemce, data a součet. Celý rámec je o dva bajty delší než tohle číslo.
  • bajt 2, příjemce – adresa cíle, nebo 0xBF pro všechny.
  • bajt 3 a další – příkaz a jeho data.
  • poslední bajt – kontrolní součet.

Konkrétní příklad je přihlašovací zpráva měniče CD, kterou se modul ohlásí rádiu. Ve funkci IBusCommandCDCAnnounce firmware BlueBus posílá z adresy 0x18 na adresu 0xFF dvojici bajtů 0x02 a 0x01, což je odpověď na dotaz po stavu modulu. Odeslaný rámec proto vypadá takhle:

18 04 FF 02 01 E0

Poslední bajt v kódu nikde nestojí, dopočítali jsme ho sami podle pravidla ze stejného souboru.

Kontrolní součet je jediné XOR

Odesílatel sloučí operací XOR všechny bajty rámce kromě posledního a výsledek připojí na konec. Příjemce udělá totéž, jenže i s tím posledním: vyjde-li nula, rámec je v pořádku. Přesně takhle je to zapsané ve funkcích IBusSendCommandInternalIBusValidateChecksum v souboru ibus.c.

Žádný polynom, žádná složitější ochrana. Jedno přehozené bitové místo se pozná, dvě už nemusí. Rámec navíc jistí sudá parita, kterou počítá samo sériové rozhraní.

9 600 bitů za sekundu a osm milisekund ticha

Přenos běží na 9 600 Bd se sudou paritou, jak si ho firmware nastavuje ve funkci IBusInit. Při jedenácti bitech na bajt je to necelý kilobajt za sekundu. Po téhle sběrnici tedy jezdí povely a krátké texty, nic objemnějšího.

Zajímavější je časování. Než modul začne vysílat, počká, až bude linka chvíli ticho. Konstanta IBUS_TX_FRAME_IDLE_WAIT je 8 milisekund a autor si k ní poznamenal, proč zrovna tolik: kdyby modul začal dřív, navigační grafická jednotka MK III ve verzi 20 začne rámce ztrácet. Rozepsaný rámec, do kterého 71 milisekund nic nepřibude, firmware zahodí a čeká na další.

Po odeslání modul poslouchá, jestli uslyší vlastní bajty. Když se vrátí, označí si rámec v ladicím výpisu jako [SELF]. Když se nevrátí do deseti period rámce, pošle ho znovu, nejvýš třikrát. Tenhle detail je zároveň nejnázornějším důkazem, jak sběrnice funguje: kdo na ni mluví, slyší sám sebe, protože ji sdílí se všemi ostatními.

Co se z toho dá vyčíst

Poslech je pasivní a levný. Z provozu na sběrnici se dá odečíst rychlost, otáčky, teplota chladicí kapaliny i venkovního vzduchu, stav dveří a oken, poloha klíče v zapalování nebo hodnoty palubního počítače. Všechno tohle má node-bmw-client vypsané ve svém webovém rozhraní. BlueBus zase podle provozu sleduje, které moduly ve voze vůbec jsou: kdo se ozývá, ten tam je.

Zápis je jiná věc. Vysílat umí oba projekty a z posluchače se tím stává účastník. Modul, který se rádiu ohlásí jako měnič CD, hraje hudbu. Modul, který si spletl bajt, umí zamknout dveře.

Zdroje

Dál k tématu

  1. E60/E61 Elektronika a sběrnice

    Head-up displej v BMW E60 potřebuje vlastní čelní sklo, jinak se obraz zdvojí

    Rychlost visící nad kapotou byla u BMW řady E60 zvláštní výbava S610A. Kdo ji má, nemůže po prasklém skle objednat kterékoli čelní sklo té pětky: head-up displej si žádá kus s…

  2. E34/E32 Elektronika a sběrnice

    Volant BMW E34 odjíždí při vystupování nahoru jen s elektrickým nastavením výšky

    Elektricky nastavitelný sloupek řízení byl u BMW E34 výbava na přání a katalog dílů ho vede ve dvou podobách: s jedním pohonem na délku, nebo se dvěma na délku i výšku.…

  3. E34/E32 Elektronika a sběrnice

    Snímač opotřebení brzdových destiček má BMW E34 jen jeden na každé nápravě

    Katalog náhradních dílů vede u BMW E34 snímač opotřebení brzdových destiček po jednom kuse vpředu a jednom vzadu, ne u každého kola. Totéž číslo dostalo pět řad BMW od poloviny…

  4. E34/E39 Elektronika a sběrnice

    Zadní stěrač kombi BMW E34 dostává pohyb od motoru přes táhlo a lano

    Zadní stěrač má z řady E34 jen karoserie Touring a katalog náhradních dílů mu dává vlastní skupinu s třiadvaceti položkami. Motor v ní sedí na konzoli stranou a mezi ním a hřídelí…