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 IBusSendCommandInternal a IBusValidateChecksum 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. E34/E60 Elektronika a sběrnice

    Při učení dorazů musí zadní okno BMW E60 zůstat dole sedmnáct sekund

    Přední okna pětky BMW E60 řídí moduly ve dveřích, zadní základní modul karoserie KBM a polohu skla obě strany poznají podle dvou Hallových čidel v motoru. Přední okno se učí jen…

  2. E60 Elektronika a sběrnice

    Elektronika airbagů hlídá v BMW E60 i kabel, který vede od baterie pod podlahou

    Kabel od baterie v kufru vede u BMW E60 po spodku vozu a obaluje ho měděný oplet, na kterém měří napětí dva satelity airbagového systému. Když se oplet zkratuje, nebo když vůz…

  3. E39/E38 Elektronika a sběrnice

    Čerpadlo u hlavního brzdového válce BMW E39 s DSC běží, jen když systém sám brzdí kola

    Pětka E39 se stabilizací DSC III má vedle hlavního brzdového válce elektrické čerpadlo, které při běžném brzdění ani při zásahu ABS neběží. Zapne se, až když systém sám přibrzďuje…

  4. E90/E70 Elektronika a sběrnice

    BMW pozná u amerického M57 odpojenou hadici odvětrání přes obvod jejího ohřevu

    Americký M57 v BMW 335d a X5 xDrive35d pro modelový rok 2009 má vyhřívané odvětrání klikové skříně. Kontakt v obvodu ohřevu se spojí až při správném připojení hadice k víku hlavy;…