OK – this took a lot of head scratching, re-do’s and f-bombs, but it’s done and it's working. Now I can get to my other projects LOL.
Here is my attempt at the DIY for all the others out there finding the same dead-ends on the internet.
And – this was completely done using USED parts, including modules.
As with all DIYs, I take no responsibility for any damage or other consequences you incur by following this - it is for information only. For what it is worth, I also decided to have fun and swapped in/coded these other features from a donor car: heated seats front and rear, heated steering wheel, top view cameras, electronic wastegate turbo. Also did a timing chain change and walnut shell blasted the intake valves. And this isn't even my own car.
Items needed:
1. LCI headlights with TMS (internal controller card) and LHM (larger LED module with heat sink) modules. There is one TMS and one LHM module per headlight. There is also another module for turn signal that is not coded, but needs to be installed on the headlight.
2. Make sure your FRM3 is of relatively late vintage. You can always try one after 2013 or so and see if it works (will likely need to be flashed to later software). Anything with a date on it after the LCI change-over is a better bet (but why spend the money when you can try the one that is in the car – provided you are able to flash it correctly). I got my hands on a 2015 FRM3 from a 535i which didn’t require flashing – I just VO Coded it and injected the CAFD to write the car’s VIN and be able to access it via E-Sys (see step 16 below to get an idea how to do this or search around on how to inject a CAFD and code a used module). This way, if anything got messed up, I could re-install my original FRM3 and be fine.
3. Gateway module – I tested a few variations of these and found that the newer 4SK and 8SK units I tried have a KCAN3 bus available. These newer gateway modules (ZGW) do not have a MOST connector. If your car has a newer entertainment head unit (NBT), you do not have MOST (starting in the 2014 model year). If you have an older CIC unit that uses MOST, I found that later model year “ZGW-High” modules also have KCAN3 at the same terminals (not sure at what year the hardware started to support this function) in addition to a MOST connector. I also noticed something interesting in ISTA/D. When I changed the build date to an LCI date (8/2015), the control module tree diagram shows a separate KCAN3 bus from the ZGW. When I resort to the earlier build date of the car (3/2014), the TMS and LHM modules actually show up on the KCAN2 bus. I wonder if this means that the KCAN3 bus is really just another port of the KCAN2 bus and perhaps these new modules could be connected directly to the KCAN2 bus on an older car. Can’t see the harm in trying as it can be reversed. I’ll leave that to someone else to weigh in. I went with the 4SK already in my car and it is working fine.
4. KCAN bus wire and LIN bus wire. KCAN3 wiring is a twisted pair wire like all CAN bus wiring. You should not just run two separate wires or the capacitance of the line will degrade the signal. What I did was to purchase one spool of Garmin J1939 Cable - 10m long on EBay. This cable contains a CAN bus spec twisted pair for KCAN use and two separate other conductors, one of which I used for the LIN wire. There is enough for both headlights and it is sturdy stuff (I believe for marine use) but the twisted pair wires are a little flimsy.
5. Power wiring - #10 AWG wire for main unit power and #14 for TMS power. You can use other gauge automotive wire (with higher insulation temperature rating) as long as it is capable of 30 amps.
6. Suggested – new headlight plugs with pins (part # 61132359991). These are surprisingly pricy for what they are. You can re-use the existing plugs as they are the same for all X3 headlights pre and post LCI; only the pins need to be moved around. You will need new pins for the added LIN and KCAN bus wiring, so plan to buy at least one of these kits for the pins if you can’t find them separately.
7. Terminals for insertion into fuse box. You will also be making a connection to the rear fusebox for power to the headlights. I used position 190. I had a spare terminal to use in this position but I believe (someone to confirm) the part number for a new one would be 61130007440. I also have a Porsche and I can confirm that VW/Audi/Porsche also use the same terminal type in their fuse and relay boxes if it helps to have a wider search for sourcing these.
8. An in-line fuse holder to tap off of your new main power to provide power to the TMS units.
Here is the procedure:
1. Disconnect headlights
2. Disconnect negative battery terminal
Prepare Power Supply to Headlights
3. Run power from new 30A fuse in rear terminal box position 190 (assuming you do not have anything in that position already). Run at least a #10 AWG wire along passenger side to under dash area. At the rear fuse box, tap your new #10 AWG wire with a fuse-holder (fused at 10A) to a new #14 AWG minimum wire and run that alongside your #10 AWG wire to the passenger side under dash. The #10 AWG (or whatever you choose) will supply the headlight LHM units and the #14 AWG (or whatever you choose) will feed the headlight TMS units.
4. Split the LHM wire to two same size LHM wires. One will run behind carpet over to driver side under dash and then through firewall to driver headlight. The other will run through firewall on passenger side to passenger side headlight. Repeat the same for the TMS wire.
5. Before you run these wires through the firewall, you will need to prep the LIN bus and KCAN3 wires to run along with them (all as a single bundle to each light).
LIN Bus Wiring to Headlights
6. The LIN bus wires come from the FRM module. If you have adaptive headlights, these already run to the headlights for all F25 years. If not, you will need to add pins to position 24 and 25 on connector A58*2B on the FRM module. Pin 25 goes to the left headlight and pin 24 to the right headlight.
https://www.newtis.info/tisv2/a/en/f...i-sav/EXAg93PF
https://www.newtis.info/tisv2/a/en/f...eft/1VnXsKwza9
KCAN3 Wiring to the Headlights
7. As stated under supplies above, the KCAN wire will be a twisted pair. Insert two new pins into the ZGW module at positions 10 and 28 in connector A51*1B. Position 10 is for KCAN3 high and position 28 is for KCAN3 low. You will note in the wiring diagram that the LCI cars had a terminating resistor installed on the KCAN3 bus. I directly wired the ZGW KCAN3 high to the two headlights and the low the same. At the headlights, I branched the wires again to both the LHM and TMS pins. No resistors and everything still worked fine. Just split at the ZGW to left and right side and split again at each headlight to LHM and TMS. Solder the connections. I soldered on sturdier pigtails at the headlights and at the ZGW end as the Garmin twisted pair cable was very light weight and not easy to work with.
https://www.newtis.info/tisv2/a/en/f...tor/1VnXxWduI7
https://www.newtis.info/tisv2/a/en/f...i-sav/CTBsPcHp
https://www.newtis.info/tisv2/a/en/f...i-sav/EX3BCDIR
Running Wires through the Firewall
8. There are two rubber bushings on the firewall where existing wiring bundles penetrate the firewall. In these rubber boots, there are 2 smaller indents that you can drill through to run new wires. NOTE: if you drill these larger than the wires, water WILL trickle into the car when it rains. That’s not terrible, just remember to use RTV silicone or the like to seal the openings. Tighter is better on these openings if possible.
9. Bundle the power wires and the combination KCAN/LIN wire in a taped bundle and pull to each headlight.
Prepare connectors at each headlight.
10. There are only two wires from the existing headlight that will be re-used: the turn signal and the main ground.
Pinout:
NEW
1-Turn Signal (move from old plug pin 1 – BL/GN or BL/BR)
2-Ground:Main (move from old plug pin 2 – BR)
3-Main LHM power (new larger power wire – the #10 you ran from the rear fuse box)
4-no connection
5-TMS power (new smaller power wire – the #14 you ran from the rear fuse box)
6-no connection
7-Ground:Smaller (run a new #14 ground to body ground near headlight)
8-LIN bus (new LIN bus wire you ran from FRM)
9-KCAN3 High for TMS (these four pins 9-12 are from your new KCAN pairs from ZGW)
10-KCAN3 Low for TMS
11-KCAN3 High for LHM
12-KCAN3 Low for LHM
11. DO NOT CONNECT THESE CONNECTORS TO YOUR OLD OR YOUR NEW HEADLIGHTS UNTIL YOU CODE THE CAR.
Coding:
12. I changed build date and VO coded my car with option 552. This worked but disabled the brake lights. I did a CAFD comparison between the original and VO 552 coded FRM and noticed some lines that changed the brake lights and undid those (I note those below). All worked. I then decided to not mess with the build date of the car and simply code the CAFD of the FRM with the individual changes (instead of a VO code) and it worked as well (all the while preserving the original build date). Here are the CAFD changes needed to code in the LED headlights without changing build date to a LCI date and without needing to VO code the FRM module:
The coding changes below follow this format:
Parameter; Halogens(old value); LEDs(new value)
ASP_NICHT_BEIKLAPPEN_BEI_BLINKEN; nicht_aktiv [00]; aktiv_LCI [01]
AUSG_02_2_SL_L_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_02_2_SL_L_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_03_2_SL_R_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_03_2_SL_R_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_04_POL_L_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_04_POL_L_OPENLOAD; wert_01 [2B]; wert_02 [1C]
AUSG_04_POL_L_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_05_POL_R_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_05_POL_R_OPENLOAD; wert_01 [2B]; wert_02 [1C]
AUSG_05_POL_R_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_06_AL_L_EINSCHALTSTROMREDUZIERUNG_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_06_AL_L_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_06_AL_L_VORGLUEHEN_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_06_AL_L_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_07_AL_R_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_07_AL_R_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_09_FL_L_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_09_FL_L_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_10_FL_R_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_10_FL_R_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_11_NSW_L_IS_LED; nicht_aktiv [00]; aktiv [01]
AUSG_11_NSW_L_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv_vor_lci
AUSG_11_NSW_L_OPENLOAD; wert_01 [1E]; wert_02 [00]
AUSG_11_NSW_L_PART_OPENLOAD; wert_01 [7F]; wert_02 [00]
AUSG_11_NSW_L_VORGLUEHEN_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_11_NSW_L_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv_vor_lci
AUSG_12_NSW_R_IS_LED; nicht_aktiv [00]; aktiv [01]
AUSG_12_NSW_R_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv_vor_lci
AUSG_12_NSW_R_OPENLOAD; wert_01 [1E]; wert_02 [00]
AUSG_12_NSW_R_PART_OPENLOAD; wert_01 [7F]; wert_02 [00]
AUSG_12_NSW_R_VORGLUEHEN_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_12_NSW_R_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv_vor_lci
AUSG_22_FRA_VL_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_22_FRA_VL_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_23_FRA_VR_KALT_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
AUSG_23_FRA_VR_WARM_UEBERW_AKTIV; aktiv [01]; nicht_aktiv [00]
CS_AMB_MAX_OFFSET; wert_01 [30]; wert_02 [50]
CS_TYPE; nicht_aktiv [00]; mit_switch [02]
C_AFS_ENA; F001_disable; F001_enable
C_BLC_ENA; F001_disable; F001_enable
C_BLC_HOR_VEL_MIN; F001_F07/7er_AHL; F025_nach_1408 [32]
C_CLC_ENA; F001_disable; F001_enable
C_FLC_ENA; F001_disable; F001_enable
C_FLC_RED_DYN_AC_THRES; F001RR4_normal; F001Codierwert F07/RR5/RR6
C_FLC_THETA_TYRE_FRONT; F010_Reifenfaktor_VA_F06Serie_AltFzg; F025_F25_LCI [6A]
C_FLC_THETA_TYRE_REAR; F001_Reifenfaktor_HA_F07; F010_Reifenfaktor_HA_F12Serie/F13Serie_AltFzg
C_HBA_ADAPT_SHUT_ENA; F001_disable; F001_enable
C_HBA_GRHB_ENA; F001_7er/RR__F07_RL/AltFzg/AHL; F001_F07_LCI_LED_LL
C_HBA_HOR_OFF_VEL_HI; F001_Xenon; F025_nach_1408 [50]
C_HBA_HOR_OLAP_L; F025_Xenon_LL [FF]; F010_F06/F12/F13
C_HBA_HOR_OLAP_R; F025_Xenon_LL [10]; F010_F06/F12/F13
C_LA_HOR_VEL_MAX; F001_RR_Xenon; F025_LED_ab_1408 [BE]
DRL_MODUS; drl_h [01]; drl_s_ohne_sl [06]
DUAL_SPG_AKTIV_AL; aktiv [01]; nicht_aktiv [00]
DUAL_SPG_AKTIV_BFD; aktiv [01]; nicht_aktiv [00]
DWA_ALARM_30B; nicht_aktiv [00]; aktiv [01]
DWA_AUSGANG; fernlicht [01]; tagfahrlicht [02]
FAS_INSZENIERUNG; nicht_aktiv [00]; sarah_vollkonzept [03]
FAS_RED_ACTIVE; aktiv [01]; nicht_aktiv [00]
FLA_BEL_POS; stufe_A_und_II [00]; stufe_A [01]
FLE_TYPE; ohne FLE [00]; mit FLE [01]
FRM_AUSSENLICHT_PARAMETER_40_40_3; aktiv [01]; nicht_aktiv [00]
HELLIGKEIT_DRL; wert_05__51% [33]; wert_01__100% [64]
IGR_ABBIEGELICHT_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_BLINKER_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_FAHRLICHT_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_FERNLICHT_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_LICHTHUPE_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_NEBELSCHEINWERFER_RELEVANT; aktiv [01]; nicht_aktiv [00]
IGR_WARNBLINKEN_RELEVANT; aktiv [01]; nicht_aktiv [00]
LAMP_MAP_PARA_SATZ_01; BV_F010_wert_01_Halogen; BV_F025_wert_02__Cornerlight_ueber_NSW [07 0E 12 64]
LAMP_MAP_PARA_SATZ_02; BV_F010_wert_01_Halogen; BV_F025_wert_02__Cornerlight_ueber_NSW [08 01 12 64]
LAMP_MAP_PARA_SATZ_03; BV_F025_wert_01__FRAZgedimmt _als_Sidemarker [15 16 FC 64]; BV_F001_wert_99
LAMP_MAP_PARA_SATZ_04; BV_F025_wert_01__FRAZgedimmt _als_Sidemarker [16 1C FC 64]; BV_F001_wert_99
LHM_TYPE; LHM_TYPE_NONE [00]; LHM_TYPE_LHM2 [02]
LOAD_DUMP_SCHUTZ_AL; aktiv [01]; nicht_aktiv [00]
LOAD_DUMP_SCHUTZ_NSW; aktiv [01]; nicht_aktiv [00]
LUT_AFS_CODRV_VERT; F010_F12/F13/F06_AltFzg_Xenon; F010_F06/F12/F13_LCI_ECE
LUT_AFS_DRV_HOR; F010_F12/F13/F06_AltFzg_Xenon; F025_F25LCI/F26_LED [00 00 33 00 00 00 00 00 00]
LUT_AFS_DRV_VERT; F010_F10/F11/F18_AltFzg; F010_F06/F12/F13_LCI_ECE
LUT_BLC_FORE_Y; F010_F10/F11/F18; F025LED_ab_1408 [03 11 11]
LUT_BLC_HOR_POS_PAR_X; F001_Codierwert; F025_LED_ab_1408 [1E 3C 46 50]
LUT_BLC_HOR_POS_PAR_Y; F001_Codierwert; F025_LED_ab_1408 [00 64 64 64]
LUT_BLC_TAU_P_RED_Y; F010_F10/F11/F18__F06/F12/F13_AltFzg; F025_LED_ab_1408 [00 14 3C 00]
LUT_FLC_FORWARDLIGHTING_Y; F001_ohne_AFS; F001_mit_AFS
LUT_HBA_CODRV_HOR; F001_F07/7er_AHL/Basis__RR; F025_LCI_LED_US [00 00 00 00 00 F6]
LUT_HBA_CODRV_VERT; F001_F07/7er_AHL/Basis__RR; F025_LCI_LED_ECE [2E 3B 00 00 00 00]
LUT_HBA_DRV_HOR; F001_F07/7er_AHL/Basis__RR; F025_LCI_LED_US [00 00 00 00 00 0A]
LUT_HBA_DRV_VERT; F001_F07/7er_AHL/Basis__RR; F025_LCI_LED_ECE [2E 3B 00 00 00 00]
LUT_LA_COL_POS_10M_SHUT_CODRV_Y; F025_Scheinwerferkontur_Beifahrer_Xenon [F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 FC F6]; F001_Scheinwerferkontur_Beifahrer_LED
LUT_LA_COL_POS_10M_SHUT_DRV_Y; F025_Scheinwerferkontur_Fahrer_Xenon [F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 FC F6]; F001_Scheinwerferkontur_Fahrer_LED
OPT_QUITTIERUNG_SMO_ENA; nicht aktiv [00]; aktiv [01]
SCHLUSSL_BEI_SL_AKTIV_KL30; sl_2 [02]; sl_1_und_sl_2 [03]
SIGNATURE; UNKNOWN [00 00 00 20 69 FA CF 57 34 00 20 4F 9F 04 28 4B F1 69 A5 49 F3 B3 8B E0 21 97 F2 49 2C F8 27 81 F7 FD 1F 45 94 AD B8 33 55 1B DC 49 75 4A 59 EB 2B EC 0B 67 40 CA 5C 0A 63 B8 AE 4D D5 2C 89 2E 71 76 0B 9B 22 3B 67 64 E5 79 98 CD E7 55 2B 17 B5 31 AD C9 D6 04 0D A0 28 AD 20 09 A1 A8 76 48 52 63 11 9E BD 84 4C A6 70 6C 96 C1 F6 98 13 72 B4 AD 54 77 8B 3C 0F 70 61 F5 7D 22 77 50 DD 1A 2F B4 B7 CB]; UNKNOWN [00 00 00 20 CA 63 C8 CB 7F CB 56 EB 32 61 C2 01 68 96 5C 1D 22 BD A0 A7 96 3C 42 68 49 24 28 BA 31 DA 22 5F 45 75 31 43 F0 49 F1 73 9E D5 80 0C B6 03 85 40 62 88 C3 EF 96 C5 0B EF E2 7C EB 16 2F 6A 23 6E 7B 01 2D 3D CE CF E5 26 99 A1 F9 48 7D 78 C8 56 64 EE 16 1F 10 7D DB 0D E7 0B CE 17 87 BB AD D4 DB BB B1 88 26 2A 7E 3D 04 B5 80 44 08 C9 60 12 F4 DA 0E 8E 18 5C F7 B4 A2 B4 6B D5 46 50 2B 95]
TIMER_ABSCHALTUNG_AKTIV; nicht_aktiv [00]; aktiv [01]
TMS_ID_LINKS; F25 HAL / SAE; F01 LCI AHL / ECE
TMS_ID_RECHTS; F25 HAL / SAE; F01 LCI AHL / ECE
TMS_TYPE; TMS_TYPE_NONE [00]; TMS_TYPE_TMS3 [03]
UEBERFALLALARM_SIGNALBILD; mit_fernlicht [00]; mit_tagfahrlicht [01]
U_EFF_1_SL; wert_02__aus [00]; wert_01__100% [32]
U_EFF_2_SL; wert_02__7; wert_01__100% [32]
U_EFF_AL; Halogen__13; LED_ab_LCI_AUS [00]
U_EFF_CL; wert_02__aus [00]; wert_04__100% [32]
U_EFF_F25_BKL_gedimmt; wert_03__8; wert_01__9
U_EFF_FL; wert_02__13; wert_01__aus
U_EFF_FRA_V; wert_03__13; wert_01__100% [32]
U_EFF_NSW; wert_01_13; wert_02__100% [32]
U_EFF_POL; wert_07__11; LED_ab_LCI_AUS [00]
U_EFF_TFL; wert_03__6; wert_04_AUS_LCI [00]
WB_KOMBI; nicht_aktiv [00]; aktiv [01]
Note that if you do happen to VO code the LED headlights, you will likely have to change the following back to original values to prevent rear light errors:
DUAL_SPG_AKTIV_NSL aktiv [01]
LAMP_MAP_PARA_SATZ_07 BV_F025_wert_01__Bremslicht_ueber_SL2 [0F 07 05 A0]
LAMP_MAP_PARA_SATZ_08 BV_F025_wert_01__Bremslicht_ueber_SL2 [10 08 05 A0]
13. After coding, turn off car and wait until it fully powers down just to be safe (the P on instrument cluster turns off).
14. Plug in headlights and start car.
15. Headlights likely will not work yet. You still need to code your VIN to the new headlights and then “teach” them to the car.
16. Go into E-Sys. Connect to car. Select CODING under expert mode. Read and activate FA. Read ECU under SVT Actual. Look for two LHM and two TMS modules in the list of ECUs. They should all show up but they will likely not have CAFDs in them. Pick first one (the module itself and not anything underneath it) and select “Detect CAF for SWE” under KIS/SVT Target. Select latest date. Hopefully this will now create a CAFD for that module in the left pane. If not, repeat and try another CAF date when selecting “Detect CAF for SWE”. Repeat for the other three modules. Then right click on each module (again, the module itself and not the CAFD underneath it) and select Code. This will VO code the module. After doing all 4, disconnect E-Sys from car, close E-Sys, restart and then re-connect. All four modules should now show up in black without any red/blue lettering. This means all are properly coded to the car.
17. Exit E-Sys
18. Open ISTA/D and make sure after connecting and running diagnostics, you see the LHM and TMS modules in the module tree. Under Service Function, Body, Lighting – select the option to “teach in” headlights. Turn signals, angel eyes, etc. will not work until this function completes. I’m guessing the car uses the LIN buses to determine which TMS and LHM modules are left and right side and determines dimming ranges.
19. Clear all error codes in ISTA/D and then you should be done.