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 |
Length |
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):
Interfacing
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
Melexis TH3122 K-Bus Transceiver with integrated Voltage Regulator
Motorola MC33290 K-Line Serial Link Interface
Motorola MC33199 Automotive ISO 9141 Serial Link Driver
Atmel U6812B Single-Ended Bus Transceiver
ON Semi NCV7310 Single Wire LIN Transceiver
Philips TJA1020 LIN transceiver
Infineon TLE 6258 Single-Wire-Transceiver
RS-232 Driver/Receivers
Maxim MAX232A +5V Powered, Multichannel RS-232 Driver/Receiver
1 Comments:
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
Post a Comment
Subscribe to Post Comments [Atom]
<< Home