From the Bimmer Forum
https://www.bimmerforums.com/forum/show ... us-project
Here is a link to the Analog to Can solution
http://forums.bimmerforums.com/forum...4#post26219044
Here's a link to the OBDII to Can solution
http://forums.bimmerforums.com/forum...4#post26219044
Summary of ID's and data for E46 [edit added this section to keep things together]
The can bus is 500kb/s
In the data for each ID there are 8 bytes. Labeled Byte 0,1,2,3,4,5,6,7
ARBID: 0x153 (ASC1)
-B0
-B1 Speed LSB
-B2 Speed MSB [Signal startbit: 12, Bit length: 12, 0x0008 = 1 km/hr]
-B3
-B4
-B5
-B6
-B7
ARBID: 0x316 (DME1)
-B0
-B1
-B2 RPM LSB
-B3 RPM MSB [RPM=(hex2dec("byte3"&"byte2"))/6.4]
-B4
-B5
-B6
-B7
ARBID: 0x329 (DME2)
-B0
-B1 is Temp [Temp in C = .75 * hex2dec(byte01) - 48.373]
-B2
-B3
(bit0 == LSb)
bit 7 Cruise 1/0
bit 6 Cruise -
bit 5 Cruise +
bit 6&5 Cruise Resume
-B4
-B5 Throttle position (00-FE).
-B6 kickdown switch depressed is value (4) Brake pedal depressed is value (1).
-B7
ARBID: 0x338 (DME3?), Only MS45 (and presumably MSV80)
-B0
-B1
-B2
0 = Sport on (request by SMG transmission)
1 = Sport off
2 = Sport on
3 = Sport error
ARBID: 0x545 (DME4),
combinations work to get multiple lights
-B0 Check engine light (binary 10), Cruise light (binary 1000), EML (binary 10000), Check gas cap 2002+ cars (hex 40).
-B1 Fuel consumption LSB
-B2 Fuel consumption MSB. Values just cycle from 0 to FFFF then start over at zero. Fuel consumiption is the rate of change.
-B3 Overheat light (binary 1000, Hex 08), oil level 2002+ cars, (binary 0010, hex 02), On M3's 0x10 7K and Up RPM lights, 0x20 6.5K and up RPM lights, 0x40 5.5K and up RPM lights.
-B4 Oil Temp [Temp in C = hex2dec(byte04) - 48.373]
-B5 Charge light, 2002+ cars (Binary 0001)
-B6
-B7
ARBID: 0x610 also sent from the instrument cluster if a 0x610 "remote frame" is recieved. Appears the remote frame is sent by the ABS
This data contains the last 7 digits of the vin number in the ECU.
-B0 as is but drop the last zero and it is the last number in the vin
-B1 as is (in hex) the 3rd and 2nd number from the end in the vin
-B2 as is (in hex) the 5th and 4th number from the end in the vin
-B3 in ASCII the 6th from the end in the vin
-B4 in ASCII the 7th from the end in the vin
-B5 0
-B6 0
-B7 0
Example B4 = 4B (or K in ASCII) B3 = 43 (or C in ASCII) B2 = 71, B1 = 80, B0 = 90. Vin = KC17809
ARBID: 0x613 also sent from the instrument cluster if 0x615 is acknowleged.
-B0 Odometer LSB
-B1 Odometer MSB [Convert from Hex to Decimal. Multiply by 10 and that is Odometer in Km]
-B2 is fuel level. Full being hex 39 Fuel light comes on at hex 8. Then values jump to hex 87 (or so) and then go down to hex 80 being empty.
-B3 Running Clock LSB
-B4 Running Clock MSB minutes since last time battery power was lost.
-B5
-B6
-B7
ARBID: 0x615 sent from the instrument cluster.
-B0 AC signal. Hex 80 when on (10000000) Other bits say something else (Load, Aux fan speed request? system pressure?)
-B1
-B2
-B3 Outside Air Temperature: x being temperature in Deg C, (x>=0 deg C,DEC2HEX(x),DEC2HEX(-x)+128) x range min -40 C max 50 C
ARBID: 0x1F0 (ABS)
Individual wheel speeds:
Signal wheel 1: startbit 0, bit length 12, Intel LSB, unsigned, gain 1/16 (0.0625) (byte0 + next 4 bits of Byte1)
Signal wheel 2: startbit 16, bit length 12, Intel LSB, unsigned, gain 1/16 (0.0625) (byte2 + next 4 bits of byte3)
Signal wheel 3: startbit 32, bit length 12, Intel LSB, unsigned, gain 1/16 (0.0625)
Signal wheel 4: startbit 48, bit length 12, Intel LSB, unsigned, gain 1/16 (0.0625)
The above translated to .xls syntax. (corrected)
Wheel speed 1: (HEX2DEC(B0)+HEX2DEC(RIGHT(B1;1))*256)/16 = Kph
Wheel speed 2: (HEX2DEC(B2)+HEX2DEC(RIGHT(B3;1))*256)/16 = Kph
Wheel speed 3: (HEX2DEC(B4)+HEX2DEC(RIGHT(B5;1))*256)/16 = Kph
Wheel speed 4: (HEX2DEC(B6)+HEX2DEC(RIGHT(B7;1))*256)/16 = Kph
(multiply by .621 to get MPH)
ARBID: 0x1F5 (steering Angle Sensor)
Angle:
angle startbit: 0, length: 15 bit order and type: Intel LSB, unsigned, gain: 0.045
angle sign bit: bit 15
Velocity:
velocity startbit: 16, length: 15 bit order and type: Intel LSB, unsigned, gain?: 0.045
velocity sign bit: bit 31
ARBID: 0x1F8
-B2, Brake Pressure.