Přeskočit na obsah
Obor starší BMW
List Článek
Datum 31. 7. 2026

BMW Elektronika a sběrnice aktualizováno 31. 7. 2026 4 min čtení

I-BUS a K-BUS v BMW E39: jak vypadá zpráva a proč je bránou mezi nimi přístrojovka

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: zdrojový kód projektu node-bmw-client (soubor lib/bus-data.js) a knihovny node-bmw-share (bus-modules.js), firmware BlueBus (firmware/application/lib/ibus.hibus.c), oboje ve větvi master ke 31. červenci 2026. Licence a data vzniku obou repozitářů jsou z rozhraní GitHubu, roky výroby E39 z anglické Wikipedie. Kontrolní součet v ukázce rámce jsme dopočítali sami podle pravidla z ibus.c.

Zdroje

Dál k tématu

  1. BMW Elektronika a sběrnice

    Chip do řídicí jednotky M60 je výměna paměti. Návod ukazuje, kde se to zadře

    Osmiválec M60 se ladí výměnou paměti v řídicí jednotce motoru: jednotka musí ven z vozu a rozebrat se až na desku. Britský návod vede celým rozebráním jednotky a u dvou míst říká,…

  2. BMW Ostatní modely

    Ve spínači klíčku BMW E38 jsou čtyři přepínače. Jeden vadný kontakt shodí i tempomat

    Otevřením zrcátka ve sluneční cloně zhasne rádio, druhý den nejde tempomat a brzdová světla svítí trvale. Za takovou sadou příznaků u BMW E38 stojí podle britské stránky meeknet…

  3. BMW Dílna

    Osmiválec M60 jede na sedm válců. Příčinou může být tranzistor uvnitř jednotky DME

    Když u osmiválce M60 přestane pracovat jeden válec, mlčí na něm i vstřikovač. Není to druhá závada, ale pojistka řídicí jednotky. Skutečná příčina může ležet uvnitř té jednotky,…

  4. BMW Motory a převodovky

    Nouzový režim automatu nebývá konec převodovky, ale spínač nebo slabá baterie

    Hlášení o poruše programu převodovky vypadá na drahou opravu, jenže mechanika automatů ZF z devadesátých let bývá v pořádku. Nejčastěji za tím stojí zanesený spínač polohy voliče…