- 1 Getting Started
- 2 Tuning your ECU
- 3 Terminology
- 4 Fueling
- 5 Timing
- 6 Vanos
- 7 DTC Suppression
- 8 Extra Features
- 9 Safety Features
- 10 Special Functions *
It is absolutely crucial before starting to mess with the DME, you need to understand the importance of having the correct softwareversion! Softwareversion is a term which describes how old the software on a praticular DME is. The easiest analogy would be to use terms from the computer industry.
MS42 could be compared with Win7, whereas MS43 would be Win8. Both have a unique platform, but have had updates in the past. These updates, called service packs, can be described as the softwareversion of the DME. We´ve been starting with basic Win7 (0110AD) and got the first service pack (0110C6). It still had errors so the second service pack (0110CA) was rolled out. At MS42, there have been the following softwareversions:
The very important part now is, each softwareversion got a new feature (whatever that feature might be is not important!). Every new feature means that there needs to be changes done in the code to implement them. Every change in the code also means that the maps in the tune need a new layout/position. That makes it important: A XDF/Damos/a2l file is written for a very specific softwareversion! If you load a bin with e.g. 0110C6 into TunerPro and use the XDF file from 0110AD, it´ll get really messy! If you are seeing strange values confirm that you are using the correct version! If you are using RomRaider for tuning, then you don't need to worry about software versions. RomRaider will open correct definition automatically if your software version is supported. Currently RomRaider definition supports 0110AD, 0110C6 and 0110CA software versions.
AVOID USING DIFFERENT SOFTWAREVERSION
If your DME is 0110C6, you need to find a XDF/Damos/a2l file for that version!
NEVER EVER FLASH A TUNE FROM A DIFFERENT SOFTWAREVERSION ON YOUR ECU OR IT WILL BE BRICKED!
You need some way to read and write files to the ECU. In order to do a full re-write, the ECU will need to be placed into BootMode. BootMode can be achieved by removing the enclosure and grounding pin 24 of the 29F400 chip for approximately 6 seconds on startup. Some options to flash the ECU are:
- INPA USB to OBD cable
- Checksum tools
- Ultimo checksum corrector File:Checksum corrector.zip
- JMGarage Flashing utility -
- Galletto 1260
- BMW's WINKfp
Software collection with all the goodies 
You will need the following connections to proper power up the DME while on the bench.
Downgrade To Softwareversion 0110AD
First make sure that you have the following prerequisites:
- 0110AD virginized .bin-file for your specific engine model: http://www108.zippyshare.com/v/tDqy6XsI/file.html
- JMGarage flashing utility from above
- K-Line OBD2 adapter cable
- BMW INPA
Then proceed with the following tasks:
- Start by removing your MS42 ECU from your car and open up it up.
- Reconnect your ECU only with connectors 1 and 4 and make sure not to power it up yet, otherwise disconnect it again for at least 10 seconds.
- Connect your laptop to the OBD2 port using your K-Line OBD2 adapter and open up the JMGmgarage flashing utility.
- Now ground the boot pin and turn igniton on to key position two. Keep the boot pin grounded.
- Hit the connect butoon in JMGarage flashing utility and keep holding the grounding pin until the connecteion is fully established.
- Backup your current flash image to a safe place! Once you have your back up click open and select your new virgin software file and click write
- once it writes 100 percent close all programs and turn off the car your now on virgin AD software
- Reassemble your MS42 ECU and reconnect all plugs
- Connect your INPA cable and turn key to position 2
- Run BMW INPA select your model and dme open the EWS SYNC option and click sync ews on done close all programs and turn off car
- Start the engine and crack a beer as you are now on softwareversion 0110AD
Note: downgrading to 0110AD is only needed if your software version is not supported by the definition file you are using.
Tuning your ECU
You will need:
- A map editor
- An definition file so that the map editor can locate maps
- Checksum correction
- Modifying data in the ECU file will invalidate the internal checksum values. These will need to be updated or your car will not start or will have errors. #Flashing_utilities
- BMWLogger BimmerSoftware
- Testo BFC Thread with Testo DL Link
- RomRaider - Work in Progress, but you can find latest RRlogger definiton at looking from this thread.
The acronyms are Siemens map names from the Funktionsbeschreibung. It's crucial to understand at least the major engine states like _ll_, _tl_ and _vl_ to make sense out of the cryptical naming of the maps. Using this Excel sheet, you can make up what different acronyms mean.
Basic Fuel Maps
Injection maps are based around engine load vs engine speed. The lookup is milliseconds. The lambda sensors for closed loop control are narrowband. Learned trims do affect full throttle fuelling as well, but area learned from closed loop areas. When there is no VANOS fault, the engine interpolates between Injection time at part-load, cold engine, Vanos I or II and Injection time at part-load, warm engine, Vanos I or II. I or II are for the two halves of the straight six engine. Under VANOS fault conditions, Basic Injection Time IP_TIB is used. Full load enrichment IP_TI_VL is a multiplier of the part load calculations and added to them. Blending between cold and warm injection maps is done by weighing factor kf_fak_vanos_tl__tkw__tkw_st for partload and kf_fak_vanos_ll__tkw__tkw_st for idlespeed
Non Stock Injector Maps
Changing the fuel injectors may be needed when charging your engine and therefore some constants and maps need to be tweaked.
You will have to calculate the difference in percentage of volume flow between stock and your new injectors.
The following scalars need to be adjusted accordingly:
Depending on the injectors you will have to finetune the injector latency compensation (injector dead times) as well:
But adjusting the scalars will only get you to rough ballpark. The engine will probaply run just fine only with T_TI_AS adjusted but to get fueling dialed in you need to fine tune other fuel maps:
If you happen to have stuttering or unclean combustion when stepping on the gas, rescale the cylinder rewetting tables as well:
Basic Timing Maps
Ignition at part-load, RON98 (16x20) Airflow -vs- Engine speed (kf_zw_roz98_vanos_tl__n__lm) is the main table in use with a healthy engine, with no VANOS fault codes at normal warmed up operating temperature running 98 RON/93 PON gasoline. There is a knock based interpolation between the 98 and 91 RON tables. The other tables should be kept safe. Ignition at part-load, cold engine (16x20) Airflow -vs- Engine speed is used on a cold engine, and blended/interpolated towards Ignition at part-load, RON98 (16x20) Airflow -vs- Engine speed during warm up. Catalyst heating "KH" in maps retards ignition during warm up. Antijerk "AR" retards ignition during rapid throttle opening to smooth out torque (can be removed by increasing tkw_min_ar to 142.5C. Reported to sometimes cause transitional knock on boosted engines, if so consider adjusting other tables designed for this (***). MS43 related: Experience on standard or near standard Euro 330ci in cool climate and with 99 RON fuel suggested sporadic pulling of timing here and there up to a few degrees is common but rarely sufficient even in hard track use to produce more than 1 degree of learned ignition retard from the 98 RON base map. Shows the 98 RON map on a standard car is quite good. Question if fuelling could be richened to allow more ignition timing and torque/power.
Exhaust Popping Modifications
Current solution for exhaust crackle/pop is to supress overrun fuelcut detection from the ecu. This is accomplished by raising the rpm treshold. As this engine state can be set differently when A/C is turned on and off, you can switch between both states by operating the A/C.
The following maps need to be tweaked. Note: The screenshot actually shows the values to have crackle/pop when A/C is off
This section contains information on how the dual vanos system is actuated by the DME and how to modify it. Both, intake and exhaust, camshaft can be set independently in relation to the crankshaft. The aim of that system is to optimize emission, produce better torque at low engine speeds and have better top end power. The system uses engine oil to pressurize a set of gears at the end of each camshaft. Even though the variation of °crk is pretty limited, it can be used to compensate for different intakes, different camshafts and even turbo application may be benefitting from perfectly tweaked camshafts.
Basic Vanos Maps
The main maps used for intake camshaft are:
The main maps used for exhaust camshaft are:
Blending between cold engine and warm engine is done by:
idlespeed kf_nwsoll_fak_ll_e__tkw__tkw_st kf_nwsoll_fak_ll_a__tkw__tkw_st
partload kf_nwsoll_fak_tl_e__tkw__tkw_st kf_nwsoll_fak_tl_a__tkw__tkw_st
DTC's can be suppressed in the MS42 by zeroing out the epz_inc_... specific codes. The full list of DTC's can be found here: (NEED SPREADSHEET)
Change E-Thermostat Desired Temp Maps
The M52tu runs quite warm for the aluminum block and also is very sensitive to temperatures and is one of the leading causes for pulling timing when warm. To set the desired coolant temps, the following maps need to be adjusted:
- tkw_soll_toel_min (Minimum Oil temp required to then default to EThermostat maps - default 102°C)
- tab_tkw_soll_kfk__n__lm_ers(Target Coolant temp without AC)
- tab_tkw_soll_kfk_ka__n__lm_ers (Target Coolant temp with AC)
Secondary Air Pump Delete
Set konf_ssp =1
Post Cat O2 Delete
Set - konf_abgasanlage - Configuration Catalytic System to 1 for 2 Pre-Cat O2 sensors
Single O2 Feedback
Constant konf_abgasanlage has 4 different options which represent the ecu´s ability to work with different lambda probe setups. Set the following values that suit you needs:
- 0: One precat lambda sensor or cat-preparation (SA199)
- 1: Two precat lambda sensor or cat-preparation (SA199)
- 2: One precat lambda sensor and one postcat lambda sensor
- 3: Two precat lambda sensor and two postcat lambda sensor
MAF Scalar Adjustments
The standard MAF lookup table is a 16 * 16 table that is not interpolated. The 10 bit analog to digital conversion is reduced to 8 bits and 4 bits of each are used to lookup the MAF. The table can also be shown as 256 * 1. The function is the same. There is a factory limit of 1024kg/h that can be doubled or quadrupled with a patch that has undergone basic testing. There are differences in flow between the 2.5 and 3.0 litre MAF sensors. Differences in cross sectional area would be expected to rescale the values, but the sensor is part of the tube and not easily modified. BMW sensors apparently not well suited to boost in blow through setup. Replacement slot type sensors (Ford based?) are often used in high output blow through configurations for turbocharging. Engine load is proportional to MAF divided by RPM. Engine load is used to reference most of the important fuel and ignition tables. Max engine load is 1389mg/stroke and limited unless there are massive rewrites in hardware. A 330i pulls about 600mg/stroke in cold conditions with a maximum airflow of about 630kg/h. Changes to MAF tables should be kept smooth and progressive. Fuel trims plotted against MAF voltage can be used to fine tune the closed loop areas.
Throttle reaction to accelerator pedal
MS42 uses maps "KF_MDK_SOLL_PWG_TKW1" and "KF_MDK_SOLL_PWG_TKW2" (Cold and Warm respectively.)
MS42 has 4 gear dependant rpm limiter, where 2 are used for soft limiting and the other 2 are used for hard limiting. Both hard- and softlimiter are gearbox dependant, AT or MT
- "TAB_NMAX_AT__NTV": Softlimiter for AT gearbox
- "TAB_NMAX_MAX_AT__NTV": Hardlimiter for AT gearbox
- "TAB_NMAX_MT__NTV": Softlimiter for MT gearbox
- "TAB_NMAX_MAX_MT__NTV": Hardlimiter for MT gearbox
0110C6 uses maps:
- "TAB_NMAX_MT": Softlimiter for MT
- "TAB_NMAX_MAX_MT": Hardlimiter for MT
Automatic Transmission maps are the same.
Softlimiter works by cutting injectors based on fuelcut pattern, whereas hardlimiter immediately cuts all cylinder
The MS42 uses the table "TV_MAX_VL" Set to 255 for no limiter.
Disconnecting the MAF sensor forces the DME to use the Alpha/n map (KF_LM_DIAG_1) Fault codes will be removed with the next iteration of flash files.
The following information need to be handled with care as you´re able to turn off safety features! This can lead to severe damage and you´re doing so at your own risk!
- n_min_lu: minimum engine speed for detection of misfire!
- n_max_lu: maximum engine speed for detection of misfire!
- tab_zw_dec_kr_1__n: ignition angle reduction based on knock stage1
- tab_zw_dec_kr_2__n: ignition angle reduction based on knock stage2
- n_ti_ad_fak_min: min engine speed to allow adapation of fuel trim, multiplicative
- n_ti_ad_add_max: max engine speed to allow adapation of fuel trim, additive
Special Functions *
- = some of these functions may only be accessable by purchasing a license file
M3 Cluster LED Control
This feature needs licencing.
After swapping in an M3 cluster into a E46, there is no more "ecometer" displaying the momentary fuel consumption, but a more useful oiltemperature gauge.
Using this cluster and some additional code we can also control the LEDs around the RPM gauge to work similar to the E46 M3 and also manage shiftlight behaviour.
Following maps are used: