Ok, so I scoured the internet a few weeks back and could not find anything about the KCAN bus on the E9x. This bus is essentially the successor to the KBUS used in early models like the E46. Its primarily used for communication between the systems in the BMWs E9x cabin area. Examples include the windows, interior lighting, radio/idrive display, etc.. Attached below are figures of the all of the bus systems including KCAN on the E90, a list of all the modules and some data about the bit rates.
This is a work in progress, so I will be updating this post as
we discover more. I will try to keep a log of all the changes in the revision
history. The primary objective of this post is to list the commands to interface and/or control the components in the cabin.
KCAN is based on CANbus 2.0A (11 bit identifier) with a bit rate of 100 kbits/sec.
Some helpful links on CAN:
http://www.aa1car.com/library/can_systems.htm
http://www.mjschofield.com
http://www.interfacebus.com/Design_Connector_CAN.html
Revision Notes
1.000:: 10/9/08 First submission.
1.001:: 10/10/08 Formatting, Added info on light ON/OFF sequence
1.002:: 02/17/08 Window Data update
//////////////////////////////////////////////////////////////////////
Now, the functions so far:
xx = Don't Care nibble/byte value
=====================================
Cabin Lights
Confirmed Vehicle list: E90 335
-------------------
ON/OFF Sequence:
Code:
CANID LEN DATA Notes:
1E3 2 F1 FF Command, wait for response
21A 3 00 10 F7 Response
1E3 2 F0 FF Command
You have to wait to recv the rsp before issuing the 2nd cmd otherwise the light will force itself back off after ~1 second.
To give you an idea what is going on, the F1 FF msg are usually generated continously as you hold down (in) the button. When
you release the button the F0 FF msg is generated. The 21A response from the vehicle usually comes within 50 milliseconds. This is usually significantly faster than you could press and release the button. I believe this method is BMWs way of preventing an accidental activation of the lights if there is a quick/momentary button press (e.g weak return spring on the button) or perhaps their way to deal with debounce.
OFF Sequence (Alt):
Code:
CANID LEN DATA Notes:
1E3 2 F1 FF If you simply issue this command without
sending any other 1E3 command the lights
will default to an OFF state
=====================================
Windows
Confirmed Vehicle list: E90 335
The window controls on the sedan each have their own CANID. All buttons from the drivers side control use the same CANID. The passenger side front control has its own. The rear windows share the same CANID. Some commands only result in an incremental movement (approx 2 - 3 in).
The windows controls are not directly linked to the KCAN. The interior buttons are on a seperate bus, LINbus. When you press the button, a message is sent over this bus to the FRM. The FRM serves as a gateway and
pushes this request over KCAN to the window motor or JBE (not clear on this yet).
WINDOW BUTTON ---over LINbus --> FRM -- over CANbus---> WINDOW MOTOR
---------------
Cmds as issued From Front Driver (4 buttons):
WIN - Window:
FD - Front Driver
FP - Front Passenger
RD - Rear Driver
RP - Rear Passenger
DIR - Direction
Code:
WIN DIR CANID LEN DATA Notes:
FD UP 0FA 3 ?? (04 xx xx issued by button)
FP UP 0FA 3 ??
RD UP 0FA 3 xx 04 xx Incremental movement
RP UP 0FA 3 xx 20 xx Incremental movement
FD DN 0FA 3 ?? (01 xx xx issued by button)
FP DN 0FA 3 ?? (10 xx xx issed by button)
RD DN 0FA 3 xx 01 xx Incremental movement
RP DN 0FA 3 xx 10 xx Incremental movement
General Notes:
You can combine the nibbles in the RD and RP to do both at the same time.
Ex:
Code:
WIN DIR CANID LEN DATA Notes:
RP&RD UP 0FA 3 xx 24 xx
RP&RD DN 0FA 3 xx 11 xx
Each window will return a response to a command. They are listed as follows:
Code:
WIN CANID LEN DATA Notes:
FD 3B6 3 pp pp F0 pp pp - position,
FP 3B7 3 pp pp F0 Range {00FC (fullup) - 58FE (fulldn)}
RD 3B8 3 pp pp F0 I am not sure what F0 is about.
RP 3B9 3 pp pp F0 It may be used as a general state/fault/diagnostic byte.
I believe the the last byte is a diagnostic byte used to determine the motor temperature. I will have to test to verify. Here is an excerpt on the thermal protection:
"Thermal Protection of Power Window Motors
The FRM and the JBE monitor the power window motor temperature. The motor temperature
is determined based on the outside temperature, motor running time and the
time the motor is stationary (not operative).
Each motor can be switched off individually to prevent the power window motors overheating
during operation of the power windows (window regulators). The motor is then
deactivated for a defined period of time."
Cmds as issued From Front Passenger:
Code:
WIN DIR CANID LEN DATA Notes:
FD UP 0FB 3 2x xx xx Full Up
FD DN 0FB 3 1x xx xx Full Down
======================================
Ok so thats what Ive got so far. Hopefully more wil chime in and start expermenting to refine/add to the list.