Tuesday, January 13, 2009

Mirror of http://www.openbmw.org/bus

I-Bus Protocol

CREDITS: The I-Bus was originally reverse-engineered by Thomas L. Wood for the MPorty/Cajun MP3 Project. This was his original write-up of it. Richard Naninck performed additional research and wrote the first general-purpose I-Bus message decoder for intercepting Video Module messages. Ed Anuff identified the I-Bus as being based on the ISO 9141/K-Bus protocol and documented the semiconductor manufacturers who supply devices supporting it.

Since then, a Yahoo! Group has formed to discuss the technical details of the I-Bus, appropriately named HackTheIBus. Along with the OpenBMW Yahoo! Group, this represents a valuable forum for discussing issues related to I-Bus interfacing and members of both groups regularly post useful information.

IMPORTANT: This information is provided for reference purposes only. Use this information at your own risk.

BMW's I-Bus is based on ISO 9141 and K-Bus (The protocols used by OBD-II). It is basically a second K-Bus in the car for handling interfacing between the radio, CD, navigation, and telephone systems. In particular, the steering wheel controls for the radio, CD, and phone utilize the I-Bus.

The I-Bus is a single wire bus that is a white/red/yellow wire which is available at a number of different connectors inside the car such as at the CD changer connector in the rear, the phone connector in the center console, etc.

The bus' physical layer is an open collector setup pulled high (+12v) by the bus, and pulled low by the talker. This means that the idle voltage on the wire is +12v (the battery voltage, or Vbatt). This is somewhat similar to RS232 signalling, and like RS232, an interface IC is needed to turn this into a TTL digital signal that can be understood by a microcontroller. Later in this document, several off-the-shelf parts will be listed that can be used to easily drive this sort of signal.

Serial communications on the bus are 9600 bps, 8 data bits, Even parity, 1 stop bit.

An I-Bus packet contains the following bytes of data:

Source Address
Destination Address
Data Bytes
XOR Checksum

Unlike most similar single wire network protocols, the I-Bus has no apparent way to identify the start of a packet, so this must accomplished in software by looking for a delay between messages.

The following device addresses have been decoded for the E39 5-series:

0x00 Broadcast
0x18 CDC CD-Player
0x3B NAV Navigation/Videomodule
0x43 MenuScreen
0x50 MFL Multi Functional Steering Wheel Buttons
0x60 PDC Park Distance Control
0x68 RAD Radio
0x6A DSP Digital Sound Processor
0x80 IKE Instrument Control Electronics
0xBF LCM Light Control Module
0xC0 MID Multi-Information Display Buttons
0xC8 TEL Telephone
0xD0 Navigation Location
0xE7 OBC TextBar
0xED Lights, Wipers, Seat Memory
0xF0 BMB Board Monitor Buttons
0xFF Broadcast

A packet containing the following bytes would display "CD 7-04" on the Radio MID Display:

      68 17 ff 23 c0 30 07 20 20 20 20 20 08 43 44 20 37 2d 30 34 20 20 20 20 45
S L D Data 'C''D'' ''7''-''0''4' C
r e s h
c n t k

A full set of button codes is available here.

Below is an example of a track title displayed on an E39 MID Radio Display from an in-car MP3 player (Courtesy of Thomas L. Wood):


Typical projects as well as general experimentation call for some form of I-Bus to RS232 interface so that I-Bus packets can be captured and displayed on a laptop or other device in order to be decoded. Because the I-Bus uses the physical layer of the ISO9141/K-Bus, it is fairly easy to build a connector from off-the-shelf IC parts or to even potentially take an existing OBD-2/RS232 adapter and connect the K-Line from it to the I-Bus.

If building an adapter from scratch, utilizing an off-the-shelf K-Bus interface/transceivers should save a lot of effort. The advantage of a design using a K-Bus interface chip of some sort is that most of these chips deal with a number of issues such as bus contention and not overloading the bus that make them a safer choice. There are a number of good choices for this, which are listed with links to their manufacturers below. Another option is to attempt to use a tranceiver that is compatible with the LIN (Local Interconnect Network), which is also based on ISO9141 but runs at a faster speed. Any of the listed interface/transceivers should couple very nicely with a Maxim MAX232, which handles can drive standard RS232 communications to a laptop or small embeddable computer such as the Advantech PCM-5820. While it is possible to interface to the I-Bus without a K-Bus tranceiver IC, BMW's own products, like the Video Module, use K-Bus chips from companies such as ELMOS. Melexis is a popular choice for obtaining these types of interfaces since they have a web store that sells single unit quantities. Many hobbyists, however, prefer to use interfaces built using transistor circuits and have had success in doing so.

Depending on the application, for example building an adaptor to control a hands-free phone kit, connecting to a full PC would not make sense and instead some sort of low-cost microcontroller would be used. The CD-Changer adapters from companies like BlitzSafe and others are examples of this. Hopefully, this information will spur hobbyists to create an assortment of interface kits for controlling a number of different in-car electronics.

Useful Parts For Building Adapters

K-Bus/I-Bus Interface/Transceivers

Melexis TH8080 LIN/K-Bus Transceiver Datasheet

Melexis TH3122 K-Bus Transceiver with integrated Voltage Regulator Datasheet

ELMOS K-Bus transceiver Datasheet

Motorola MC33290 K-Line Serial Link Interface Datasheet

Motorola MC33199 Automotive ISO 9141 Serial Link Driver Datasheet

Atmel U6812B Single-Ended Bus Transceiver Datasheet

ON Semi NCV7310 Single Wire LIN Transceiver Datasheet

Philips TJA1020 LIN transceiver Datasheet

Infineon TLE 6258 Single-Wire-Transceiver Datasheet

RS-232 Driver/Receivers

Maxim MAX232A +5V Powered, Multichannel RS-232 Driver/Receiver Datasheet


Blogger Thaniel said...

Great information. Thank you for posting.
Most of the transievers mentioned are out of production. But I found the MCP2025 linbus chip to work quite well. Wiring diagram and some other interface options are shown here. http://e46canbus.blogspot.com/2014/03/ikbus-interface-options-for-arduino.html

January 29, 2016 at 9:52 PM  

Post a Comment

Subscribe to Post Comments [Atom]

<< Home