BMW Data Link Interface Project

DS2 Commands

The Basics
Hardware Theory
Hardware Practice
DS2 Protocol
ECU Addresses
DS2 Commands
ECU Responses
Fault Codes
BMW Scan-O-Matic
Here are the DS2 commands I know of.  Those that I've actually used are in bold.  Note that all numbers are hex.
00 -- ECU Identification -- This command requests the computer to return a string of information about itself.  Example: "12 04 00 16" tells the Motronic computer (address = 12) to send information about itself.  (The "04" means four bytes in the message, and "16" is the checksum.)
The information returned varies among the different computers, but in many cases the first seven digits that the computer returns (after the headers) is a partial BMW part number for that computer.  In the case of the Motronic ECU, the data returned must be converted from hex to ASCII to be read.
04 01 -- Check fault codes -- This command causes the computer to return a string containing the number of fault codes, followed by the numbers of the codes.  Example: "12 05 04 01 12" tells the Motronic ECU to send any fault codes.
04 nn -- Check specific fault code -- Once you have the number, you can get more information about one specific fault by using its number.
05 -- Clear trouble codes -- Once the problem has been corrected, codes can be cleared with this command.  Example: 12 04 05 [cs]
9F = diagnostic end
9E = diagnostic mode enable and wait tester
53 = read supplier ID
0B = read car coded data, read IO-status
09 = write car coded data
31 = test program download
32 = test program start
(Cheers to members of the opendiag list for these last few.  As yet unconfirmed on my car.)

This site is not affiliated with BMW in any way.  As if you couldn't tell.