Advertising:

Siemens MS43: Difference between revisions

From MS4X Wiki
(Add full load detection information by LKMT)
(37 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<div style="float:right;">__TOC__</div>
<div style="float:right;">__TOC__</div>
=Memory Layout=
The MS43 can be seperated into three major sections, first comes the bootloader, then the program code, and last the calibration data.


=Getting Started=
See this table for file locations:
 
==VERY IMPORTANT==
 
It is absolutely crucial before starting to mess with the DME, that 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:
 
The MS42 could be compared with Windows XP, whereas MS43 would be Windows 7. 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 Windows 7 (MS430037) and got the first service pack (MS430055). It still had errors so the second service pack (MS430056) was rolled out.
 
At MS43, there are the following softwareversions:


{| class="wikitable"
{| class="wikitable"
!colspan="4"|Softwareversions
! style="text-align: center; font-weight:bold;" | Start
! style="text-align: center; font-weight:bold;" | End
! style="text-align: center; font-weight:bold;" | Section
! style="text-align: center; font-weight:bold;" | Size
|-
|-
| MS430007
| style="text-align: center; background-color:#fe996b;" | 00000
| MS430019
| style="text-align: center; background-color:#fe996b;" | 0FFFF
| MS430036
| style="text-align: center; background-color:#fe996b;" | Bootloader Code
| '''MS430056'''
| style="text-align: center; background-color:#fe996b;" | 64 kByte
|-
|-
| MS430009
| style="text-align: center; background-color:#fffc9e;" | 10000
| MS430021
| style="text-align: center; background-color:#fffc9e;" | 1FFFF
| MS430037
| rowspan="6" style="text-align: center; background-color:#fffc9e;" | Program Code
| MS430064
| rowspan="6" style="text-align: center; background-color:#fffc9e;" | 384 kByte
|-
|-
| MS430010
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 20000
| MS430022
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 2FFFF
| MS430050
| MS430066
|-
|-
| MS430012
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 30000
| MS430024
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 3FFFF
| MS430051
| MS430069
|-
|-
| MS430014
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 40000
| MS430030
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 4FFFF
| MS430053
| MS430070
|-
|-
| MS430015
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 50000
| MS430032
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 5FFFF
| MS430054
| MS4300DF
|-
|-
| MS430018
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 60000
| MS430034
| style="text-align: center; background-color:#fffc9e; color:#000000;" | 6FFFF
| MS430055
|-
|  
| style="text-align: center; background-color:#9aff99; color:#000000;" | 70000
| style="text-align: center; background-color:#9aff99; color:#000000;" | 7FFFF
| style="text-align: center; background-color:#9aff99; color:#000000;" | Calibration Data
| style="text-align: center; background-color:#9aff99; color:#000000;" | 64 kByte
|}
|}




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.
'''Bootloader Section'''
So keep in mind, a definition file (.xdf/Damos/A2L) is written for a very specific softwareversion! If you load a flash file with e.g. MS430066 into TunerPro and use the definition file from MS430056, it´ll get really messy! If you are seeing strange values double check that you are using the correct version!


'''AVOID USING DIFFERENT SOFTWAREVERSION'''
The bootloader code section is the most important section of the MS43 and doesnt have to be touched for at least 99% of all use cases.


If your DME is MS430066, you need to find a XDF/Damos/A2L file for that particular version!
This section is 64 kByte in size and contains the interrupt setups, input and output initializations, as well as immobilizer information and the UIF (user information fields).


'''NEVER EVER FLASH A TUNE FROM A DIFFERENT SOFTWAREVERSION ON YOUR ECU OR IT WILL BE BRICKED!'''
The significant difference between the bootloader section and the others is, that it's only one time programmable under normal operation. That means once a byte has been changed from FF to another value, it is not changeable again.


Even using MS430055 tune in TunerPro with an XDF for MS430056 will result in a mess!!
Unlimited write access to the bootloader section can only be archieved through JMGarage Flasher and is ONLY needed for virginizing the ECU to pair it with a different EWS module or to alter the UIF without increasing the flashcounter.


[[File:Old_Wrong_Version_XDF_Error.png |300px|thumb|none|v55 .BIN loaded with v56 .XDF]]
The newest version of immobilizer and checksum delete will not need bootmode flashing.


==Software & Tools==
Before rushing into the tuning thing, make sure that all of your tools are working properly and you fully understand the following sentences.


The Siemens MS43 flashchip contains two different sections:
'''Programm Code Section'''


#0x00000 - 0x6FFFF (448 KByte)
All of the MS43 program code is located here.
#*This is ECUs program space, special features (EWS or checksum deletes, Launch Control, etc.) are programmed here
#0x70000 - 0x7FFFF (64 KByte)
#*This is the parameter space, where most of the functions in the ECU program lookup their corresponding values


Together these sections sum up for 512 KBytes total. So when you hear someone talking about the "512k file" or "full read", the whole flash content is meant.


Most of the regular tuning stuff can be done inside the parameter space, or often called "partial read".
'''Calibration Data Section'''


So as long as you only want to raise your limiters, change injection or ignition tables, etc. you're fine with the smaller file. This reduces your flashing time as well.
=Checksums=
Checksums are used to verify that the data written to the ROM has not become corrupt.


Nevertheless, there are some special functions that require massive code rewritings in the program space, where a full write is nessessary.
The MS43 uses three CRC16 checksums that covers the boot, program and calibration sections and two addition checksums that covers the data for the monitoring (_mon_) routines.


Software collection with some goodies [https://drive.google.com/open?id=0BybpM7kNcnD5flA0QVdhbEpNbEpabENEbGhBZkVZZWpwT09kVDFMazEzMDhDSWVPRzFPTEU Google Drive]
The variables that the ECU uses to calculate the addition checksum is located in the program section so tools like Ultimo Checksum Corrector can only correct this checksum in a 512KB file.


'''You can download the flashtools right here: [[Flashing_Tools| Flash Tools]]'''
Both addition checksums have to be corrected '''before''' the CRC16 checksums, as the addition checksums are located inside the CRC16 checksum areas.


===Tuning Software===
The checksums are located at the following addresses:
The tuning software is not required, as you can make all the changes to the file with a HEX editor as well, but then you propably wouldn't need this wiki ;)


There are several tools, that'll make messing with the ECUs tables and values much easier and help a lot with a built in visualization engine.
{| class="wikitable" style="text-align:left;"
 
!CRC16
Again, there are more than the two programs listed below, but people using WinOLS or even a HEX Editor don't need this guide.
!Location
 
|-
These programs are relativly dumb, as they rely on so called "definition files". A definition file is unique for every software version, as stated in the beginning.
| Boot
 
| 0x3C24
A definition file describes every value and table of the ECU (at least in the best case) with its HEX location in the flashfile, a conversion factor and its upper and lower limits.
|-
 
| Program
In addition to that, there are logging definitions, that help you to log all the values for tuning or troubleshooting. Romraider has some nice wideband o2 sensor plugins!
| 0x6FDE0
 
|-
#[http://www.tunerpro.net/downloadApp.htm TunerPro]
| Calibration
#*[https://drive.google.com/folderview?id=0BybpM7kNcnD5flA0QVdhbEpNbEpabENEbGhBZkVZZWpwT09kVDFMazEzMDhDSWVPRzFPTEU&usp=sharing Latest TunerPro definition file for MS430056 (.xdf)]
| 0x73FE0
#*[http://www.tunerpro.net/downloadBinDefs.htm#BMW Incomplete TunerPro definition files for other softwareversions (.xdf)]
|-
#*[http://forum.e46fanatics.com/showpost.php?p=17197443&postcount=2940 TunerPro logging file (.adx)]
!Addition
#[http://www.romraider.com/RomRaider/Download RomRaider]
!Location
#*[http://www.romraider.com/forum/viewtopic.php?f=43&t=12575 Latest RomRaider definition file for MS430056 (.xml)]
|-
#*[http://www.romraider.com/forum/viewtopic.php?t=1642 RomRaider Logging file (.xml)]
| Program Part 1
 
| 0x6FDAE
Other datalogging software could be
|-
*BMWLogger [http://bimmersoftware.com/bmwlogger BimmerSoftware]
| Program Part 2
*Testo [http://www.bimmerforums.com/forum/showthread.php?1830510-Diagnostic-program-with-realtime-graph-view BFC thread with download]
| 0x6FD80
 
|-
===Checksum correction===
| Calibration Part 1
Modifying data in any of the two files will invalidate the internal checksum values. These will need to be updated or your car wont start. [[#Flashing_utilities]]
| 0x72FFC
|-
| Calibration Part 2
| 0x72FFE
|-
|}


You can solve this with ether correcting them before flashing the modified file, or flash the 512 KByte file from Daniel, where the calibration CRC16 checksum is disabled.
==Disabling Calibration Checksums==


Be careful the calibration addition checksum is still enabled in that file, so editing _mon_ values is not possible without correcting or disabling this checksum first.
'''Disable CRC16 Checksum'''


[[#Disabling Calibration Checksums|Check here how to disable the calibration checksums.]]
To disable the CRC16 calibration checksum on all firmwares do the following.


Download Chipster MS43 checksum corrector [[File:Chipster_MS43_Checksum_Corrector.zip]]
; Hexeditor
: 1. Set Word at 0x73FFE to 0xFFFF
: 2. Set Byte at 0x6FFB0 to 0xA8


==Connecting to the MS43==
You need some way to read and write files to the ECU. In order to do a full write, the ECU will need to be placed into Bootmode or you use the MSS5x Flasher and a INPA / K-Line capable USB to OBD2 adapter.


BootMode can be achieved by removing the ECUs enclosure and grounding pin 24 of the 29F400 chip for approximately 6 seconds on startup
'''Disable Addition Checksum'''


Link to Youtube which explains what to do: https://www.youtube.com/watch?v=BFwdIiqxtbk
To disable the addition calibration checksum use one of the following methods.


Some cheap china INPA cables don't work without modifying them. You have to short Pin 7&8 of the OBD2 plug from your cable to get them working correctly.
; Tunerpro
: 1. Set lc_swi_cal_mon_cks to 165


Here is the MS43 Pinout: [[Siemens_MS43_Pinout]]
; Hexeditor
 
: 1. Set the Byte in the table to 0xA5
 
::{| class="wikitable" style="text-align:left;"
You will need the following connections to properly power up the DME while on the bench.
!Firmware
 
!Location
There are several different wirings to use, but we have found that this is the least amount of wires needed for a properly working setup:
 
There are two different CAN bus interfaces on the MS43, one for the TCU located on plug X60002, and one for all other modules like ABS, ASC/DSC, instrument cluster, steering angle sensor located on plug X60004.
 
 
 
[[File:BMW_MS_43_Pinout_Description.png|center]]
 
 
<gallery mode="packed">
File:Old_BMW_MS_42.jpg|K-Line pinout for MS43
File:Old_MS43_safer.jpg|Alternative (safer) K-Line connection
File:Old_Connection.jpg|OBD-II connection diagram
</gallery>
 
[[File:Old_MS43_CAN_BUS.png|600px|thumb|center|MS43 CAN-Bus connections]]
 
=Terminology=
The acronyms are Siemens mapnames from the Funktionsbeschreibung.
 
The following list contains a selection of the most used terms. It's crucial to understand at least the major engine states like _is_, _pl_ and _fl_ to make sense out of the cryptical naming of the maps.
 
[[File:Abbreviations.pdf]]
 
{| class="wikitable mw-collapsible mw-collapsed" style="text-align:left;"
! Enginestate
! Description
|-
|-
|as
| 430037
|after start
| 0x70CE3
|-
|-
|cs
| 430055
|cold start
| 0x70D7C
|-
|-
|es
| 430056
|engine stopped
| 0x70D7E
|-
|-
|fl
| 430064
|full load
| 0x70DA0
|-
|-
|is
| 430066
|idle speed
| 0x70E0A
|-
|-
|pl
| 430069
|part load
| 0x70E07
|-
|pu
|trailing throttle
|-
|puc
|trailing throttle fuel cut-off
|-
|-
|r
|restart
|-
|st
|start
|}
|}


=Checksums=
=Fueling=
Checksums are used to verify that the data written to the ROM has not become corrupt.
==Fuel Injection Maps==
The injection maps are based on "engine load (mg/stroke) vs. engine speed (rpm)" and the lookup is injection time in milliseconds.
 
The lambda sensors for closed loop operation are narrowband. Fuel trim learning only happens during closed loop operation, but the learned fuel trims do affect full throttle fueling as well.


The MS43 uses three CRC16 checksums that covers the boot, program and calibration sections and two addition checksums that covers the data for the monitoring (_mon_) routines.
When there is no VANOS fault, the engine interpolates between "Injection time at part-load, cold engine, Vanos I/II" and "Injection time at part-load, warm engine, Vanos I/II", where the numbers I or II indicate the two banks of the straight six engine.


The variables that the ECU uses to calculate the addition checksum is located in the program section so tools like Ultimo Checksum Corrector can only correct this checksum in a 512KB file.
Under VANOS fault conditions, the map "Basic Injection Time (ip_tib)" is used.


Both addition checksums have to be corrected '''before''' the CRC16 checksums, as the addition checksums are located inside the CRC16 checksum areas.
"Full load enrichment (ip_ti_fl)" is a multiplier of the part load calculations and added to them.


The checksums are located at the following addresses:
Blending between cold and warm injection maps is done by weighting factor "ip_fac_pl_ivvt__tco__tco_st" for partload and "ip_fac_is_ivvt__tco__tco_st" for idlespeed


{| class="wikitable" style="text-align:left;"
==Non Stock Injector Maps==
!CRC16
Changing the fuel injectors may be needed when supercharging your engine and therefore some constants and maps need to be tweaked.
!Location
 
|-
You will have to calculate the difference in percentage of volume flow between stock and your new injectors.
| Boot
 
| 0x3C24
The following scalars need to be adjusted accordingly:
|-
 
| Program
*T_TI_AS_[0-5]
| 0x6FDE0
*c_ti_min_iv
|-
 
| Calibration
Depending on the injectors you will have to finetune the injector latency compensation (injector dead times) as well:
| 0x73FE0
 
|-
Attention: This table has a wrong correction factor in almost all available definition files. Change this to "X * 0.032".
!Addition
*ip_ti_add_dly__vb
!Location
|-
| Program Part 1
| 0x6FDAE
|-
| Program Part 2
| 0x6FD80
|-
| Calibration Part 1
| 0x72FFC
|-
| Calibration Part 2
| 0x72FFE
|-
|}


==Disabling Calibration Checksums==
If you happen to have stuttering or unclean combustion when stepping on the gas, rescale the cylinder rewetting tables as well:


'''Disable CRC16 Checksum'''
*ip_ti_fast_wf_thd_min__tco
*ip_ti_slow_wf_thd_min__tco


To disable the CRC16 calibration checksum on all firmwares do the following.
[[Fuel_Injector_Deadtimes|Go here for a list of suitable fuel injectors and their deadtimes.]]


; Hexeditor
==Correcting Fuel Consumption Gauge==
: 1. Set Word at 0x73FFE to 0xFFFF
: 2. Set Byte at 0x6FFB0 to 0xA8


When changing injectors you will discover that the MPG reading on your cluster or other monitoring apps is off.


'''Disable Addition Checksum'''
The table ip_fco_map_cor__pq_main_col handles injection reporting towards the cluster.
 
For example: If you lowered your fueling tables by MULTIPLIYING them with 0.3, you must DIVIDE the mentioned table by 0.3 to fix MPG reading.
 
==Upgraded fuel pumps==
Under some circumstances, like going forced induction, the OEM fuel pump can't deliver enough fuel to the engine and needs to be upgraded.
 
Most aftermarket fuelpumps like the Walbros or Deatschwerks don't have a check valve inside and the fuel flows back into the tank once the vehicle is turned off.
 
The MS43 has two time values (in seconds) for controlling the fuelpump before starting and after stopping the engine:


To disable the addition calibration checksum use one of the following methods.
*C_T_EFP_PREV: Time the electronic fuel pump relay is on after ignition key ON
*C_T_EFP: Time delay to shut off the electric fuel pump relay after ignition key OFF


; Tunerpro
Slightly rising these values may eliminate starting issues.
: 1. Set lc_swi_cal_mon_cks to 165


; Hexeditor
=Timing=
: 1. Set the Byte in the table to 0xA5
==Basic Timing Maps==
::{| class="wikitable" style="text-align:left;"
The MS43 uses several ignition maps depending on the engine state and quality of fuel used. Like the injection maps, they are also based on "engine load (mg/stroke) vs. engine speed (rpm)" but obviously the lookup is ignition timing in degrees BTDC (before top dead center).
!Firmware
!Location
|-
| 430037
| 0x70CE3
|-
| 430055
| 0x70D7C
|-
| 430056
| 0x70D7E
|-
| 430064
| 0x70DA0
|-
| 430066
| 0x70E0A
|-
| 430069
| 0x70E07
|-
|}


=Fueling=
"Ignition at part-load, RON98 (16x20) Airflow -vs- Engine speed" is the main table used with a healthy engine (so no VANOS fault codes, normal warmed up operating temperature) running RON98/PON93 gasoline.  
==Fuel Injection Maps==
The injection maps are based on "engine load (mg/stroke) vs. engine speed (rpm)" and the lookup is injection time in milliseconds.


The lambda sensors for closed loop operation are narrowband. Fuel trim learning only happens during closed loop operation, but the learned fuel trims do affect full throttle fueling as well.
There is a knock based interpolation between the RON91 and RON98 RON tables. The other tables should be kept safe.


When there is no VANOS fault, the engine interpolates between "Injection time at part-load, cold engine, Vanos I/II" and "Injection time at part-load, warm engine, Vanos I/II", where the numbers I or II indicate the two banks of the straight six engine.
"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.


Under VANOS fault conditions, the map "Basic Injection Time (ip_tib)" is used.
Catalyst heating "_CH_" in maps retards ignition during warm up.


"Full load enrichment (ip_ti_fl)" is a multiplier of the part load calculations and added to them.
Antijerk "_AJ_" retards ignition during rapid throttle opening to smooth out torque (can be removed by increasing c_tco_min_aj to 142.5C. Reported to sometimes cause transitional knock on boosted engines, if so consider adjusting other tables designed for this (tra_knk).


Blending between cold and warm injection maps is done by weighting factor "ip_fac_pl_ivvt__tco__tco_st" for partload and "ip_fac_is_ivvt__tco__tco_st" for idlespeed
Experience on standard or near standard European 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 RON98 map on a standard car is quite good. Question if fueling could be richened to allow more ignition timing and torque/power.


==Non Stock Injector Maps==
=Vanos=
Changing the fuel injectors may be needed when supercharging your engine and therefore some constants and maps need to be tweaked.
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.


You will have to calculate the difference in percentage of volume flow between stock and your new injectors.
The aim of that system is to optimize emission, produce better torque at low engine speeds and have better top end power.  


The following scalars need to be adjusted accordingly:
The system uses engine oil to pressurize a set of gears at the end of each camshaft.


*T_TI_AS_[0-5]
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.
*c_ti_min_iv


Depending on the injectors you will have to finetune the injector latency compensation (injector dead times) as well:
==Basic Vanos Maps==


Attention: This table has a wrong correction factor in almost all available definition files. Change this to "X * 0.032".
The main maps used for '''intake''' camshaft are:
*ip_ti_add_dly__vb


If you happen to have stuttering or unclean combustion when stepping on the gas, rescale the cylinder rewetting tables as well:
'''cold engine'''
*ip_cam_sp_tco_1_in_is__n__maf_iv(vt)
*ip_cam_sp_tco_1_in_pl__n__maf_iv(vt)
*ip_cam_sp_tco_1_in_fl__n


*ip_ti_fast_wf_thd_min__tco
'''warm engine'''
*ip_ti_slow_wf_thd_min__tco
*ip_cam_sp_tco_2_in_is__n__maf_iv
*ip_cam_sp_tco_2_in_pl__n__maf_iv
*ip_cam_sp_tco_2_in_fl__n


[[Fuel_Injector_Deadtimes|Go here for a list of suitable fuel injectors and their deadtimes.]]


==Correcting Fuel Consumption Gauge==
The main maps used for '''exhaust''' camshaft are:


When changing injectors you will discover that the MPG reading on your cluster or other monitoring apps is off.
'''cold engine'''
*ip_cam_sp_tco_1_ex_is__n__maf_iv(vt)
*ip_cam_sp_tco_1_ex_pl__n__maf_iv(vt)
*ip_cam_sp_tco_1_ex_fl__n


The table ip_fco_map_cor__pq_main_col handles injection reporting towards the cluster.
'''warm engine'''
*ip_cam_sp_tco_2_ex_is__n__maf_iv
*ip_cam_sp_tco_2_ex_pl__n__maf_iv
*ip_cam_sp_tco_2_ex_fl__n


For example: If you lowered your fueling tables by MULTIPLIYING them with 0.3, you must DIVIDE the mentioned table by 0.3 to fix MPG reading.
Blending between cold engine and warm engine is done by:


==Upgraded fuel pumps==
'''idlespeed'''
Under some circumstances, like going forced induction, the OEM fuel pump can't deliver enough fuel to the engine and needs to be upgraded.
ip_fac_cam_sp_in_is__tco__tco_st
ip_fac_cam_sp_ex_is__tco__tco_st


Most aftermarket fuelpumps like the Walbros or Deatschwerks don't have a check valve inside and the fuel flows back into the tank once the vehicle is turned off.
'''partload'''
ip_fac_cam_sp_in_pl__tco__tco_st
ip_fac_cam_sp_ex_pl__tco__tco_st


The MS43 has two time values (in seconds) for controlling the fuelpump before starting and after stopping the engine:
==VANOS Tweak for little extra midrange power==


*C_T_EFP_PREV: Time the electronic fuel pump relay is on after ignition key ON
Insert the following tables into the desired part-load map where you need the effect ( part-load cold / part-load warm / both).
*C_T_EFP: Time delay to shut off the electric fuel pump relay after ignition key OFF


Slightly rising these values may eliminate starting issues.
'''*ATTENTION: Only Suitable for M54B30    M54B30    M54B30    M54B30 *'''


=Timing=
''Credits to e46fanatics.com member DoCR  '''ONLY FOR 3L engine M54B30''' ''
==Basic Timing Maps==
The MS43 uses several ignition maps depending on the engine state and quality of fuel used. Like the injection maps, they are also based on "engine load (mg/stroke) vs. engine speed (rpm)" but obviously the lookup is ignition timing in degrees BTDC (before top dead center).


"Ignition at part-load, RON98 (16x20) Airflow -vs- Engine speed" is the main table used with a healthy engine (so no VANOS fault codes, normal warmed up operating temperature) running RON98/PON93 gasoline.  
[[File:vanos_tweak.jpg|frame|left|]]
                                                                                                                                                 


There is a knock based interpolation between the RON91 and RON98 RON tables. The other tables should be kept safe.
{| class="wikitable"
 
|+ VANOS Tweak maps in table form for copy and pasting into TunerPro M54B30 ONLY
"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.
! Exhaust cam setpoint part-load !! Intake cam setpoint part-load
 
|-
Catalyst heating "_CH_" in maps retards ignition during warm up.
|
 
{|class="wikitable" border="1" style="width: 450pt; margin: auto; border-collapse:collapse; text-align:right;"
Antijerk "_AJ_" retards ignition during rapid throttle opening to smooth out torque (can be removed by increasing c_tco_min_aj to 142.5C. Reported to sometimes cause transitional knock on boosted engines, if so consider adjusting other tables designed for this (tra_knk).
| -105.0 || -105.0 || -105.0 || -104.6 || -103.1 || -97.5 || -96.0 || -96.8 || -98.3 || -104.3 || -99.0 || -99.0
 
|-
Experience on standard or near standard European 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 RON98 map on a standard car is quite good. Question if fueling could be richened to allow more ignition timing and torque/power.
| -105.0 || -104.6 || -103.9 || -102.0 || -99.0 || -96.0 || -95.3 || -96.4 || -97.9 || -103.9 || -98.6 || -98.6
 
|-
=Vanos=
| -104.6 || -103.9 || -100.9 || -97.5 || -93.8 || -92.6 || -93.4 || -94.9 || -96.4 || -101.6 || -97.5 || -97.5
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.
|-
 
| -103.9 || -102.4 || -96.4 || -92.6 || -88.9 || -88.1 || -90.0 || -91.5 || -93.8 || -97.1 || -91.9 || -91.9
The aim of that system is to optimize emission, produce better torque at low engine speeds and have better top end power.  
|-
 
| -103.1 || -101.6 || -94.9 || -91.1 || -87.4 || -86.6 || -88.5 || -90.4 || -92.6 || -96.0 || -90.8 || -90.8
The system uses engine oil to pressurize a set of gears at the end of each camshaft.
|-
 
| -100.9 || -98.6 || -90.4 || -87.0 || -85.9 || -85.1 || -85.9 || -88.5 || -91.1 || -95.6 || -90.4 || -90.4
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.
|-
 
| -99.0 || -96.4 || -88.5 || -85.9 || -85.1 || -84.8 || -85.5 || -88.9 || -94.1 || -97.5 || -95.3 || -95.3
==Basic Vanos Maps==
|-
 
| -97.9 || -95.3 || -87.8 || -85.9 || -85.1 || -85.1 || -85.9 || -91.9 || -97.5 || -100.9 || -99.0 || -99.0
The main maps used for '''intake''' camshaft are:
|-
 
| -96.8 || -94.5 || -88.5 || -86.6 || -85.9 || -96.0 || -95.6 || -95.6 || -95.6 || -95.6 || -95.6 || -97.5
'''cold engine'''
|-
*ip_cam_sp_tco_1_in_is__n__maf_iv(vt)
| -95.6 || -94.1 || -91.1 || -88.5 || -88.5 || -99.8 || -101.6 || -101.6 || -101.6 || -101.6 || -100.5 || -101.3
*ip_cam_sp_tco_1_in_pl__n__maf_iv(vt)
|-
*ip_cam_sp_tco_1_in_fl__n
| -95.3 || -93.8 || -91.9 || -90.4 || -90.4 || -101.3 || -102.0 || -102.0 || -102.0 || -102.0 || -100.9 || -101.6
 
|-
'''warm engine'''
| -93.8 || -93.0 || -92.3 || -92.3 || -94.5 || -102.4 || -101.3 || -101.3 || -101.3 || -101.3 || -100.1 || -101.3
*ip_cam_sp_tco_2_in_is__n__maf_iv
|-
*ip_cam_sp_tco_2_in_pl__n__maf_iv
| -91.9 || -91.5 || -91.9 || -92.3 || -95.3 || -105.8 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -102.8
*ip_cam_sp_tco_2_in_fl__n
|-
 
| -87.8 || -88.5 || -89.6 || -91.1 || -94.9 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
 
|-
The main maps used for '''exhaust''' camshaft are:
| -85.5 || -87.0 || -88.5 || -90.0 || -93.8 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
 
|-
'''cold engine'''
| -84.0 || -85.9 || -87.4 || -88.9 || -93.0 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
*ip_cam_sp_tco_1_ex_is__n__maf_iv(vt)
|}
*ip_cam_sp_tco_1_ex_pl__n__maf_iv(vt)
|
*ip_cam_sp_tco_1_ex_fl__n
{| class="wikitable" border="1" style="width: 450pt; margin: auto; border-collapse:collapse; text-align:right;"
 
| 126.00 || 126.00 || 125.63 || 124.88 || 123.00 || 118.88 || 113.25 || 106.50 || 105.00 || 104.25 || 108.00 || 108.00
'''warm engine'''
|-
*ip_cam_sp_tco_2_ex_is__n__maf_iv
| 126.00 || 126.00 || 125.25 || 124.50 || 122.63 || 118.50 || 112.88 || 106.50 || 105.00 || 104.25 || 105.00 || 105.00
*ip_cam_sp_tco_2_ex_pl__n__maf_iv
|-
*ip_cam_sp_tco_2_ex_fl__n
| 126.00 || 125.63 || 124.88 || 124.13 || 122.25 || 118.13 || 112.50 || 105.75 || 104.25 || 103.50 || 100.13 || 100.13
|-
| 125.63 || 124.88 || 123.75 || 122.63 || 120.38 || 115.88 || 110.25 || 103.88 || 99.75 || 98.63 || 91.50 || 91.50
|-
| 125.25 || 124.50 || 123.38 || 121.88 || 119.25 || 114.75 || 109.50 || 102.75 || 98.63 || 97.50 || 90.75 || 90.75
|-
| 124.50 || 123.38 || 122.25 || 120.38 || 117.38 || 112.50 || 107.25 || 101.25 || 97.50 || 96.75 || 90.75 || 90.75
|-
| 123.38 || 122.25 || 120.75 || 118.88 || 114.38 || 107.63 || 102.00 || 98.25 || 97.13 || 96.38 || 90.38 || 90.38
|-
| 122.63 || 121.13 || 120.00 || 117.75 || 112.13 || 103.50 || 99.38 || 97.50 || 96.75 || 96.38 || 91.50 || 91.50
|-
| 115.50 || 113.63 || 111.75 || 109.50 || 104.25 || 93.75 || 99.38 || 98.25 || 94.50 || 94.13 || 94.13 || 94.13
|-
| 113.25 || 111.75 || 110.25 || 107.25 || 100.50 || 91.88 || 100.88 || 99.75 || 94.88 || 94.50 || 94.50 || 94.50
|-
| 112.13 || 110.25 || 108.00 || 104.63 || 94.50 || 90.38 || 101.25 || 100.50 || 97.50 || 97.50 || 97.50 || 97.50
|-
| 110.63 || 105.38 || 99.75 || 95.25 || 89.63 || 90.75 || 105.75 || 105.00 || 101.63 || 100.50 || 100.50 || 100.50
|-
| 109.88 || 104.25 || 97.50 || 92.25 || 109.50 || 110.25 || 109.50 || 110.25 || 108.75 || 108.75 || 108.75 || 108.75
|-
| 108.75 || 103.88 || 99.38 || 94.88 || 115.50 || 118.13 || 118.13 || 118.13 || 117.75 || 117.75 || 117.75 || 117.75
|-
| 108.38 || 106.50 || 104.25 || 101.25 || 118.50 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 122.25 || 122.25
|-
| 108.38 || 108.75 || 108.00 || 106.50 || 122.25 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00
|}
|}


Blending between cold engine and warm engine is done by:
'''*ATTENTION: Only Suitable for M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30*'''


'''idlespeed'''
==INFO==
ip_fac_cam_sp_in_is__tco__tco_st
ip_fac_cam_sp_ex_is__tco__tco_st
For stock engine with stock exhaust and intake flow, above vanos tune works best in that form. For a moded engine,or even stock,but with free flow exhaust (really '''free flow''') and CAI type intake,
cams overlap can help increase volumetric efficiency in the hi revs (over disa switch point ~4000rpm and up ),resulting in more power!
Taking as a base M54B30 engine with '''Intake''' cam '''126''' for max, and '''86''' for min ; '''exhaust''' cam '''-105''' for max ,and '''-80''' for min
'''126 represent intake cam in its max retard form, and 86 in its max advance position'''
'''-105 represent exhaust cam in its max advance position, and -80 in its max retard stage'''


'''partload'''
General rule for overlap : '''Advancing both cams''' - more low end torque and less top end power
ip_fac_cam_sp_in_pl__tco__tco_st
                    '''Retarding both cams''' - less low end torque and more top end power
ip_fac_cam_sp_ex_pl__tco__tco_st


==VANOS Tweak for little extra midrange power==
'''TIPS for full load vanos maps''' : Begin from low rpm with max number for your cam (intake 126 ,exhaust -105) and  progressively reduce number until you reach 4000rpm and lowest cam number (intake 86,exhaust -80)
From 4000rpm and up to max ,use inverse technique, start to rise again numbers, progressively. (every engine responds different by exhaust config) Test combinations until you are happy.
Also, do changes for intake only, leave exhaust alone if you are on stock exhaust manifold.


Insert the following tables into the desired part-load map where you need the effect ( part-load cold / part-load warm / both).
'''note'''  Theoreticaly, there is no risk of damaging engine ( valve hit piston) if you stay within specified range for your particular cams. (m54b30 intake 126/86 ,exhaust -105/-80)


'''*ATTENTION: Only Suitable for M54B30    M54B30    M54B30    M54B30 *'''
example of random overlap for full load and partload maps


''Credits to e46fanatics.com member DoCR  '''ONLY FOR 3L engine M54B30''' ''
=Drive-By-Wire=
This section contains information on how the Drive-By-Wire system is controlled by the DME and how it can be modified.


[[File:vanos_tweak.jpg|frame|left|]]  
==Drivers Wish Tables==
                                                                                                                                                 
[[File:Tunerpro comparison tps sp isapwm sp.PNG|thumbnail|right|Tunerpro comparison of the ip_tps_sp_pvs and ip_isapwm_pvs table.]]
The Drive-By-Wire system is setup so that the ecu uses both the throttle valve and the idle control valve to control how much air is going into the engine.


{| class="wikitable"
* '''ip_tps_sp_pvs''' is used by the ecu to decide how much it should open the throttle for a given pvs input.
|+ VANOS Tweak maps in table form for copy and pasting into TunerPro M54B30 ONLY
 
! Exhaust cam setpoint part-load !! Intake cam setpoint part-load
* '''ip_isapwm_pvs''' is used by the ecu to decide how much idle control valve duty cycle should be used for a given pvs input.
|-
 
|
If we look at these tables side by side we can see that a stock ecu is setup to primarily use the idle control valve to control airflow when the pvs input is in the range between 0° and 15° and when the pvs input is higher the ecu will switch over to the throttle valve.
{|class="wikitable" border="1" style="width: 450pt; margin: auto; border-collapse:collapse; text-align:right;"
 
| -105.0 || -105.0 || -105.0 || -104.6 || -103.1 || -97.5 || -96.0 || -96.8 || -98.3 || -104.3 || -99.0 || -99.0
==Drivers Wish Input Correction==
|-
The MS43 actively limits how fast the drivers requested pvs input can increase to provide a smoother driving experience.
| -105.0 || -104.6 || -103.9 || -102.0 || -99.0 || -96.0 || -95.3 || -96.4 || -97.9 || -103.9 || -98.6 || -98.6
 
|-
'''ip_pvs_cor_max_rpl_[gear]''' is used by the ecu to decide if the drivers requested pvs input should be limited. The values in the table is the lower limit and the X-axis is the upper limit.  
| -104.6 || -103.9 || -100.9 || -97.5 || -93.8 || -92.6 || -93.4 || -94.9 || -96.4 || -101.6 || -97.5 || -97.5
If the drivers requested pvs input is between these values then the ecu will start limiting the pvs input.
|-
 
| -103.9 || -102.4 || -96.4 || -92.6 || -88.9 || -88.1 || -90.0 || -91.5 || -93.8 || -97.1 || -91.9 || -91.9
If the following conditions are met then the ecu will not try to start limiting the pvs input:
|-
* The driver requested pvs input is decreasing.
| -103.1 || -101.6 || -94.9 || -91.1 || -87.4 || -86.6 || -88.5 || -90.4 || -92.6 || -96.0 || -90.8 || -90.8
* The driver requested pvs input change gradient is larger than '''c_pvs_grd_max_rpl'''(59,99° pvs).
|-
* The clutch is pressed.
| -100.9 || -98.6 || -90.4 || -87.0 || -85.9 || -85.1 || -85.9 || -88.5 || -91.1 || -95.6 || -90.4 || -90.4
* The driver requested pvs input is higher than '''c_pvs_cor_max_rpl'''(42,5° PVS)
|-
 
| -99.0 || -96.4 || -88.5 || -85.9 || -85.1 || -84.8 || -85.5 || -88.9 || -94.1 || -97.5 || -95.3 || -95.3
When the ecu starts limiting the pvs input then the pvs input will be increased by the value taken from '''ip_pvs_cor_rpl_lgrd_[gear]''' until the following conditions are met:
|-
*The limitation duration specified in '''ip_t_pvs_cor_rpl_[gear]''' has expired.
| -97.9 || -95.3 || -87.8 || -85.9 || -85.1 || -85.1 || -85.9 || -91.9 || -97.5 || -100.9 || -99.0 || -99.0
*The driver requested pvs input change gradient is larger than '''c_pvs_grd_max_rpl'''(59,99° pvs).
  |-
*The limited pvs input is larger than the driver requested pvs input.
| -96.8 || -94.5 || -88.5 || -86.6 || -85.9 || -96.0 || -95.6 || -95.6 || -95.6 || -95.6 || -95.6 || -97.5
 
|-
If any of those conditions are met then the ecu will use the driver requested pvs input and will not start limiting the pvs input again until the time specified in '''c_t_dly_pvs_cor_rpl'''(0,2s) has expired.
| -95.6 || -94.1 || -91.1 || -88.5 || -88.5 || -99.8 || -101.6 || -101.6 || -101.6 || -101.6 || -100.5 || -101.3
 
|-
The easiest way to disable this function is to set either '''c_pvs_cor_max_rpl''' or '''c_pvs_grd_max_rpl''' to zero.
| -95.3 || -93.8 || -91.9 || -90.4 || -90.4 || -101.3 || -102.0 || -102.0 || -102.0 || -102.0 || -100.9 || -101.6
 
|-
=Full load detection=
| -93.8 || -93.0 || -92.3 || -92.3 || -94.5 || -102.4 || -101.3 || -101.3 || -101.3 || -101.3 || -100.1 || -101.3
Full load detection is the threshold when the ecu stops trying to be economical/ecofriendly and instead focuses on producing power.
|-
 
| -91.9 || -91.5 || -91.9 || -92.3 || -95.3 || -105.8 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -102.8
The full load detection thresholds are pvs based and are defined in the following tables:
|-
 
| -87.8 || -88.5 || -89.6 || -91.1 || -94.9 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
* '''id_pvs_fl__n''' When this threshold is exceeded the injection will operate in open loop and the full load enrichment map is applied to the injection time.
|-
* '''id_pvs_fl_ivvt__n''' When this threshold is exceeded the Vanos will use the full load maps.
| -85.5 || -87.0 || -88.5 || -90.0 || -93.8 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
* '''id_pvs_fl_vim__n_vim_''' When this threshold is exceeded the DISA will use the full load maps.
|-
 
| -84.0 || -85.9 || -87.4 || -88.9 || -93.0 || -106.1 || -106.1 || -106.1 || -106.1 || -106.1 || -105.0 || -103.1
=Idlespeed=
|}
This section contains information on how the idle is controlled by the DME and how it can be modified.
|
 
{| class="wikitable" border="1" style="width: 450pt; margin: auto; border-collapse:collapse; text-align:right;"
MS43 has a few different tables that affect the nominal idle speed
| 126.00 || 126.00 || 125.63 || 124.88 || 123.00 || 118.88 || 113.25 || 106.50 || 105.00 || 104.25 || 108.00 || 108.00
 
|-
* '''ip_n_sp_is''' Nominal idle speed without additional load on the engine.
| 126.00 || 126.00 || 125.25 || 124.50 || 122.63 || 118.50 || 112.88 || 106.50 || 105.00 || 104.25 || 105.00 || 105.00
* '''ip_dri_n_sp_is''' Nominal idle speed with drive engaged for AT gearbox.
|-
* '''ip_acin_n_sp_is''' Nominal idle speed with air conditioner switched on.
| 126.00 || 125.63 || 124.88 || 124.13 || 122.25 || 118.13 || 112.50 || 105.75 || 104.25 || 103.50 || 100.13 || 100.13
* '''ip_dri_acin_n_sp_is''' Nominal idle speed with air conditioner switched on and drive engaged for AT gearbox.
|-
 
| 125.63 || 124.88 || 123.75 || 122.63 || 120.38 || 115.88 || 110.25 || 103.88 || 99.75 || 98.63 || 91.50 || 91.50
The idle setpoint is modified from the nominal speed above by
|-
 
| 125.25 || 124.50 || 123.38 || 121.88 || 119.25 || 114.75 || 109.50 || 102.75 || 98.63 || 97.50 || 90.75 || 90.75
* '''ip_n_sp_add_cha_cdn_bat''' Nominal idle speed offset for battery charge state.
|-
* '''ip_n_sp_add_heat''' Nominal idle speed offset with catalyst heating function active.
| 124.50 || 123.38 || 122.25 || 120.38 || 117.38 || 112.50 || 107.25 || 101.25 || 97.50 || 96.75 || 90.75 || 90.75
 
|-
In addition, the idle speed change rate can be changed with '''c_n_sp_lgrd_is'''.
| 123.38 || 122.25 || 120.75 || 118.88 || 114.38 || 107.63 || 102.00 || 98.25 || 97.13 || 96.38 || 90.38 || 90.38
 
|-
=DTC Suppression=
| 122.63 || 121.13 || 120.00 || 117.75 || 112.13 || 103.50 || 99.38 || 97.50 || 96.75 || 96.38 || 91.50 || 91.50
DTCs can be suppressed in the MS43 by zeroing out the c_abc_... specific codesThe full list of DTCs can be found here:
|-
 
| 115.50 || 113.63 || 111.75 || 109.50 || 104.25 || 93.75 || 99.38 || 98.25 || 94.50 || 94.13 || 94.13 || 94.13
{| class="wikitable mw-collapsible mw-collapsed"
|-
!rowspan="2"|DTC variables
| 113.25 || 111.75 || 110.25 || 107.25 || 100.50 || 91.88 || 100.88 || 99.75 || 94.88 || 94.50 || 94.50 || 94.50
!colspan="2"|OBD
|-
|-
| 112.13 || 110.25 || 108.00 || 104.63 || 94.50 || 90.38 || 101.25 || 100.50 || 97.50 || 97.50 || 97.50 || 97.50
!Code
|-
!Description
| 110.63 || 105.38 || 99.75 || 95.25 || 89.63 || 90.75 || 105.75 || 105.00 || 101.63 || 100.50 || 100.50 || 100.50
|-
|-
|rowspan=1|c_dtc_ad_mec_ref_ivvt_ex
| 109.88 || 104.25 || 97.50 || 92.25 || 109.50 || 110.25 || 109.50 || 110.25 || 108.75 || 108.75 || 108.75 || 108.75
|P0014
|-
|B Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
| 108.75 || 103.88 || 99.38 || 94.88 || 115.50 || 118.13 || 118.13 || 118.13 || 117.75 || 117.75 || 117.75 || 117.75
|-
|-
|rowspan=1|c_dtc_ad_mec_ref_ivvt_in
| 108.38 || 106.50 || 104.25 || 101.25 || 118.50 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 122.25 || 122.25
|P0011
|-
|A Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
| 108.38 || 108.75 || 108.00 || 106.50 || 122.25 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00 || 126.00
|-
|}
|rowspan=2|c_dtc_amp
|}
|P0107
 
|Manifold Absolute Pressure/Barometric Pressure Circuit Low Input
'''*ATTENTION: Only Suitable for M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30  M54B30*'''
|-
 
|P0108
==INFO==
|Manifold Absolute Pressure/Barometric Pressure Circuit High Input
|-
For stock engine with stock exhaust and intake flow, above vanos tune works best in that form. For a moded engine,or even stock,but with free flow exhaust (really '''free flow''') and CAI type intake,
|rowspan=1|c_dtc_bls_plaus
cams overlap can help increase volumetric efficiency in the hi revs (over disa switch point ~4000rpm and up ),resulting in more power!
|P0571
Taking as a base M54B30 engine with '''Intake''' cam '''126''' for max, and '''86''' for min ; '''exhaust''' cam '''-105''' for max ,and '''-80''' for min
|Cruise Control/Brake Switch A Circuit Malfunction
'''126 represent intake cam in its max advance form, and 86 in its max retard position'''
|-
'''-105 represent exhaust cam in its max retard position, and -80 in its max advance stage'''
|rowspan=2|c_dtc_cam
 
|P0340
General rule for overlap : '''Advancing cams''' - more low end torque and less top end power
|Camshaft Position Sensor Circuit Malfunction
                    '''Retarding cams''' - less low end torque and more top end power
|-
 
|P0344
'''TIPS for full load vanos maps''' : Begin from low rpm with max number for your cam (intake 126 ,exhaust -105) and  progressively reduce number until you reach 4000rpm and lowest cam number (intake 86,exhaust -80)
|Camshaft Position Sensor Circuit Intermittent
From 4000rpm and up to max ,use inverse technique, start to rise again numbers, progressively, but don't go to max numbers (doing max numbers you completely take out overlap). Test combinations until you are happy.
|-
Also, do changes for intake only, leave exhaust alone. when you reach the limit for intake, go for exhaust.
|rowspan=2|c_dtc_cam_ex
 
|P0365
'''note'''  Theoreticaly, there is no risk of damaging engine ( valve hit piston) if you stay within specified range for your particular cams. (m54b30 intake 126/86 ,exhaust -105/-80)
|Camshaft Position Sensor 'B' Circuit Bank 1
 
|-
example of random overlap for full load and partload maps
|P0369
 
|Camshaft Position Sensor 'B' Circuit Intermittent Bank 1
[[File:Vanos tweak b30.jpg|1200px]]
|-
 
|rowspan=3|c_dtc_cam_ex_ivvt
=Drive-By-Wire=
|P1529
This section contains information on how the Drive-By-Wire system is controlled by the DME and how it can be modified.
|"B" Camshaft Position Actuator Control Circuit Signal Low Bank 1
 
|-
==Drivers Wish Tables==
|P1530
[[File:Tunerpro comparison tps sp isapwm sp.PNG|thumbnail|right|Tunerpro comparison of the ip_tps_sp_pvs and ip_isapwm_pvs table.]]
|"B" Camshaft Position Actuator Control Circuit Signal High Bank 1
The Drive-By-Wire system is setup so that the ecu uses both the throttle valve and the idle control valve to control how much air is going into the engine.
|-
 
|P1531
* '''ip_tps_sp_pvs''' is used by the ecu to decide how much it should open the throttle for a given pvs input.
|"B" Camshaft Position Actuator Control Open Circuit Bank 1
 
|-
* '''ip_isapwm_pvs''' is used by the ecu to decide how much it should open the idle control valve for a given pvs input.
|rowspan=3|c_dtc_cam_in_ivvt
 
|P1523
If we look at these tables side by side we can see that a stock ecu is setup to primarily use the idle control valve to control airflow when the pvs input is in the range between 0° and 15° and when the pvs input is higher the ecu will also start to open the throttle valve.
|"A" Camshaft Position Actuator Signal Low Bank 1
 
|-
==Drivers Wish Input Correction==
|P1524
The MS43 actively limits how fast the drivers requested pvs input can increase to provide a smoother driving experience.
|"A" Camshaft Position Actuator Signal High Bank 1
 
|-
'''ip_pvs_cor_max_rpl_[gear]''' is used by the ecu to decide if the drivers requested pvs input should be limited. The values in the table is the lower limit and the X-axis is the upper limit.
|P1525
If the drivers requested pvs input is between these values then the ecu will start limiting the pvs input.
|"A" Camshaft Position Actuator Control Open Circuit Bank 1
 
|-
If the following conditions are met then the ecu will not try to start limiting the pvs input:
|rowspan=1|c_dtc_can_boff
* The driver requested pvs input is decreasing.
|P1610
* The driver requested pvs input change gradient is larger than '''c_pvs_grd_max_rpl'''(59,99° pvs).
|CANbus offline
* The clutch is pressed.
|-
* The driver requested pvs input is higher than '''c_pvs_cor_max_rpl'''(42,5° PVS)
|rowspan=1|c_dtc_cat_diag_1
 
|P0420
When the ecu starts limiting the pvs input then the pvs input will be increased by the value taken from '''ip_pvs_cor_rpl_lgrd_[gear]''' until the following conditions are met:
|Catalyst System Efficiency Below Threshold (Bank 1)
*The limitation duration specified in '''ip_t_pvs_cor_rpl_[gear]''' has expired.
|-
*The driver requested pvs input change gradient is larger than '''c_pvs_grd_max_rpl'''(59,99° pvs).
|rowspan=1|c_dtc_cat_diag_2
*The limited pvs input is larger than the driver requested pvs input.
|P0430
 
|Catalyst System Efficiency Below Threshold (Bank 2)
If any of those conditions are met then the ecu will use the driver requested pvs input and will not start limiting the pvs input again until the time specified in '''c_t_dly_pvs_cor_rpl'''(0,2s) has expired.
|-
 
|rowspan=1|c_dtc_cat_eff_1
The easiest way to disable this function is to set either '''c_pvs_cor_max_rpl''' or '''c_pvs_grd_max_rpl''' to zero.
|P0421
 
|Warm Up Catalyst Efficiency Below Threshold (Bank 1)
=Full load detection=
|-
Full load detection is the threshold when the ecu stops trying to be economical/ecofriendly and instead focuses on producing power.
|rowspan=1|c_dtc_cat_eff_2
 
|P0431
The full load detection thresholds are pvs based and are defined in the following tables:
|Warm Up Catalyst Efficiency Below Threshold (Bank 2)
 
|-
* '''id_pvs_fl__n''' When this threshold is exceeded the injection will operate in open loop and the full load enrichment map is applied to the injection time.
|rowspan=1|c_dtc_cc
* '''id_pvs_fl_ivvt__n''' When this threshold is exceeded the Vanos will use the full load maps.
|-
* '''id_pvs_fl_vim__n_vim_''' When this threshold is exceeded the DISA will use the full load maps.
|rowspan=3|c_dtc_cps
 
|P0443
=Idlespeed=
|Evaporative Emission Control System Purge Control Valve Circuit Malfunction
This section contains information on how the idle is controlled by the DME and how it can be modified.
|-
 
|P0444
MS43 has a few different tables that affect the nominal idle speed
|Evaporative Emission Control System Purge Control Valve Circuit Open
 
* '''ip_n_sp_is''' Nominal idle speed without additional load on the engine.
* '''ip_dri_n_sp_is''' Nominal idle speed with drive engaged for AT gearbox.
* '''ip_acin_n_sp_is''' Nominal idle speed with air conditioner switched on.
* '''ip_dri_acin_n_sp_is''' Nominal idle speed with air conditioner switched on and drive engaged for AT gearbox.
 
The idle setpoint is modified from the nominal speed above by
 
* '''ip_n_sp_add_cha_cdn_bat''' Nominal idle speed offset for battery charge state.
* '''ip_n_sp_add_heat''' Nominal idle speed offset with catalyst heating function active.
 
In addition, the idle speed change rate can be changed with '''c_n_sp_lgrd_is'''.
 
=DTC Suppression=
DTCs can be suppressed in the MS43 by zeroing out the c_abc_... specific codes.  The full list of DTCs can be found here:
 
{| class="wikitable mw-collapsible mw-collapsed"
!rowspan="2"|DTC variables
!colspan="2"|OBD
|-
|-
!Code
|P0445
!Description
|Evaporative Emission Control System Purge Control Valve Circuit Shorted
|-
|-
|rowspan=1|c_dtc_ad_mec_ref_ivvt_ex
|rowspan=2|c_dtc_crk
|P0014
|P0335
|B Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
|Crankshaft Position Sensor A Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_ad_mec_ref_ivvt_in
|P0339
|P0011
|Crankshaft Position Sensor A Circuit Intermittent
|A Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
|-
|-
|rowspan=2|c_dtc_amp
|rowspan=1|c_dtc_cs
|P0107
|P0xxx
|Manifold Absolute Pressure/Barometric Pressure Circuit Low Input
|Clutch Switch
|-
|-
|P0108
|rowspan=1|c_dtc_ct
|Manifold Absolute Pressure/Barometric Pressure Circuit High Input
|-
|-
|rowspan=1|c_dtc_bls_plaus
|rowspan=1|c_dtc_ctoc
|P0571
|Cruise Control/Brake Switch A Circuit Malfunction
|-
|-
|rowspan=2|c_dtc_cam
|rowspan=1|c_dtc_diagcps
|P0340
|P0441
|Camshaft Position Sensor Circuit Malfunction
|Evaporative Emission Control System Incorrect Purge Flow
|-
|-
|P0344
|rowspan=3|c_dtc_dmtl
|Camshaft Position Sensor Circuit Intermittent
|P1444
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Open Circuit
|-
|-
|rowspan=2|c_dtc_cam_ex
|P1445
|P0365
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal Low
|Camshaft Position Sensor 'B' Circuit Bank 1
|-
|-
|P0369
|P1446
|Camshaft Position Sensor 'B' Circuit Intermittent Bank 1
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal High
|-
|-
|rowspan=3|c_dtc_cam_ex_ivvt
|rowspan=2|c_dtc_dmtl_leak
|P1529
|P0455
|"B" Camshaft Position Actuator Control Circuit Signal Low Bank 1
|Evaporative Emission Control System Leak Detected (gross leak)
|-
|-
|P1530
|P0456
|"B" Camshaft Position Actuator Control Circuit Signal High Bank 1
|EVAP Leak Monitor Small Leak Detected
|-
|-
|P1531
|rowspan=3|c_dtc_dmtlm
|"B" Camshaft Position Actuator Control Open Circuit Bank 1
|P1447
|Diagnostic Module Tank Leakage (DM-TL) Pump Too High During Switching
|-
|-
|rowspan=3|c_dtc_cam_in_ivvt
|P1448
|P1523
|Diagnostic Module Tank Leakage (DM-TL) Pump Too Low During Switching
|"A" Camshaft Position Actuator Signal Low Bank 1
|-
|-
|P1524
|P1449
|"A" Camshaft Position Actuator Signal High Bank 1
|Diagnostic Module Tank Leakage (DM-TL) Pump Too High
|-
|-
|P1525
|rowspan=1|c_dtc_ecf
|"A" Camshaft Position Actuator Control Open Circuit Bank 1
|P0480
|Cooling Fan 1 Control Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_can_boff
|rowspan=2|c_dtc_ect
|P1610
|P1619
|CANbus offline
|MAP Cooling Control Circuit Signal Low
|-
|-
|rowspan=1|c_dtc_cat_diag_1
|P1620
|P0420
|MAP Cooling Control Circuit Signal High
|Catalyst System Efficiency Below Threshold (Bank 1)
|-
|-
|rowspan=1|c_dtc_cat_diag_2
|rowspan=1|c_dtc_ect_mec
|P0430
|P0128
|Catalyst System Efficiency Below Threshold (Bank 2)
|Range/Performance Problem In Thermostat
|-
|-
|rowspan=1|c_dtc_cat_eff_1
|rowspan=1|c_dtc_ecu
|P0421
|P0604
|Warm Up Catalyst Efficiency Below Threshold (Bank 1)
|Internal Control Module Random Access Memory (RAM) Error
|-
|-
|rowspan=1|c_dtc_cat_eff_2
|rowspan=2|c_dtc_ef
|P0431
|P0477
|Warm Up Catalyst Efficiency Below Threshold (Bank 2)
|Exhaust Pressure Control Valve Low
|-
|-
|rowspan=1|c_dtc_cc
|P0478
|Exhaust Pressure Control Valve High
|-
|-
|rowspan=3|c_dtc_cps
|rowspan=1|c_dtc_er_ad
|P0443
|P0xxx
|Evaporative Emission Control System Purge Control Valve Circuit Malfunction
|Misfire adaptation
|-
|-
|P0444
|rowspan=2|c_dtc_igcfb_0
|Evaporative Emission Control System Purge Control Valve Circuit Open
|P0351
|Ignition Coil 1 Primary/Secondary Circuit Malfunction
|-
|-
|P0445
|P1301
|Evaporative Emission Control System Purge Control Valve Circuit Shorted
|Misfiring Cylinder 1
|-
|-
|rowspan=2|c_dtc_crk
|rowspan=2|c_dtc_igcfb_1
|P0335
|P0355
|Crankshaft Position Sensor A Circuit Malfunction
|Ignition Coil 5 Primary/Secondary Circuit Malfunction
|-
|-
|P0339
|P1305
|Crankshaft Position Sensor A Circuit Intermittent
|Misfiring Cylinder 5
|-
|-
|rowspan=1|c_dtc_cs
|rowspan=2|c_dtc_igcfb_2
|P0xxx
|P0353
|Clutch Switch
|Ignition Coil 3 Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_ct
|P1303
|Misfiring Cylinder 3
|-
|-
|rowspan=1|c_dtc_ctoc
|rowspan=2|c_dtc_igcfb_3
|P0356
|Ignition Coil 6 Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_diagcps
|P1306
|P0441
|Misfiring Cylinder 6
|Evaporative Emission Control System Incorrect Purge Flow
|-
|-
|rowspan=3|c_dtc_dmtl
|rowspan=2|c_dtc_igcfb_4
|P1444
|P0352
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Open Circuit
|Ignition Coil 2 Primary/Secondary Circuit Malfunction
|-
|-
|P1445
|P1302
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal Low
|Misfiring Cylinder 2
|-
|-
|P1446
|rowspan=2|c_dtc_igcfb_5
|Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal High
|P0354
|Ignition Coil 4 Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=2|c_dtc_dmtl_leak
|P1304
|P0455
|Misfiring Cylinder 4
|Evaporative Emission Control System Leak Detected (gross leak)
|-
|-
|P0456
|rowspan=2|c_dtc_imob
|EVAP Leak Monitor Small Leak Detected
|P1660
|EWS system
|-
|-
|rowspan=3|c_dtc_dmtlm
|P1666
|P1447
|EWS system
|Diagnostic Module Tank Leakage (DM-TL) Pump Too High During Switching
|-
|-
|P1448
|rowspan=1|c_dtc_is
|Diagnostic Module Tank Leakage (DM-TL) Pump Too Low During Switching
|P0505
|Idle Control System Malfunction
|-
|-
|P1449
|rowspan=3|c_dtc_isa_1
|Diagnostic Module Tank Leakage (DM-TL) Pump Too High
|P1506
|Idle Speed Control Valve Open Solenoid Control Circuit Signal High
|-
|-
|rowspan=1|c_dtc_ecf
|P1507
|P0480
|Idle Speed Control Valve Open Solenoid Control Circuit Signal Low
|Cooling Fan 1 Control Circuit Malfunction
|-
|-
|rowspan=2|c_dtc_ect
|P1508
|P1619
|Idle Speed Control Valve Opening Solenoid Control Open Circuit
|MAP Cooling Control Circuit Signal Low
|-
|-
|P1620
|rowspan=3|c_dtc_isa_2
|MAP Cooling Control Circuit Signal High
|P1502
|Idle Speed Control Valve Closing Solenoid Control Circuit Signal High or Low
|-
|-
|rowspan=1|c_dtc_ect_mec
|P1503
|P0128
|Idle Speed Control Valve Closing Solenoid Control Circuit Signal Low
|Range/Performance Problem In Thermostat
|-
|-
|rowspan=1|c_dtc_ecu
|P1504
|P0604
|Idle Speed Control Valve Closing Solenoid Control Open Circuit
|Internal Control Module Random Access Memory (RAM) Error
|-
|-
|rowspan=2|c_dtc_ef
|rowspan=3|c_dtc_iv_0
|P0477
|P0201
|Exhaust Pressure Control Valve Low
|Injector Circuit Malfunction - Cylinder 1
|-
|-
|P0478
|P0261
|Exhaust Pressure Control Valve High
|Cylinder 1 Injector Circuit Low
|-
|-
|rowspan=1|c_dtc_er_ad
|P0262
|P0xxx
|Cylinder 1 Injector Circuit High
|Misfire adaptation
|-
|-
|rowspan=2|c_dtc_igcfb_0
|rowspan=3|c_dtc_iv_1
|P0351
|P0205
|Ignition Coil 1 Primary/Secondary Circuit Malfunction
|Injector Circuit Malfunction - Cylinder 5
|-
|-
|P1301
|P0273
|Misfiring Cylinder 1
|Cylinder 5 Injector Circuit Low
|-
|-
|rowspan=2|c_dtc_igcfb_1
|P0274
|P0355
|Cylinder 5 Injector Circuit High
|Ignition Coil 5 Primary/Secondary Circuit Malfunction
|-
|-
|P1305
|rowspan=3|c_dtc_iv_2
|Misfiring Cylinder 5
|P0203
|Injector Circuit Malfunction - Cylinder 3
|-
|-
|rowspan=2|c_dtc_igcfb_2
|P0267
|P0353
|Cylinder 3 Injector Circuit Low
|Ignition Coil 3 Primary/Secondary Circuit Malfunction
|-
|-
|P1303
|P0268
|Misfiring Cylinder 3
|Cylinder 3 Injector Circuit High
|-
|-
|rowspan=2|c_dtc_igcfb_3
|rowspan=3|c_dtc_iv_3
|P0356
|P0206
|Ignition Coil 6 Primary/Secondary Circuit Malfunction
|Injector Circuit Malfunction - Cylinder 6
|-
|-
|P1306
|P0276
|Misfiring Cylinder 6
|Cylinder 6 Injector Circuit Low
|-
|-
|rowspan=2|c_dtc_igcfb_4
|P0277
|P0352
|Cylinder 6 Injector Circuit High
|Ignition Coil 2 Primary/Secondary Circuit Malfunction
|-
|-
|P1302
|rowspan=3|c_dtc_iv_4
|Misfiring Cylinder 2
|P0202
|Injector Circuit Malfunction - Cylinder 2
|-
|-
|rowspan=2|c_dtc_igcfb_5
|P0264
|P0354
|Cylinder 2 Injector Circuit Low
|Ignition Coil 4 Primary/Secondary Circuit Malfunction
|-
|-
|P1304
|P0265
|Misfiring Cylinder 4
|Cylinder 2 Injector Circuit High
|-
|-
|rowspan=2|c_dtc_imob
|rowspan=3|c_dtc_iv_5
|P1660
|P0204
|EWS system
|Injector Circuit Malfunction - Cylinder 4
|-
|-
|P1666
|P0270
|EWS system
|Cylinder 4 Injector Circuit Low
|-
|-
|rowspan=1|c_dtc_is
|P0271
|P0505
|Cylinder 4 Injector Circuit High
|Idle Control System Malfunction
|-
|-
|rowspan=3|c_dtc_isa_1
|rowspan=1|c_dtc_knk_1
|P1506
|P0327
|Idle Speed Control Valve Open Solenoid Control Circuit Signal High
|Knock Sensor 1 Circuit Low Input (Bank 1 or Single Sensor)
|-
|-
|P1507
|rowspan=1|c_dtc_knk_2
|Idle Speed Control Valve Open Solenoid Control Circuit Signal Low
|P0332
|Knock Sensor 2 Circuit Low Input (Bank 2)
|-
|-
|P1508
|rowspan=2|c_dtc_lam_dly_down_1
|Idle Speed Control Valve Opening Solenoid Control Open Circuit
|P0096
|Intake Air Temperature Sensor 2 Circuit Range/Performance
|-
|-
|rowspan=3|c_dtc_isa_2
|P0097
|P1502
|Intake Air Temperature Sensor 2 Circuit Low
|Idle Speed Control Valve Closing Solenoid Control Circuit Signal High or Low
|-
|-
|P1503
|rowspan=2|c_dtc_lam_dly_down_2
|Idle Speed Control Valve Closing Solenoid Control Circuit Signal Low
|P0098
|Intake Air Temperature Sensor 2 Circuit High
|-
|-
|P1504
|P0099
|Idle Speed Control Valve Closing Solenoid Control Open Circuit
|Intake Air Temperature Sensor 2 Circuit Intermittent/Erratic
|-
|-
|rowspan=3|c_dtc_iv_0
|rowspan=2|c_dtc_lam_dly_up_1
|P0201
|P1090
|Injector Circuit Malfunction - Cylinder 1
|Pre-Catalyst Fuel Trim Too Lean Bank 1
|-
|-
|P0261
|P1092
|Cylinder 1 Injector Circuit Low
|Pre-Catalyst Fuel Trim Too Lean Bank 2
|-
|-
|P0262
|rowspan=2|c_dtc_lam_dly_up_2
|Cylinder 1 Injector Circuit High
|P1091
|Pre-Catalyst Fuel Trim Too Rich Bank 1
|-
|-
|rowspan=3|c_dtc_iv_1
|P1093
|P0205
|Pre-Catalyst Fuel Trim Too Rich Bank 2
|Injector Circuit Malfunction - Cylinder 5
|-
|-
|P0273
|rowspan=3|c_dtc_lam_lim_1
|Cylinder 5 Injector Circuit Low
|P1083
|Fuel Control Mixture Lean (Bank 1 Sensor 1)
|-
|-
|P0274
|P1084
|Cylinder 5 Injector Circuit High
|Fuel Control Mixture Rich (Bank 1 Sensor 1)
|-
|-
|rowspan=3|c_dtc_iv_2
|P1314
|P0203
|Fuel System Error
|Injector Circuit Malfunction - Cylinder 3
|-
|-
|P0267
|rowspan=3|c_dtc_lam_lim_2
|Cylinder 3 Injector Circuit Low
|P1085
|Fuel Control Mixture Lean (Bank 2 Sensor 1)
|-
|-
|P0268
|P1086
|Cylinder 3 Injector Circuit High
|Fuel Control Mixture Rich (Bank 2 Sensor 1)
|-
|-
|rowspan=3|c_dtc_iv_3
|P1314
|P0206
|Fuel System Error
|Injector Circuit Malfunction - Cylinder 6
|-
|-
|P0276
|rowspan=3|c_dtc_lam_stop_1
|Cylinder 6 Injector Circuit Low
|P0171
|System too Lean (Bank 1)
|-
|-
|P0277
|P0172
|Cylinder 6 Injector Circuit High
|System too Rich (Bank 1)
|-
|-
|rowspan=3|c_dtc_iv_4
|P1314
|P0202
|Fuel System Error
|Injector Circuit Malfunction - Cylinder 2
|-
|-
|P0264
|rowspan=3|c_dtc_lam_stop_2
|Cylinder 2 Injector Circuit Low
|P0174
|System too Lean (Bank 2)
|-
|-
|P0265
|P0175
|Cylinder 2 Injector Circuit High
|System too Rich (Bank 2)
|-
|-
|rowspan=3|c_dtc_iv_5
|P1314
|P0204
|Fuel System Error
|Injector Circuit Malfunction - Cylinder 4
|-
|-
|P0270
|rowspan=1|c_dtc_leak_big
|Cylinder 4 Injector Circuit Low
|P0441
|Evaporative Emission Control System Incorrect Purge Flow
|-
|-
|P0271
|rowspan=1|c_dtc_leak_small
|Cylinder 4 Injector Circuit High
|P0442
|Evaporative Emission Control System Leak Detected (small leak)
|-
|-
|rowspan=1|c_dtc_knk_1
|rowspan=3|c_dtc_ls_frq_1
|P0327
|P0133
|Knock Sensor 1 Circuit Low Input (Bank 1 or Single Sensor)
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 1)
|-
|-
|rowspan=1|c_dtc_knk_2
|P1087
|P0332
|O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 1)
|Knock Sensor 2 Circuit Low Input (Bank 2)
|-
|-
|rowspan=2|c_dtc_lam_dly_down_1
|P1088
|P0096
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
|Intake Air Temperature Sensor 2 Circuit Range/Performance
|-
|-
|P0097
|rowspan=3|c_dtc_ls_frq_2
|Intake Air Temperature Sensor 2 Circuit Low
|P0153
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 1)
|-
|-
|rowspan=2|c_dtc_lam_dly_down_2
|P1089
|P0098
|O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 2)
|Intake Air Temperature Sensor 2 Circuit High
|-
|-
|P0099
|P1094
|Intake Air Temperature Sensor 2 Circuit Intermittent/Erratic
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 2 Sensor 1)
|-
|-
|rowspan=2|c_dtc_lam_dly_up_1
|rowspan=3|c_dtc_lsh_down_1
|P1090
|P0036
|Pre-Catalyst Fuel Trim Too Lean Bank 1
|HO2S Heater Control Circuit Bank 1 Sensor 2
|-
|-
|P1092
|P0037
|Pre-Catalyst Fuel Trim Too Lean Bank 2
|HO2S Heater Circuit Low Voltage Bank 1 Sensor 2
|-
|-
|rowspan=2|c_dtc_lam_dly_up_2
|P0038
|P1091
|HO2S Heater Circuit High Voltage Bank 1 Sensor 2
|Pre-Catalyst Fuel Trim Too Rich Bank 1
|-
|-
|P1093
|rowspan=3|c_dtc_lsh_down_2
|Pre-Catalyst Fuel Trim Too Rich Bank 2
|P0056
|HO2S Heater Circuit Bank 2 Sensor 2
|-
|-
|rowspan=3|c_dtc_lam_lim_1
|P0057
|P1083
|HO2S Heater Circuit Low Voltage Bank 2 Sensor 2
|Fuel Control Mixture Lean (Bank 1 Sensor 1)
|-
|-
|P1084
|P0058
|Fuel Control Mixture Rich (Bank 1 Sensor 1)
|HO2S Heater Circuit High Voltage Bank 2 Sensor 2
|-
|-
|P1314
|rowspan=1|c_dtc_lsh_obd_down_1
|Fuel System Error
|P0141
|O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 2)
|-
|-
|rowspan=3|c_dtc_lam_lim_2
|rowspan=1|c_dtc_lsh_obd_down_2
|P1085
|P0161
|Fuel Control Mixture Lean (Bank 2 Sensor 1)
|O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 2)
|-
|-
|P1086
|rowspan=1|c_dtc_lsh_obd_up_1
|Fuel Control Mixture Rich (Bank 2 Sensor 1)
|P0135
|O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 1)
|-
|-
|P1314
|rowspan=1|c_dtc_lsh_obd_up_2
|Fuel System Error
|P0155
|O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 1)
|-
|-
|rowspan=3|c_dtc_lam_stop_1
|rowspan=3|c_dtc_lsh_up_1
|P0171
|P0030
|System too Lean (Bank 1)
|HO2S Heater Control Circuit Bank 1 Sensor 1
|-
|-
|P0172
|P0031
|System too Rich (Bank 1)
|HO2S Heater Circuit Low Voltage Bank 1 Sensor 1
|-
|-
|P1314
|P0032
|Fuel System Error
|HO2S Heater Circuit High Voltage Bank 1 Sensor 1
|-
|-
|rowspan=3|c_dtc_lam_stop_2
|rowspan=3|c_dtc_lsh_up_2
|P0174
|P0050
|System too Lean (Bank 2)
|HO2S Heater Circuit Bank 2 Sensor 1
|-
|-
|P0175
|P0051
|System too Rich (Bank 2)
|HO2S Heater Circuit Low Voltage Bank 2 Sensor 1
|-
|-
|P1314
|P0052
|Fuel System Error
|HO2S Heater Circuit High Voltage Bank 2 Sensor 1
|-
|-
|rowspan=1|c_dtc_leak_big
|rowspan=2|c_dtc_maf
|P0441
|P0102
|Evaporative Emission Control System Incorrect Purge Flow
|Mass or Volume Air Flow Circuit Low Input
|-
|-
|rowspan=1|c_dtc_leak_small
|P0103
|P0442
|Mass or Volume Air Flow Circuit High Input
|Evaporative Emission Control System Leak Detected (small leak)
|-
|-
|rowspan=3|c_dtc_ls_frq_1
|rowspan=1|c_dtc_maf_mafm
|P0133
|P0101
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 1)
|Mass or Volume Air Flow Circuit Range/Performance Problem
|-
|-
|P1087
|rowspan=2|c_dtc_mec_isa
|O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 1)
|P1500
|Idle Speed Control Valve Stuck Open
|-
|-
|P1088
|P1501
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
|Idle Speed Control Valve Stuck Closed
|-
|-
|rowspan=3|c_dtc_ls_frq_2
|rowspan=1|c_dtc_mec_ivvt_ex
|P0153
|P0015
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 1)
|B Camshaft Position - Timing Over-Retarded (Bank 1)
|-
|-
|P1089
|rowspan=1|c_dtc_mec_ivvt_in
|O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 2)
|P0012
|A Camshaft Position - Timing Over-Retarded (Bank 1)
|-
|-
|P1094
|rowspan=1|c_dtc_mec_sav
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 2 Sensor 1)
|P0411
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=3|c_dtc_lsh_down_1
|rowspan=1|c_dtc_min_saf
|P0036
|P0491
|HO2S Heater Control Circuit Bank 1 Sensor 2
|Secondary Air Injection System Insufficient Flow Bank 1
|-
|-
|P0037
|rowspan=4|c_dtc_mis_0
|HO2S Heater Circuit Low Voltage Bank 1 Sensor 2
|P0301
|Cylinder 1 Misfire Detected
|-
|-
|P0038
|P0313
|HO2S Heater Circuit High Voltage Bank 1 Sensor 2
|Misfire Detected With Low Fuel Level
|-
|-
|rowspan=3|c_dtc_lsh_down_2
|P1342
|P0056
|Misfire During Start Cylinder 1
|HO2S Heater Circuit Bank 2 Sensor 2
|-
|-
|P0057
|P1343
|HO2S Heater Circuit Low Voltage Bank 2 Sensor 2
|Misfire Cylinder 1 With Fuel Cut-off
|-
|-
|P0058
|rowspan=4|c_dtc_mis_1
|HO2S Heater Circuit High Voltage Bank 2 Sensor 2
|P0305
|Cylinder 5 Misfire Detected
|-
|-
|rowspan=1|c_dtc_lsh_obd_down_1
|P0313
|P0141
|Misfire Detected With Low Fuel Level
|O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 2)
|-
|-
|rowspan=1|c_dtc_lsh_obd_down_2
|P1350
|P0161
|Misfire During Start Cylinder 5
|O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 2)
|-
|-
|rowspan=1|c_dtc_lsh_obd_up_1
|P1351
|P0135
|Misfire Cylinder 5 With Fuel Cut-off
|O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 1)
|-
|-
|rowspan=1|c_dtc_lsh_obd_up_2
|rowspan=4|c_dtc_mis_2
|P0155
|P0303
|O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 1)
|Cylinder 3 Misfire Detected
|-
|-
|rowspan=3|c_dtc_lsh_up_1
|P0313
|P0030
|Misfire Detected With Low Fuel Level
|HO2S Heater Control Circuit Bank 1 Sensor 1
|-
|-
|P0031
|P1346
|HO2S Heater Circuit Low Voltage Bank 1 Sensor 1
|Misfire During Start Cylinder 3
|-
|-
|P0032
|P1347
|HO2S Heater Circuit High Voltage Bank 1 Sensor 1
|Misfire Cylinder 3 With Fuel Cut-off
|-
|-
|rowspan=3|c_dtc_lsh_up_2
|rowspan=4|c_dtc_mis_3
|P0050
|P0306
|HO2S Heater Circuit Bank 2 Sensor 1
|Cylinder 6 Misfire Detected
|-
|-
|P0051
|P0313
|HO2S Heater Circuit Low Voltage Bank 2 Sensor 1
|Misfire Detected With Low Fuel Level
|-
|-
|P0052
|P1352
|HO2S Heater Circuit High Voltage Bank 2 Sensor 1
|Misfire During Start Cylinder 6
|-
|-
|rowspan=2|c_dtc_maf
|P1353
|P0102
|Misfire Cylinder 6 With Fuel Cut-off
|Mass or Volume Air Flow Circuit Low Input
|-
|-
|P0103
|rowspan=4|c_dtc_mis_4
|Mass or Volume Air Flow Circuit High Input
|P0302
|Cylinder 2 Misfire Detected
|-
|-
|rowspan=1|c_dtc_maf_mafm
|P0313
|P0101
|Misfire Detected With Low Fuel Level
|Mass or Volume Air Flow Circuit Range/Performance Problem
|-
|-
|rowspan=2|c_dtc_mec_isa
|P1344
|P1500
|Misfire During Start Cylinder 2
|Idle Speed Control Valve Stuck Open
|-
|-
|P1501
|P1345
|Idle Speed Control Valve Stuck Closed
|Misfire Cylinder 2 With Fuel Cut-off
|-
|-
|rowspan=1|c_dtc_mec_ivvt_ex
|rowspan=4|c_dtc_mis_5
|P0015
|P0304
|B Camshaft Position - Timing Over-Retarded (Bank 1)
|Cylinder 4 Misfire Detected
|-
|-
|rowspan=1|c_dtc_mec_ivvt_in
|P0313
|P0012
|Misfire Detected With Low Fuel Level
|A Camshaft Position - Timing Over-Retarded (Bank 1)
|-
|-
|rowspan=1|c_dtc_mec_sav
|P1348
|P0411
|Misfire During Start Cylinder 4
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=1|c_dtc_min_saf
|P1349
|P0491
|Misfire Cylinder 4 With Fuel Cut-off
|Secondary Air Injection System Insufficient Flow Bank 1
|-
|rowspan=4|c_dtc_mis_0
|P0301
|Cylinder 1 Misfire Detected
|-
|-
|rowspan=1|c_dtc_mis_f
|P0313
|P0313
|Misfire Detected With Low Fuel Level
|Misfire Detected With Low Fuel Level
|-
|-
|P1342
|rowspan=1|c_dtc_mis_mul
|Misfire During Start Cylinder 1
|P0300
|Random/Multiple Cylinder Misfire Detected
|-
|-
|P1343
|rowspan=1|c_dtc_mis_t_s
|Misfire Cylinder 1 With Fuel Cut-off
|P0336
|Crankshaft Position Sensor A Circuit Range/Performance
|-
|-
|rowspan=4|c_dtc_mis_1
|rowspan=1|c_dtc_mon_plaus
|P0305
|P1602
|Cylinder 5 Misfire Detected
|Control Module Self Test, Control Module Defective
|-
|-
|P0313
|rowspan=1|c_dtc_mon_tqi_av
|Misfire Detected With Low Fuel Level
|P1603
|Control Module Self Test, Torque Monitoring
|-
|-
|P1350
|rowspan=1|c_dtc_mon_tqi_n_max
|Misfire During Start Cylinder 5
|P1604
|Control Module Self Test, Speed Monitoring
|-
|-
|P1351
|rowspan=1|c_dtc_msw_2
|Misfire Cylinder 5 With Fuel Cut-off
|P1565
|Multifunction Steering Wheel
|-
|-
|rowspan=4|c_dtc_mis_2
|rowspan=1|c_dtc_msw_3
|P0303
|P1565
|Cylinder 3 Misfire Detected
|Multifunction Steering Wheel
|-
|-
|P0313
|rowspan=1|c_dtc_msw_tog
|Misfire Detected With Low Fuel Level
|P1567
|Multifunction Steering Wheel, toggle bit
|-
|-
|P1346
|rowspan=1|c_dtc_mtc_ctl_1
|Misfire During Start Cylinder 3
|P1638
|Throttle Valve Position Control; Throttle Stuck Temporarily
|-
|-
|P1347
|rowspan=1|c_dtc_mtc_ctl_2
|Misfire Cylinder 3 With Fuel Cut-off
|P1639
|Throttle Valve Position Control; Throttle Stuck Permanently
|-
|-
|rowspan=4|c_dtc_mis_3
|rowspan=1|c_dtc_mtc_ctl_3
|P0306
|P1637
|Cylinder 6 Misfire Detected
|Throttle Valve Position Control; Control Deviation
|-
|-
|P0313
|rowspan=1|c_dtc_mtc_dr
|Misfire Detected With Low Fuel Level
|P1636
|Throttle Valve Control Circuit
|-
|-
|P1352
|rowspan=1|c_dtc_otcc
|Misfire During Start Cylinder 6
|P1477
|Leakage Diagnostic Pump Reed Switch Did Not Open
|-
|-
|P1353
|rowspan=2|c_dtc_pvs_1
|Misfire Cylinder 6 With Fuel Cut-off
|P1122
|Pedal Position 1 Low Input
|-
|-
|rowspan=4|c_dtc_mis_4
|P1123
|P0302
|Pedal Position 1 High Input
|Cylinder 2 Misfire Detected
|-
|-
|P0313
|rowspan=2|c_dtc_pvs_2
|Misfire Detected With Low Fuel Level
|P1222
|Pedal Position Sensor 2 Low Input
|-
|-
|P1344
|P1223
|Misfire During Start Cylinder 2
|Pedal Position Sensor 2 High Input
|-
|-
|P1345
|rowspan=1|c_dtc_pvs_bls
|Misfire Cylinder 2 With Fuel Cut-off
|P0xxx
|Simultaneous activation of accelerator pedal and brake pedal
|-
|-
|rowspan=4|c_dtc_mis_5
|rowspan=1|c_dtc_pvs_bls_bts_plaus
|P0304
|P0xxx
|Cylinder 4 Misfire Detected
|Brakelight switch and brake test switch not plausible
|-
|-
|P0313
|rowspan=1|c_dtc_pvs_pvs
|Misfire Detected With Low Fuel Level
|P1120
|Pedal Position Sensor Circuit
|-
|-
|P1348
|rowspan=1|c_dtc_pvs_ratio
|Misfire During Start Cylinder 4
|P1121
|Pedal Position 1 Range/Performance Problem
|-
|-
|P1349
|rowspan=1|c_dtc_r_igcfb
|Misfire Cylinder 4 With Fuel Cut-off
|P0350
|Ignition Coil Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_mis_f
|rowspan=2|c_dtc_rly_accout
|P0313
|P0532
|Misfire Detected With Low Fuel Level
|A/C Refrigerant Pressure Sensor Circuit Low Input
|-
|-
|rowspan=1|c_dtc_mis_mul
|P0533
|P0300
|A/C Refrigerant Pressure Sensor Circuit High Input
|Random/Multiple Cylinder Misfire Detected
|-
|-
|rowspan=1|c_dtc_mis_t_s
|rowspan=2|c_dtc_rly_efp
|P0336
|P0231
|Crankshaft Position Sensor A Circuit Range/Performance
|Fuel Pump Secondary Circuit Low
|-
|-
|rowspan=1|c_dtc_mon_plaus
|P0232
|P1602
|Fuel Pump Secondary Circuit High
|Control Module Self Test, Control Module Defective
|-
|-
|rowspan=1|c_dtc_mon_tqi_av
|rowspan=1|c_dtc_rly_main
|P1603
|P1695
|Control Module Self Test, Torque Monitoring
|Main relay
|-
|-
|rowspan=1|c_dtc_mon_tqi_n_max
|rowspan=1|c_dtc_rly_main_dly
|P1604
|P0xxx
|Control Module Self Test, Speed Monitoring
|Delay in main relay
|-
|-
|rowspan=1|c_dtc_msw_2
|rowspan=1|c_dtc_sa_1
|P1565
|P0491
|Multifunction Steering Wheel
|Secondary Air Injection System Insufficient Flow Bank 1
|-
|-
|rowspan=1|c_dtc_msw_3
|rowspan=1|c_dtc_sa_2
|P1565
|P0492
|Multifunction Steering Wheel
|Secondary Air Injection System Insufficient Flow Bank 2
|-
|-
|rowspan=1|c_dtc_msw_tog
|rowspan=1|c_dtc_sa_conf
|P1567
|P0411
|Multifunction Steering Wheel, toggle bit
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=1|c_dtc_mtc_ctl_1
|rowspan=1|c_dtc_safm
|P1638
|P1419
|Throttle Valve Position Control; Throttle Stuck Temporarily
|Secondary Air System Air Mass Flow Sensor Disconnected or Stuck Signal
|-
|-
|rowspan=1|c_dtc_mtc_ctl_2
|rowspan=2|c_dtc_sap
|P1639
|P1413
|Throttle Valve Position Control; Throttle Stuck Permanently
|Secondary Air Injection Pump Relay Control Circuit Signal Low
|-
|-
|rowspan=1|c_dtc_mtc_ctl_3
|P1414
|P1637
|Secondary Air Injection System Monitor Circuit High
|Throttle Valve Position Control; Control Deviation
|-
|-
|rowspan=1|c_dtc_mtc_dr
|rowspan=1|c_dtc_sap_safm
|P1636
|P0411
|Throttle Valve Control Circuit
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=1|c_dtc_otcc
|rowspan=2|c_dtc_sav
|P1477
|P0413
|Leakage Diagnostic Pump Reed Switch Did Not Open
|Secondary Air Injection System Switching Valve A Circuit Open
|-
|-
|rowspan=2|c_dtc_pvs_1
|P0414
|P1122
|Secondary Air Injection System Switching Valve A Circuit Shorted
|Pedal Position 1 Low Input
|-
|-
|P1123
|rowspan=1|c_dtc_sav_1_safm
|Pedal Position 1 High Input
|P0411
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=2|c_dtc_pvs_2
|rowspan=1|c_dtc_sav_safm
|P1222
|P0411
|Pedal Position Sensor 2 Low Input
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|P1223
|rowspan=1|c_dtc_t_igcfb_2
|Pedal Position Sensor 2 High Input
|P0350
|Ignition Coil Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_pvs_bls
|rowspan=1|c_dtc_t_lam_act
|P0xxx
|P0125
|Simultaneous activation of accelerator pedal and brake pedal
|Insufficient Coolant Temperature for Closed Loop Fuel Control
|-
|-
|rowspan=1|c_dtc_pvs_bls_bts_plaus
|rowspan=2|c_dtc_tco
|P0xxx
|P0117
|Brakelight switch and brake test switch not plausible
|Engine Coolant Temperature Circuit Low Input
|-
|-
|rowspan=1|c_dtc_pvs_pvs
|P0118
|P1120
|Engine Coolant Temperature Circuit High Input
|Pedal Position Sensor Circuit
|-
|-
|rowspan=1|c_dtc_pvs_ratio
|rowspan=2|c_dtc_tco_ex
|P1121
|P1111
|Pedal Position 1 Range/Performance Problem
|Engine Coolant Temperature Radiator Outlet Sensor Low Input
|-
|-
|rowspan=1|c_dtc_r_igcfb
|P1112
|P0350
|Engine Coolant Temperature Radiator Outlet Sensor High Input
|Ignition Coil Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=2|c_dtc_rly_accout
|rowspan=1|c_dtc_tco_max
|P0532
|P0116
|A/C Refrigerant Pressure Sensor Circuit Low Input
|Engine Coolant Temperature Circuit Range/Performance Problem
|-
|-
|P0533
|rowspan=1|c_dtc_teg_down_1
|A/C Refrigerant Pressure Sensor Circuit High Input
|P0xxx
|Exhaust gas temperature post-cat, bank1
|-
|-
|rowspan=2|c_dtc_rly_efp
|rowspan=1|c_dtc_teg_down_2
|P0231
|P0431
|Fuel Pump Secondary Circuit Low
|Exhaust gas temperature post-cat, bank2
|-
|-
|P0232
|rowspan=1|c_dtc_teg_up_1
|Fuel Pump Secondary Circuit High
|P0431
|Exhaust gas temperature pre-cat, bank1
|-
|-
|rowspan=1|c_dtc_rly_main
|rowspan=1|c_dtc_teg_up_2
|P1695
|P0431
|Main relay
|Exhaust gas temperature pre-cat, bank2
|-
|-
|rowspan=1|c_dtc_rly_main_dly
|rowspan=2|c_dtc_tia
|P0xxx
|P0112
|Delay in main relay
|Intake Air Temperature Circuit Low Input
|-
|-
|rowspan=1|c_dtc_sa_1
|P0113
|P0491
|Intake Air Temperature Circuit High Input
|Secondary Air Injection System Insufficient Flow Bank 1
|-
|-
|rowspan=1|c_dtc_sa_2
|rowspan=2|c_dtc_toil
|P0492
|P0197
|Secondary Air Injection System Insufficient Flow Bank 2
|Engine Oil Temperature Sensor Low
|-
|-
|rowspan=1|c_dtc_sa_conf
|P0198
|P0411
|Engine Oil Temperature Sensor High
|Secondary Air Injection System Incorrect Flow Detected
|-
|-
|rowspan=1|c_dtc_safm
|rowspan=1|c_dtc_tout_amt_1
|P1419
|P1611
|Secondary Air System Air Mass Flow Sensor Disconnected or Stuck Signal
|Serial Communicating Link Transmission Control Module
|-
|-
|rowspan=2|c_dtc_sap
|rowspan=1|c_dtc_tout_asr_1
|P1413
|P1613
|Secondary Air Injection Pump Relay Control Circuit Signal Low
|Time-out ASR1
|-
|-
|P1414
|rowspan=1|c_dtc_tout_asr_3
|Secondary Air Injection System Monitor Circuit High
|P1613
|Time-out ASR3
|-
|-
|rowspan=1|c_dtc_sap_safm
|rowspan=1|c_dtc_tout_cng_ecu_1
|P0411
|P0xxx
|Secondary Air Injection System Incorrect Flow Detected
|Time-out CNG ECU
|-
|-
|rowspan=2|c_dtc_sav
|rowspan=1|c_dtc_tout_etcu_1
|P0413
|P0600
|Secondary Air Injection System Switching Valve A Circuit Open
|Serial Communication Link Malfunction
|-
|-
|P0414
|rowspan=1|c_dtc_tout_icl_2
|Secondary Air Injection System Switching Valve A Circuit Shorted
|P1612
|Time-out instrument cluster2
|-
|-
|rowspan=1|c_dtc_sav_1_safm
|rowspan=1|c_dtc_tout_icl_3
|P0411
|P1612
|Secondary Air Injection System Incorrect Flow Detected
|Time-out instrument cluster3
|-
|-
|rowspan=1|c_dtc_sav_safm
|rowspan=2|c_dtc_tout_imob
|P0411
|P1661
|Secondary Air Injection System Incorrect Flow Detected
|Time-out EWS system
|-
|-
|rowspan=1|c_dtc_t_igcfb_2
|P1662
|P0350
|Time-out EWS system
|Ignition Coil Primary/Secondary Circuit Malfunction
|-
|-
|rowspan=1|c_dtc_t_lam_act
|rowspan=1|c_dtc_tout_pste_1
|P0125
|P0xxx
|Insufficient Coolant Temperature for Closed Loop Fuel Control
|Time-out PowerSteering
|-
|-
|rowspan=2|c_dtc_tco
|rowspan=2|c_dtc_tps_1
|P0117
|P0122
|Engine Coolant Temperature Circuit Low Input
|Throttle/Pedal Position Sensor/Switch A Circuit Low Input
|-
|-
|P0118
|P0123
|Engine Coolant Temperature Circuit High Input
|Throttle/Pedal Position Sensor/Switch A Circuit High Input
|-
|-
|rowspan=2|c_dtc_tco_ex
|rowspan=2|c_dtc_tps_2
|P1111
|P0222
|Engine Coolant Temperature Radiator Outlet Sensor Low Input
|Throttle/Pedal Position Sensor/Switch B Circuit Low Input
|-
|-
|P1112
|P0223
|Engine Coolant Temperature Radiator Outlet Sensor High Input
|Throttle/Pedal Position Sensor/Switch B Circuit High Input
|-
|-
|rowspan=1|c_dtc_tco_max
|rowspan=4|c_dtc_tps_ad
|P0116
|P1632
|Engine Coolant Temperature Circuit Range/Performance Problem
|Throttle Valve Adaptation; Adaptation Condition Not Met
|-
|-
|rowspan=1|c_dtc_teg_down_1
|P1633
|P0xxx
|Throttle Valve Adaptation; Limp Home Position
|Exhaust gas temperature post-cat, bank1
|-
|-
|rowspan=1|c_dtc_teg_down_2
|P1634
|P0431
|Throttle Valve Adaptation; Spring Test Failed
|Exhaust gas temperature post-cat, bank2
|-
|-
|rowspan=1|c_dtc_teg_up_1
|P1635
|P0431
|Throttle Valve Adaptation; Lower Mechanical Stop Not Adapted
|Exhaust gas temperature pre-cat, bank1
|-
|-
|rowspan=1|c_dtc_teg_up_2
|rowspan=1|c_dtc_tps_maf_1
|P0431
|P0121
|Exhaust gas temperature pre-cat, bank2
|Throttle/Pedal Position Sensor/Switch A Circuit Range/Performance Problem
|-
|-
|rowspan=2|c_dtc_tia
|rowspan=1|c_dtc_tps_maf_2
|P0112
|P0221
|Intake Air Temperature Circuit Low Input
|Throttle/Pedal Position Sensor/Switch B Circuit Range/Performance Problem
|-
|-
|P0113
|rowspan=1|c_dtc_tps_st_chk_1
|Intake Air Temperature Circuit High Input
|P1675
|TPS stuck, sensor 1 check condition
|-
|-
|rowspan=2|c_dtc_toil
|rowspan=1|c_dtc_tps_st_chk_2
|P0197
|P1694
|Engine Oil Temperature Sensor Low
|TPS stuck, sensor 2 check condition
|-
|-
|P0198
|rowspan=3|c_dtc_tqi_amt_1
|Engine Oil Temperature Sensor High
|P1653
|Indicated torque not matching AMT gearbox request
|-
|-
|rowspan=1|c_dtc_tout_amt_1
|P1654
|P1611
|Indicated torque not matching AMT gearbox request
|Serial Communicating Link Transmission Control Module
|-
|-
|rowspan=1|c_dtc_tout_asr_1
|P1670
|P1613
|Indicated torque not matching AMT gearbox request
|Time-out ASR1
|-
|-
|rowspan=1|c_dtc_tout_asr_3
|rowspan=1|c_dtc_tqi_lim
|P1613
|P1605
|Time-out ASR3
|Limiting criteria for indicated torque
|-
|-
|rowspan=1|c_dtc_tout_cng_ecu_1
|rowspan=1|c_dtc_tqi_n_max_nvmy_mon
|P0xxx
|P1604
|Time-out CNG ECU
|Control Module Self Test, Speed Monitoring
|-
|-
|rowspan=1|c_dtc_tout_etcu_1
|rowspan=3|c_dtc_var_amp
|P0600
|P1171
|Serial Communication Link Malfunction
|Ambient Pressure Sensor Learned Value Error
|-
|-
|rowspan=1|c_dtc_tout_icl_2
|P1172
|P1612
|Ambient Pressure Sensor Rationality Check
|Time-out instrument cluster2
|-
|-
|rowspan=1|c_dtc_tout_icl_3
|P1173
|P1612
|Ambient Pressure Sensor Rationality Check
|Time-out instrument cluster3
|-
|-
|rowspan=2|c_dtc_tout_imob
|rowspan=1|c_dtc_vcc_poti_1
|P1661
|P1624
|Time-out EWS system
|Pedal Position Sensor Potentiometer Supply Channel 1 Electrical
|-
|-
|P1662
|rowspan=1|c_dtc_vcc_poti_2
|Time-out EWS system
|P1625
|Pedal Position Sensor Potentiometer Supply Channel 2 Electrical
|-
|-
|rowspan=1|c_dtc_tout_pste_1
|rowspan=2|c_dtc_vdmtl
|P0xxx
|P1451
|Time-out PowerSteering
|Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal Low
|-
|-
|rowspan=2|c_dtc_tps_1
|P1452
|P0122
|Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal High
|Throttle/Pedal Position Sensor/Switch A Circuit Low Input
|-
|-
|P0123
|rowspan=2|c_dtc_vim
|Throttle/Pedal Position Sensor/Switch A Circuit High Input
|P1512
|DISA Control Circuit Signal Low
|-
|-
|rowspan=2|c_dtc_tps_2
|P1513
|P0222
|DISA Control Circuit Signal High
|Throttle/Pedal Position Sensor/Switch B Circuit Low Input
|-
|-
|P0223
|rowspan=3|c_dtc_vls_down_1
|Throttle/Pedal Position Sensor/Switch B Circuit High Input
|P0137
|O2 Sensor Circuit Low Voltage (Bank 1 Sensor 2)
|-
|-
|rowspan=4|c_dtc_tps_ad
|P0138
|P1632
|O2 Sensor Circuit High Voltage (Bank 1 Sensor 2)
|Throttle Valve Adaptation; Adaptation Condition Not Met
|-
|-
|P1633
|P0140
|Throttle Valve Adaptation; Limp Home Position
|O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 2)
|-
|-
|P1634
|rowspan=3|c_dtc_vls_down_2
|Throttle Valve Adaptation; Spring Test Failed
|P0157
|O2 Sensor Circuit Low Voltage (Bank 2 Sensor 2)
|-
|-
|P1635
|P0158
|Throttle Valve Adaptation; Lower Mechanical Stop Not Adapted
|O2 Sensor Circuit High Voltage (Bank 2 Sensor 2)
|-
|-
|rowspan=1|c_dtc_tps_maf_1
|P0160
|P0121
|O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 2)
|Throttle/Pedal Position Sensor/Switch A Circuit Range/Performance Problem
|-
|-
|rowspan=1|c_dtc_tps_maf_2
|rowspan=2|c_dtc_vls_down_act_chk_1
|P0221
|P1143
|Throttle/Pedal Position Sensor/Switch B Circuit Range/Performance Problem
|???
|-
|-
|rowspan=1|c_dtc_tps_st_chk_1
|P1144
|P1675
|???
|TPS stuck, sensor 1 check condition
|-
|-
|rowspan=1|c_dtc_tps_st_chk_2
|rowspan=2|c_dtc_vls_down_act_chk_2
|P1694
|P1149
|TPS stuck, sensor 2 check condition
|???
|-
|-
|rowspan=3|c_dtc_tqi_amt_1
|P1150
|P1653
|???
|Indicated torque not matching AMT gearbox request
|-
|-
|P1654
|rowspan=1|c_dtc_vls_down_afl_1
|Indicated torque not matching AMT gearbox request
|P0139
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
|-
|-
|P1670
|rowspan=1|c_dtc_vls_down_afl_2
|Indicated torque not matching AMT gearbox request
|P0159
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
|-
|-
|rowspan=1|c_dtc_tqi_lim
|rowspan=1|c_dtc_vls_down_post_puc_1
|P1605
|P1097
|Limiting criteria for indicated torque
|O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 1 Sensor 1)
|-
|-
|rowspan=1|c_dtc_tqi_n_max_nvmy_mon
|rowspan=1|c_dtc_vls_down_post_puc_2
|P1604
|P1098
|Control Module Self Test, Speed Monitoring
|O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 2 Sensor 2)
|-
|-
|rowspan=3|c_dtc_var_amp
|rowspan=1|c_dtc_vls_down_t_1
|P1171
|P0139
|Ambient Pressure Sensor Learned Value Error
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
|-
|-
|P1172
|rowspan=1|c_dtc_vls_down_t_2
|Ambient Pressure Sensor Rationality Check
|P0159
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
|-
|-
|P1173
|rowspan=3|c_dtc_vls_jump_1
|Ambient Pressure Sensor Rationality Check
|P1088
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
|-
|-
|rowspan=1|c_dtc_vcc_poti_1
|P1119
|P1624
|???
|Pedal Position Sensor Potentiometer Supply Channel 1 Electrical
|-
|-
|rowspan=1|c_dtc_vcc_poti_2
|P1178
|P1625
|O2 Sensor Signal Circuit Slow Switching From Rich to Lean (Bank 1 Sensor 1)
|Pedal Position Sensor Potentiometer Supply Channel 2 Electrical
|-
|-
|rowspan=2|c_dtc_vdmtl
|rowspan=3|c_dtc_vls_jump_2
|P1451
|P1095
|Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal Low
|O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 1 Sensor 1)
|-
|-
|P1452
|P1096
|Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal High
|O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 2 Sensor 1)
|-
|-
|rowspan=2|c_dtc_vim
|P1114
|P1512
|???
|DISA Control Circuit Signal Low
|-
|-
|P1513
|rowspan=1|c_dtc_vls_stk_1
|DISA Control Circuit Signal High
|P0136
|O2 Sensor Circuit Malfunction (Bank 1 Sensor 2)
|-
|-
|rowspan=3|c_dtc_vls_down_1
|rowspan=1|c_dtc_vls_stk_2
|P0137
|P0156
|O2 Sensor Circuit Low Voltage (Bank 1 Sensor 2)
|O2 Sensor Circuit Malfunction (Bank 2 Sensor 2)
|-
|-
|P0138
|rowspan=3|c_dtc_vls_up_1
|O2 Sensor Circuit High Voltage (Bank 1 Sensor 2)
|P0131
|O2 Sensor Circuit Low Voltage (Bank 1 Sensor 1)
|-
|-
|P0140
|P0132
|O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 2)
|O2 Sensor Circuit High Voltage (Bank 1 Sensor 1)
|-
|-
|rowspan=3|c_dtc_vls_down_2
|P0134
|P0157
|O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 1)
|O2 Sensor Circuit Low Voltage (Bank 2 Sensor 2)
|-
|-
|P0158
|rowspan=3|c_dtc_vls_up_2
|O2 Sensor Circuit High Voltage (Bank 2 Sensor 2)
|P0151
|O2 Sensor Circuit Low Voltage (Bank 2 Sensor 1)
|-
|-
|P0160
|P0152
|O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 2)
|O2 Sensor Circuit High Voltage (Bank 2 Sensor 1)
|-
|-
|rowspan=2|c_dtc_vls_down_act_chk_1
|P0154
|P1143
|O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 1)
|???
|-
|-
|P1144
|rowspan=1|c_dtc_vs
|???
|P0500
|-
|Vehicle Speed Sensor Malfunction
|rowspan=2|c_dtc_vls_down_act_chk_2
|}
|P1149
 
|???
=Extra Features=
|-
==Idle Control Valve Delete==
|P1150
[[File:Tunerpro icv delete 20180813.PNG ‎|300px|thumb|right|TunerPro ICV Delete]]
|???
Removing the idle control valve (ICV) / idle speed actuator (ISA) is possible due to the motorized throttle body the M54 engine uses.
|-
 
|rowspan=1|c_dtc_vls_down_afl_1
Disconnect the idle control valve connector and either remove the idle control valve and plug the hole in the intake manifold (preferred) or use something to seal the idle control valve air tight.
|P0139
 
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
The way the ICV delete works is by utilizing the '''ip_pvs_isa_isapwm''' table. This table dictates how much pvs input should be added to the drivers requested pvs input for a given idle control valve load.
|-
 
|rowspan=1|c_dtc_vls_down_afl_2
In a stock engine this table is used to extend the idle control valve load so when the idle control valve load goes above 100% the throttle will start to open to deliver more air into the engine.
|P0159
 
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
By rescaling this table we are able to completely remove the idle control valve.
|-
 
|rowspan=1|c_dtc_vls_down_post_puc_1
But be aware that the values in '''ip_pvs_isa_isapwm''' is dependent on the values in '''ip_tps_sp_pvs''' so if '''ip_tps_sp_pvs''' is modified then '''ip_pvs_isa_isapwm''' also needs to be re-scaled accordingly to maintain a stable idle.
|P1097
 
|O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 1 Sensor 1)
The '''ip_pvs_isa_isapwm''' values in the picture are made for a M54B30 so the values may need to be modified to get a stable idle with M54B25 and M54B22 as these engines have a smaller throttle body.
|-
 
|rowspan=1|c_dtc_vls_down_post_puc_2
This modification modifies a monitoring table so the calibration addition checksum needs to be corrected or disabled after applying the changes.
|P1098
 
|O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 2 Sensor 2)
[[#Checksums|Check here for more information about checksums.]]
|-
 
|rowspan=1|c_dtc_vls_down_t_1
==Exhaust Pop Modifications==
|P0139
 
|O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
The current solution for forced exhaust pop is to change the overrun fuel cutoff detection from the ECU. This is accomplished by raising the minimum RPM threshold to a number of revolutions the engine can't reach.
|-
 
|rowspan=1|c_dtc_vls_down_t_2
This behaviour can be set different depending on your air condition is turned on or off, because the MS43 has two seperate tables for overrun fuel cutoff handling depending on the engine state ACCIN.
|P0159
 
|O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
''Note: Theorethically every engine state can be used to switch between the two tables. Another one that could be handy is CRU_MAIN_SWI, this state is also represented by the green cruise control light in the cluster. Requires program code editting.''
|-
 
|rowspan=3|c_dtc_vls_jump_1
 
|P1088
'''Exhaust pops with activated A/C'''
|O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
 
|-
[[File:TP_PUCpop_ACon.png|TunerPro depiction of overrun fuelcut mod]]
|P1119
 
|???
This screenshot shows the values to have pops when A/C is on. To get exhaust pops with the A/C disabled leave the lower tables stock and only edit the uper ones.
|-
 
|P1178
Using these settings B25 engine users have reported throttle hang, poor idling, and decreased performance. Test these settings at your own responsibility.
|O2 Sensor Signal Circuit Slow Switching From Rich to Lean (Bank 1 Sensor 1)
 
|-
 
|rowspan=3|c_dtc_vls_jump_2
'''Timer configurable exhaust pops'''
|P1095
 
|O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 1 Sensor 1)
It is also possible to tweak gear related timers that will let the engine pop for a given time. After this timer is zero, the engine will go back into overrun-fuelcut. So it's pretty easy to have 2 or 3 pretty loud pops followed by "silence".
|-
 
|P1096
The following screenshot is an example for the values at M54B30 which give 3 loud pops.
|O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 2 Sensor 1)
 
|-
[[File:Old_M54B30 MS430056 ExhaustPop-timer.jpg|300px|thumb|none|TunerPro depiction of timered overrun fuelcut mod]]
|P1114
 
|???
If you want to relay fuel cutoff while standing, adjust c_t_puc_deacc_vs to your desired time.
|-
 
|rowspan=1|c_dtc_vls_stk_1
 
|P0136
For anyone wanting the best of both worlds:
|O2 Sensor Circuit Malfunction (Bank 1 Sensor 2)
 
|-
[[File:Old_M54B30 MS430056 ExhaustPop-timer PUCpopACoff.jpg|300px|thumb|none|TunerPro depiction of combined overrun fuelcut mod]]
|rowspan=1|c_dtc_vls_stk_2
 
|P0156
==Forced OBD Readiness==
|O2 Sensor Circuit Malfunction (Bank 2 Sensor 2)
 
|-
Common solution for forced OBD readiness monitors seems to be setting the following config switches
|rowspan=3|c_dtc_vls_up_1
 
|P0131
[[File:ForcedOBD.jpg|300px|thumb|none|TunerPro depiction of config switches]]
|O2 Sensor Circuit Low Voltage (Bank 1 Sensor 1)
 
|-
 
|P0132
*'''c_conf_eobd''' If this value is set to one then the ECU will be able to report the traveled distance with the MIL active.
|O2 Sensor Circuit High Voltage (Bank 1 Sensor 1)
*'''c_obd_diag_state''' This value represents which OBD standard that the ecu complies to. If set to one the ecu will report that it complies to the OBD-II standard as defined by CARB. A full list of what the values corresponds to can be found [https://en.wikipedia.org/wiki/OBD-II_PIDs#Service_01 here] under the "Service 01 PID 1C" section.
|-
 
|P0134
==Engine coolant temperature control==
|O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 1)
The M54 engine family is fitted with an e-thermostat that the ecu can control to alter the engine coolant temperature.
|-
By altering these values we can change how hot the engine will run in different conditions.
|rowspan=3|c_dtc_vls_up_2
 
|P0151
* c_tam_min_ect - Minimum ambient temperature threshold for e-thermostat activation
|O2 Sensor Circuit Low Voltage (Bank 2 Sensor 1)
* c_tia_min_ect - Minimum intake air temperature threshold for e-thermostat activation
|-
* c_toil_min_ect - Minimum oil temperature threshold for e-thermostat activation
|P0152
 
|O2 Sensor Circuit High Voltage (Bank 2 Sensor 1)
* c_tia_max_ect - Maximum intake air temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tia_max
|-
* c_tco_ex_max_ect - Maximum radiator outlet temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tco_ex_max
|P0154
* c_toil_max_ect - Maximum oil temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tia_max
|O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 1)
 
|-
* c_tco_sp_toil_min - Target coolant temperature until the thresholds set by c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded.
|rowspan=1|c_dtc_vs
* c_tco_sp_tco_ex_max - Target coolant temperature if c_tco_ex_max_ect is exceeded
|P0500
* c_tco_sp_tia_max - Target coolant temperature if c_toil_max_ect or c_tia_max_ect are exceeded
|Vehicle Speed Sensor Malfunction
* c_tco_bol_ect - Target coolant temperature if an external low coolant temperature request has been received
|}
 
* c_tco_min_ect - Minimum coolant temperature threshold for full energization of the e-thermostat
 
* id_tco_sp_ect__n__maf_sub - Target coolant temperature when c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded - AC off
* id_tco_sp_ect_acin__n__maf_sub - Target coolant temperature Target coolant temperature when c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded - AC on
 
* ip_ectpwm_i__tco_dif - e-thermostat I component
* ip_ectpwm_p__tco_dif - e-thermostat P component
* id_ectpwm_add__n__tco_sp - Required e-thermostat duty cycle to achieve coolant temperature setpoint
 
 
[[File:Coolant-config.JPG|300px|thumb|none|TunerPro depiction of Coolant Maps]]
 
==Secondary Air Pump Delete==
For forced OBD Readiness set C_CONF_SAP: "1"


=Extra Features=
==Lambda Sensor Configuration==
==Idle Control Valve Delete==
Constant "c_conf_cat" has five different options which represent the ecu´s ability to work with different lambda probe setups.
[[File:Tunerpro icv delete 20180813.PNG ‎|300px|thumb|right|TunerPro ICV Delete]]
Removing the idle control valve (ICV) / idle speed actuator (ISA) is possible due to the motorized throttle body the M54 engine uses.


Disconnect the idle control valve connector and either remove the idle control valve and plug the hole in the intake manifold (prefered) or use something to seal the idle control valve air tight.
Set the following values that suit you needs:


The way the ICV delete works is by utilizing the '''ip_pvs_isa_isapwm''' table. This table dictates how much pvs input should be added to the drivers requested pvs input for a given idle control valve duty cycle.
*0: Single bank with one pre-cat lambda sensor or cat-preparation (SA199)
*1: Twin bank with two pre-cat lambda sensors or cat-preparation (SA199) and automatic learning of postcat sensors
*2: Single bank with one precat lambda sensor and one post-cat lambda sensor
*3: Twin bank with two pre-cat lambda sensors and one post-cat lambda sensors
*4: Twin bank with two pre-cat lambda sensors and two post-cat lambda sensors


In a stock engine this table is used to extend the duty cycle of the idle control valve so when the duty cycle of the idle control valve reaches 100% the throttle will start to open deliver more air.
The automatic learning process of post-cat lambda sensors starts after deleting "learned variants" with INPA.


By rescaling this table we are able to completely remove the idle control valve.
After installing catless headers, it could be useful to eliminate post-cat sensors with setting "c_conf_cat" to "1".


But be aware that the values in '''ip_pvs_isa_isapwm''' is dependent on the values in '''ip_tps_sp_pvs''' so if '''ip_tps_sp_pvs''' is modified then '''ip_pvs_isa_isapwm''' also needs to be rescaled accordingly to maintain a stable idle.
==MAF Sensor Scalar Adjustments==
The standard MAF sensor map is a non-interpolated 16*16 lookup table, that can also be shown as 1*256 "voltage (v) vs. airflow (kg/h)" table. The 10 bit analog to digital conversion is reduced to 8 bits and 4 bits of each are used to lookup the MAF value.  


The '''ip_pvs_isa_isapwm''' values in the picture are made for a M54B30 so the values may need to be modified to get a stable idle with M54B25 and M54B22 as these engines have a smaller throttle body.
There are differences in flow between the M54B22/M54B25 and M54B30 MAF sensors, as the diametre is different. Differences in cross sectional area would be expected to rescale the values, but the sensor is part of the tube and not easily modified.


This modification modifies a monitoring table so the calibration addition checksum needs to be corrected or disabled after applying the changes.
Replacement slot type sensors (Ford based) are often used in high output blow through configurations for turbocharging, as the BMW OEM sensors are not well suited to boost in blow through setup.  


[[#Checksums|Check here for more information about checksums.]]
"Engine load (mg/stroke) is proportional to "airflow (kg/h)" divided by RPM and is used to reference most of the important injection and ignition tables.


==Exhaust Pop Modifications==
There is a factory airflow limit of 1024kg/h that can be doubled or quadrupled with a patch that has undergone basic testing, but the maximum engine load is still limited to 1389mg/stroke, unless there are massive code rewrites.


The current solution for forced exhaust pop is to change the overrun fuel cutoff detection from the ECU. This is accomplished by raising the minimum RPM threshold to a number of revolutions the engine can't reach.
A M54B30 pulls about 600mg/stroke in cold conditions with a maximum airflow of about 630kg/h.


This behaviour can be set different depending on your air condition is turned on or off, because the MS43 has two seperate tables for overrun fuel cutoff handling depending on the engine state ACCIN.
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.


''Note: Theorethically every engine state can be used to switch between the two tables. Another one that could be handy is CRU_MAIN_SWI, this state is also represented by the green cruise control light in the cluster. Requires program code editting.''
==RPM limiter==
The Siemens MS43 has two gear dependant rpm limiters, a softlimiter and a hardlimiter for each gearbox type (manual or automatic transmission).


The softlimiter works by cutting injectors based on fuelcut pattern, whereas the hardlimiter immediately cuts off all cylinders.


'''Exhaust pops with activated A/C'''
*ID_N_MAX_AT: softlimiter for AT gearbox
*ID_N_MAX_MAX_AT: hardlimiter for AT gearbox
*ID_N_MAX_MT: softlimiter for MT gearbox
*ID_N_MAX_MAX_MT: hardlimiter for MT gearbox


[[File:TP_PUCpop_ACon.png|TunerPro depiction of overrun fuelcut mod]]
In addition to that, you will want to raise "ID_N_MAX_VS_MAX_AT" or "ID_N_MAX_VS_MAX_MT" slightly above the hardlimiter.


This screenshot shows the values to have pops when A/C is on. To get exhaust pops with the A/C disabled leave the lower tables stock and only edit the uper ones.
The Siemens MS43 gets it's vehicle speed signal (_VS) from the ABS control unit and not from a sensor inside the differential, like older chassis.


Using these settings B25 engine users have reported throttle hang, poor idling, and decreased performance. Test these settings at your own responsibility.
In case the ECU doesn't get a valid vehicle speed signal, for example when you put an M54 engine in an older chassis, or strip out the ABS block for weight reasons, a third RPM limiter is applied:


*C_N_MAX_VS_DIAG: RPM limiter in case of missing vehicle speed


'''Timer configurable exhaust pops'''
==VMAX limiter==
The Siemens MS43 has two gearbox dependant speed limiters, set them to 255 to have unrestricted vehicle speed.


It is also possible to tweak gear related timers that will let the engine pop for a given time. After this timer is zero, the engine will go back into overrun-fuelcut. So it's pretty easy to have 2 or 3 pretty loud pops followed by "silence".
*C_VS_MAX_AT_1
*C_VS_MAX_MT_1


The following screenshot is an example for the values at M54B30 which give 3 loud pops.
==Fake Race Camshafts / Lumpy Idle Mod==


[[File:Old_M54B30 MS430056 ExhaustPop-timer.jpg|300px|thumb|none|TunerPro depiction of timered overrun fuelcut mod]]
Faking some serious camshafts is pretty easy as M54 engine has adjustable camshafts. So basically whats happening when going camshafts is, the valve overlap will be increased by a huge amount. This means, intake and exhaust valves are open at the same time.  


If you want to relay fuel cutoff while standing, adjust c_t_puc_deacc_vs to your desired time.
*ip_cam_sp_tco_1_ex_is__n__maf_iv
*ip_cam_sp_tco_2_ex_is__n__maf_iv
*ip_cam_sp_tco_1_in_is__n__maf_iv
*ip_cam_sp_tco_2_in_is__n__maf_iv


*c_n_min_er >idlespeed, to not trigger during when engine idles lumpy.


For anyone wanting the best of both worlds:
Max adjustable value for the different engine specs:


[[File:Old_M54B30 MS430056 ExhaustPop-timer PUCpopACoff.jpg|300px|thumb|none|TunerPro depiction of combined overrun fuelcut mod]]
[[File:Vanos max settings.jpg|300px|thumb|none|Vanos specs]]


==Forced OBD Readiness==
The biggest valve overlap will be achieved when using the lowest adjustable value on the intake side (80° respectively 86°) and the lowest adjustable value on the exhaust side (-80°)


Common solution for forced OBD readiness monitors seems to be setting the following config switches
[[File:Camshaft Mod.jpg|300px|thumb|none|TunerPro depiction of min allowed Vanos setpoints]]


[[File:ForcedOBD.jpg|300px|thumb|none|TunerPro depiction of config switches]]


A good starting point for further optimization could be:


*'''c_conf_eobd''' If this value is set to one then the ECU will be able to report the traveled distance with the MIL active.
[[File:GhostCam.jpg|300px|thumb|none|TunerPro depiction of GhostCam mod]]
*'''c_obd_diag_state''' This value represents which OBD standard that the ecu complies to. If set to one the ecu will report that it complies to the OBD-II standard as defined by CARB. A full list of what the values corresponds to can be found [https://en.wikipedia.org/wiki/OBD-II_PIDs#Service_01 here] under the "Service 01 PID 1C" section.


==Change E-Thermostat Desired Temp Maps==
=Safety Features=
The M54 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:
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!


*C_TCO_SP_toil_MIN (Minimum Oil temp required to then default to EThermostat maps - 0xCA0h - default 105)
==Misfire Detection==
*ID_TCO_SP_ECT (Target Coolant temp without AC - 0x5D3Dh)
*ID_TCO_SP_ACIN_ECT (Target Coolant temp with AC - 0x5D85h)


[[File:Coolant-config.JPG|300px|thumb|none|TunerPro depiction of Coolant Maps]]
*c_n_min_er: minimum engine speed for detection of misfire!
*c_n_max_er: maximum engine speed for detection of misfire!


==Secondary Air Pump Delete==
==Knock Detection==
For forced OBD Readiness set C_CONF_SAP: "1"


==Lambda Sensor Configuration==
*id_iga_dec_knk_1__n: ignition angle reduction based on knock stage1
Constant "c_conf_cat" has five different options which represent the ecu´s ability to work with different lambda probe setups.
*id_iga_dec_knk_2__n: ignition angle reduction based on knock stage2


Set the following values that suit you needs:
==Injection Adaptation==


*0: Single bank with one pre-cat lambda sensor or cat-preparation (SA199)
*c_n_ti_ad_fac_min: min engine speed to allow adapation of fuel trim, multiplicative
*1: Twin bank with two pre-cat lambda sensors or cat-preparation (SA199) and automatic learning of postcat sensors
*c_n_ti_ad_add_max: max engine speed to allow adapation of fuel trim, additive
*2: Single bank with one precat lambda sensor and one post-cat lambda sensor
*3: Twin bank with two pre-cat lambda sensors and one post-cat lambda sensors
*4: Twin bank with two pre-cat lambda sensors and two post-cat lambda sensors


The automatic learning process of post-cat lambda sensors starts after deleting "learned variants" with INPA.
=Special Functions=


After installing catless headers, it could be useful to eliminate post-cat sensors with setting "c_conf_cat" to "1".
'''Please look here for the special functions that need licencing: [[Daniel_F._Special_Functions]]'''


==MAF Sensor Scalar Adjustments==
'''Here are some handy mods when going forced induction [[Forced_Induction_Upgrades]]'''
The standard MAF sensor map is a non-interpolated 16*16 lookup table, that can also be shown as 1*256 "voltage (v) vs. airflow (kg/h)" table. The 10 bit analog to digital conversion is reduced to 8 bits and 4 bits of each are used to lookup the MAF value.
==M Cluster LED Control==
 
After swapping in an M3 cluster into a E46 or M5 cluster into E39, there is no more ecometer displaying the momentary fuel consumption, but a more useful oiltemperature gauge.  
There are differences in flow between the M54B22/M54B25 and M54B30 MAF sensors, as the diametre is different. Differences in cross sectional area would be expected to rescale the values, but the sensor is part of the tube and not easily modified.
 
Replacement slot type sensors (Ford based) are often used in high output blow through configurations for turbocharging, as the BMW OEM sensors are not well suited to boost in blow through setup.
 
"Engine load (mg/stroke) is proportional to "airflow (kg/h)" divided by RPM and is used to reference most of the important injection and ignition tables.
 
There is a factory airflow limit of 1024kg/h that can be doubled or quadrupled with a patch that has undergone basic testing, but the maximum engine load is still limited to 1389mg/stroke, unless there are massive code rewrites.
 
A M54B30 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.
 
==RPM limiter==
The Siemens MS43 has two gear dependant rpm limiters, a softlimiter and a hardlimiter for each gearbox type (manual or automatic transmission).
 
The softlimiter works by cutting injectors based on fuelcut pattern, whereas the hardlimiter immediately cuts off all cylinders.
 
*ID_N_MAX_AT: softlimiter for AT gearbox
*ID_N_MAX_MAX_AT: hardlimiter for AT gearbox
*ID_N_MAX_MT: softlimiter for MT gearbox
*ID_N_MAX_MAX_MT: hardlimiter for MT gearbox
 
In addition to that, you will want to raise "ID_N_MAX_VS_MAX_AT" or "ID_N_MAX_VS_MAX_MT" slightly above the hardlimiter.
 
The Siemens MS43 gets it's vehicle speed signal (_VS) from the ABS control unit and not from a sensor inside the differential, like older chassis.
 
In case the ECU doesn't get a valid vehicle speed signal, for example when you put an M54 engine in an older chassis, or strip out the ABS block for weight reasons, a third RPM limiter is applied:
 
*C_N_MAX_VS_DIAG: RPM limiter in case of missing vehicle speed
 
==VMAX limiter==
The Siemens MS43 has two gearbox dependant speed limiters, set them to 255 to have unrestricted vehicle speed.
 
*C_VS_MAX_AT_1
*C_VS_MAX_MT_1
 
==Fake Race Camshafts / Lumpy Idle Mod==
 
Faking some serious camshafts is pretty easy as M54 engine has adjustable camshafts. So basically whats happening when going camshafts is, the valve overlap will be increased by a huge amount. This means, intake and exhaust valves are open at the same time.
 
*ip_cam_sp_tco_1_ex_is__n__maf_iv
*ip_cam_sp_tco_2_ex_is__n__maf_iv
*ip_cam_sp_tco_1_in_is__n__maf_iv
*ip_cam_sp_tco_2_in_is__n__maf_iv
 
*c_n_min_er >idlespeed, to not trigger during when engine idles lumpy.
 
Max adjustable value for the different engine specs:
 
[[File:Vanos max settings.jpg|300px|thumb|none|Vanos specs]]


The biggest valve overlap will be achieved when using the lowest adjustable value on the intake side (80° respectively 86°) and the lowest adjustable value on the exhaust side (-80°)
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 shiftlights behaviour.


[[File:Camshaft Mod.jpg|300px|thumb|none|TunerPro depiction of min allowed Vanos setpoints]]
Following maps are used:
 
*'''id_icl_led__n''' - Warmuplights - LED switchpoints for the given temperature
 
*'''ldpm_toil_led''' - Warmuplights - axis defining the oiltemperature range in °C
A good starting point for further optimization could be:
*'''id_icl_led__n''' - Shiftlights - LED switchpoints for the given temperature
*'''ldpm_toil_led''' - Shiftlights - axis defining the rpm range


[[File:GhostCam.jpg|300px|thumb|none|TunerPro depiction of GhostCam mod]]
Explaination for the decimal values used:


=Safety Features=
*112 - all LEDs lit
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!
*96 - 4500 and upwards
*80 - 5000 and upwards
*64 - 5500 and upwards
*48 - 6000 and upwards
*32 - 6500 and upwards
*16 - 7000 and upwards
*00 - 7500 lit
*01 - oil warning LED yellow (M5)
*02 - oil warning LED yellow
*04 - coolant warning LED


==Misfire Detection==
Download the warmup and shiftlights patch for TunerPro depending on your software version:
*'''430056:''' [[:File:Siemens_MS43_MS430056_Cluster_LED_Mod_v2.zip|Siemens_MS43_MS430056_Cluster_LED_Mod_v2.zip]]
*'''430066:''' [[:File:Siemens_MS43_MS430066_Cluster_LED_Mod.zip|Siemens_MS43_MS430066_Cluster_LED_Mod.zip]]


*c_n_min_er: minimum engine speed for detection of misfire!
'''Use with 512kByte file only. Checksum correction required!'''
*c_n_max_er: maximum engine speed for detection of misfire!


==Knock Detection==
[[File:TP_MS43_M3_Cluster_Warmuplights.PNG|320|M3 Cluster warmuplight maps]] [[File:TP_MS43_M3_Cluster_Shiftlights.PNG|320|M3 Cluster shiftlight maps]]


*id_iga_dec_knk_1__n: ignition angle reduction based on knock stage1
<youtube>jYAudhc02nQ</youtube>
*id_iga_dec_knk_2__n: ignition angle reduction based on knock stage2
 
==Injection Adaptation==
 
*c_n_ti_ad_fac_min: min engine speed to allow adapation of fuel trim, multiplicative
*c_n_ti_ad_add_max: max engine speed to allow adapation of fuel trim, additive
 
=Special Functions=
 
'''Please look here for the special functions that need licencing: [[Daniel_F._Special_Functions]]'''
 
'''Here are some handy mods when going forced induction [[Forced_Induction_Upgrades]]'''


==Launch Control==
==Launch Control==
Line 1,786: Line 1,703:
Configuration Launch Control
Configuration Launch Control


*Launch_PVS_min  (i suggest to set this switch over 50%. Anything lower may lead to non-working LC)
*Launch_PVS_min  (i suggest to set this switch over 50% and UNDER 70%. Anything different may lead to non-working LC)
*Launch_TCO_min  (and this to "-48" )
*Launch_TCO_min  (and this to "-48" )
*Launch_RPM_max
*Launch_RPM_max

Revision as of 16:49, 16 April 2019

Memory Layout

The MS43 can be seperated into three major sections, first comes the bootloader, then the program code, and last the calibration data.

See this table for file locations:

Start End Section Size
00000 0FFFF Bootloader Code 64 kByte
10000 1FFFF Program Code 384 kByte
20000 2FFFF
30000 3FFFF
40000 4FFFF
50000 5FFFF
60000 6FFFF
70000 7FFFF Calibration Data 64 kByte


Bootloader Section

The bootloader code section is the most important section of the MS43 and doesnt have to be touched for at least 99% of all use cases.

This section is 64 kByte in size and contains the interrupt setups, input and output initializations, as well as immobilizer information and the UIF (user information fields).

The significant difference between the bootloader section and the others is, that it's only one time programmable under normal operation. That means once a byte has been changed from FF to another value, it is not changeable again.

Unlimited write access to the bootloader section can only be archieved through JMGarage Flasher and is ONLY needed for virginizing the ECU to pair it with a different EWS module or to alter the UIF without increasing the flashcounter.

The newest version of immobilizer and checksum delete will not need bootmode flashing.


Programm Code Section

All of the MS43 program code is located here.


Calibration Data Section

Checksums

Checksums are used to verify that the data written to the ROM has not become corrupt.

The MS43 uses three CRC16 checksums that covers the boot, program and calibration sections and two addition checksums that covers the data for the monitoring (_mon_) routines.

The variables that the ECU uses to calculate the addition checksum is located in the program section so tools like Ultimo Checksum Corrector can only correct this checksum in a 512KB file.

Both addition checksums have to be corrected before the CRC16 checksums, as the addition checksums are located inside the CRC16 checksum areas.

The checksums are located at the following addresses:

CRC16 Location
Boot 0x3C24
Program 0x6FDE0
Calibration 0x73FE0
Addition Location
Program Part 1 0x6FDAE
Program Part 2 0x6FD80
Calibration Part 1 0x72FFC
Calibration Part 2 0x72FFE

Disabling Calibration Checksums

Disable CRC16 Checksum

To disable the CRC16 calibration checksum on all firmwares do the following.

Hexeditor
1. Set Word at 0x73FFE to 0xFFFF
2. Set Byte at 0x6FFB0 to 0xA8


Disable Addition Checksum

To disable the addition calibration checksum use one of the following methods.

Tunerpro
1. Set lc_swi_cal_mon_cks to 165
Hexeditor
1. Set the Byte in the table to 0xA5
Firmware Location
430037 0x70CE3
430055 0x70D7C
430056 0x70D7E
430064 0x70DA0
430066 0x70E0A
430069 0x70E07

Fueling

Fuel Injection Maps

The injection maps are based on "engine load (mg/stroke) vs. engine speed (rpm)" and the lookup is injection time in milliseconds.

The lambda sensors for closed loop operation are narrowband. Fuel trim learning only happens during closed loop operation, but the learned fuel trims do affect full throttle fueling as well.

When there is no VANOS fault, the engine interpolates between "Injection time at part-load, cold engine, Vanos I/II" and "Injection time at part-load, warm engine, Vanos I/II", where the numbers I or II indicate the two banks of the straight six engine.

Under VANOS fault conditions, the map "Basic Injection Time (ip_tib)" is used.

"Full load enrichment (ip_ti_fl)" is a multiplier of the part load calculations and added to them.

Blending between cold and warm injection maps is done by weighting factor "ip_fac_pl_ivvt__tco__tco_st" for partload and "ip_fac_is_ivvt__tco__tco_st" for idlespeed

Non Stock Injector Maps

Changing the fuel injectors may be needed when supercharging 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:

  • T_TI_AS_[0-5]
  • c_ti_min_iv

Depending on the injectors you will have to finetune the injector latency compensation (injector dead times) as well:

Attention: This table has a wrong correction factor in almost all available definition files. Change this to "X * 0.032".

  • ip_ti_add_dly__vb

If you happen to have stuttering or unclean combustion when stepping on the gas, rescale the cylinder rewetting tables as well:

  • ip_ti_fast_wf_thd_min__tco
  • ip_ti_slow_wf_thd_min__tco

Go here for a list of suitable fuel injectors and their deadtimes.

Correcting Fuel Consumption Gauge

When changing injectors you will discover that the MPG reading on your cluster or other monitoring apps is off.

The table ip_fco_map_cor__pq_main_col handles injection reporting towards the cluster.

For example: If you lowered your fueling tables by MULTIPLIYING them with 0.3, you must DIVIDE the mentioned table by 0.3 to fix MPG reading.

Upgraded fuel pumps

Under some circumstances, like going forced induction, the OEM fuel pump can't deliver enough fuel to the engine and needs to be upgraded.

Most aftermarket fuelpumps like the Walbros or Deatschwerks don't have a check valve inside and the fuel flows back into the tank once the vehicle is turned off.

The MS43 has two time values (in seconds) for controlling the fuelpump before starting and after stopping the engine:

  • C_T_EFP_PREV: Time the electronic fuel pump relay is on after ignition key ON
  • C_T_EFP: Time delay to shut off the electric fuel pump relay after ignition key OFF

Slightly rising these values may eliminate starting issues.

Timing

Basic Timing Maps

The MS43 uses several ignition maps depending on the engine state and quality of fuel used. Like the injection maps, they are also based on "engine load (mg/stroke) vs. engine speed (rpm)" but obviously the lookup is ignition timing in degrees BTDC (before top dead center).

"Ignition at part-load, RON98 (16x20) Airflow -vs- Engine speed" is the main table used with a healthy engine (so no VANOS fault codes, normal warmed up operating temperature) running RON98/PON93 gasoline.

There is a knock based interpolation between the RON91 and RON98 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 "_CH_" in maps retards ignition during warm up.

Antijerk "_AJ_" retards ignition during rapid throttle opening to smooth out torque (can be removed by increasing c_tco_min_aj to 142.5C. Reported to sometimes cause transitional knock on boosted engines, if so consider adjusting other tables designed for this (tra_knk).

Experience on standard or near standard European 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 RON98 map on a standard car is quite good. Question if fueling could be richened to allow more ignition timing and torque/power.

Vanos

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:

cold engine

  • ip_cam_sp_tco_1_in_is__n__maf_iv(vt)
  • ip_cam_sp_tco_1_in_pl__n__maf_iv(vt)
  • ip_cam_sp_tco_1_in_fl__n

warm engine

  • ip_cam_sp_tco_2_in_is__n__maf_iv
  • ip_cam_sp_tco_2_in_pl__n__maf_iv
  • ip_cam_sp_tco_2_in_fl__n


The main maps used for exhaust camshaft are:

cold engine

  • ip_cam_sp_tco_1_ex_is__n__maf_iv(vt)
  • ip_cam_sp_tco_1_ex_pl__n__maf_iv(vt)
  • ip_cam_sp_tco_1_ex_fl__n

warm engine

  • ip_cam_sp_tco_2_ex_is__n__maf_iv
  • ip_cam_sp_tco_2_ex_pl__n__maf_iv
  • ip_cam_sp_tco_2_ex_fl__n

Blending between cold engine and warm engine is done by:

idlespeed ip_fac_cam_sp_in_is__tco__tco_st ip_fac_cam_sp_ex_is__tco__tco_st

partload ip_fac_cam_sp_in_pl__tco__tco_st ip_fac_cam_sp_ex_pl__tco__tco_st

VANOS Tweak for little extra midrange power

Insert the following tables into the desired part-load map where you need the effect ( part-load cold / part-load warm / both).

*ATTENTION: Only Suitable for M54B30 M54B30 M54B30 M54B30 *

Credits to e46fanatics.com member DoCR ONLY FOR 3L engine M54B30

Vanos tweak.jpg


VANOS Tweak maps in table form for copy and pasting into TunerPro M54B30 ONLY
Exhaust cam setpoint part-load Intake cam setpoint part-load
-105.0 -105.0 -105.0 -104.6 -103.1 -97.5 -96.0 -96.8 -98.3 -104.3 -99.0 -99.0
-105.0 -104.6 -103.9 -102.0 -99.0 -96.0 -95.3 -96.4 -97.9 -103.9 -98.6 -98.6
-104.6 -103.9 -100.9 -97.5 -93.8 -92.6 -93.4 -94.9 -96.4 -101.6 -97.5 -97.5
-103.9 -102.4 -96.4 -92.6 -88.9 -88.1 -90.0 -91.5 -93.8 -97.1 -91.9 -91.9
-103.1 -101.6 -94.9 -91.1 -87.4 -86.6 -88.5 -90.4 -92.6 -96.0 -90.8 -90.8
-100.9 -98.6 -90.4 -87.0 -85.9 -85.1 -85.9 -88.5 -91.1 -95.6 -90.4 -90.4
-99.0 -96.4 -88.5 -85.9 -85.1 -84.8 -85.5 -88.9 -94.1 -97.5 -95.3 -95.3
-97.9 -95.3 -87.8 -85.9 -85.1 -85.1 -85.9 -91.9 -97.5 -100.9 -99.0 -99.0
-96.8 -94.5 -88.5 -86.6 -85.9 -96.0 -95.6 -95.6 -95.6 -95.6 -95.6 -97.5
-95.6 -94.1 -91.1 -88.5 -88.5 -99.8 -101.6 -101.6 -101.6 -101.6 -100.5 -101.3
-95.3 -93.8 -91.9 -90.4 -90.4 -101.3 -102.0 -102.0 -102.0 -102.0 -100.9 -101.6
-93.8 -93.0 -92.3 -92.3 -94.5 -102.4 -101.3 -101.3 -101.3 -101.3 -100.1 -101.3
-91.9 -91.5 -91.9 -92.3 -95.3 -105.8 -106.1 -106.1 -106.1 -106.1 -105.0 -102.8
-87.8 -88.5 -89.6 -91.1 -94.9 -106.1 -106.1 -106.1 -106.1 -106.1 -105.0 -103.1
-85.5 -87.0 -88.5 -90.0 -93.8 -106.1 -106.1 -106.1 -106.1 -106.1 -105.0 -103.1
-84.0 -85.9 -87.4 -88.9 -93.0 -106.1 -106.1 -106.1 -106.1 -106.1 -105.0 -103.1
126.00 126.00 125.63 124.88 123.00 118.88 113.25 106.50 105.00 104.25 108.00 108.00
126.00 126.00 125.25 124.50 122.63 118.50 112.88 106.50 105.00 104.25 105.00 105.00
126.00 125.63 124.88 124.13 122.25 118.13 112.50 105.75 104.25 103.50 100.13 100.13
125.63 124.88 123.75 122.63 120.38 115.88 110.25 103.88 99.75 98.63 91.50 91.50
125.25 124.50 123.38 121.88 119.25 114.75 109.50 102.75 98.63 97.50 90.75 90.75
124.50 123.38 122.25 120.38 117.38 112.50 107.25 101.25 97.50 96.75 90.75 90.75
123.38 122.25 120.75 118.88 114.38 107.63 102.00 98.25 97.13 96.38 90.38 90.38
122.63 121.13 120.00 117.75 112.13 103.50 99.38 97.50 96.75 96.38 91.50 91.50
115.50 113.63 111.75 109.50 104.25 93.75 99.38 98.25 94.50 94.13 94.13 94.13
113.25 111.75 110.25 107.25 100.50 91.88 100.88 99.75 94.88 94.50 94.50 94.50
112.13 110.25 108.00 104.63 94.50 90.38 101.25 100.50 97.50 97.50 97.50 97.50
110.63 105.38 99.75 95.25 89.63 90.75 105.75 105.00 101.63 100.50 100.50 100.50
109.88 104.25 97.50 92.25 109.50 110.25 109.50 110.25 108.75 108.75 108.75 108.75
108.75 103.88 99.38 94.88 115.50 118.13 118.13 118.13 117.75 117.75 117.75 117.75
108.38 106.50 104.25 101.25 118.50 126.00 126.00 126.00 126.00 126.00 122.25 122.25
108.38 108.75 108.00 106.50 122.25 126.00 126.00 126.00 126.00 126.00 126.00 126.00

*ATTENTION: Only Suitable for M54B30 M54B30 M54B30 M54B30 M54B30 M54B30 M54B30 M54B30 M54B30*

INFO

For stock engine with stock exhaust and intake flow, above vanos tune works best in that form. For a moded engine,or even stock,but with free flow exhaust (really free flow) and CAI type intake, cams overlap can help increase volumetric efficiency in the hi revs (over disa switch point ~4000rpm and up ),resulting in more power! Taking as a base M54B30 engine with Intake cam 126 for max, and 86 for min ; exhaust cam -105 for max ,and -80 for min 126 represent intake cam in its max retard form, and 86 in its max advance position -105 represent exhaust cam in its max advance position, and -80 in its max retard stage

General rule for overlap : Advancing both cams - more low end torque and less top end power

                   Retarding both cams - less low end torque and more top end power

TIPS for full load vanos maps : Begin from low rpm with max number for your cam (intake 126 ,exhaust -105) and progressively reduce number until you reach 4000rpm and lowest cam number (intake 86,exhaust -80) From 4000rpm and up to max ,use inverse technique, start to rise again numbers, progressively. (every engine responds different by exhaust config) Test combinations until you are happy. Also, do changes for intake only, leave exhaust alone if you are on stock exhaust manifold.

note Theoreticaly, there is no risk of damaging engine ( valve hit piston) if you stay within specified range for your particular cams. (m54b30 intake 126/86 ,exhaust -105/-80)

example of random overlap for full load and partload maps

Drive-By-Wire

This section contains information on how the Drive-By-Wire system is controlled by the DME and how it can be modified.

Drivers Wish Tables

Tunerpro comparison of the ip_tps_sp_pvs and ip_isapwm_pvs table.

The Drive-By-Wire system is setup so that the ecu uses both the throttle valve and the idle control valve to control how much air is going into the engine.

  • ip_tps_sp_pvs is used by the ecu to decide how much it should open the throttle for a given pvs input.
  • ip_isapwm_pvs is used by the ecu to decide how much idle control valve duty cycle should be used for a given pvs input.

If we look at these tables side by side we can see that a stock ecu is setup to primarily use the idle control valve to control airflow when the pvs input is in the range between 0° and 15° and when the pvs input is higher the ecu will switch over to the throttle valve.

Drivers Wish Input Correction

The MS43 actively limits how fast the drivers requested pvs input can increase to provide a smoother driving experience.

ip_pvs_cor_max_rpl_[gear] is used by the ecu to decide if the drivers requested pvs input should be limited. The values in the table is the lower limit and the X-axis is the upper limit. If the drivers requested pvs input is between these values then the ecu will start limiting the pvs input.

If the following conditions are met then the ecu will not try to start limiting the pvs input:

  • The driver requested pvs input is decreasing.
  • The driver requested pvs input change gradient is larger than c_pvs_grd_max_rpl(59,99° pvs).
  • The clutch is pressed.
  • The driver requested pvs input is higher than c_pvs_cor_max_rpl(42,5° PVS)

When the ecu starts limiting the pvs input then the pvs input will be increased by the value taken from ip_pvs_cor_rpl_lgrd_[gear] until the following conditions are met:

  • The limitation duration specified in ip_t_pvs_cor_rpl_[gear] has expired.
  • The driver requested pvs input change gradient is larger than c_pvs_grd_max_rpl(59,99° pvs).
  • The limited pvs input is larger than the driver requested pvs input.

If any of those conditions are met then the ecu will use the driver requested pvs input and will not start limiting the pvs input again until the time specified in c_t_dly_pvs_cor_rpl(0,2s) has expired.

The easiest way to disable this function is to set either c_pvs_cor_max_rpl or c_pvs_grd_max_rpl to zero.

Full load detection

Full load detection is the threshold when the ecu stops trying to be economical/ecofriendly and instead focuses on producing power.

The full load detection thresholds are pvs based and are defined in the following tables:

  • id_pvs_fl__n When this threshold is exceeded the injection will operate in open loop and the full load enrichment map is applied to the injection time.
  • id_pvs_fl_ivvt__n When this threshold is exceeded the Vanos will use the full load maps.
  • id_pvs_fl_vim__n_vim_ When this threshold is exceeded the DISA will use the full load maps.

Idlespeed

This section contains information on how the idle is controlled by the DME and how it can be modified.

MS43 has a few different tables that affect the nominal idle speed

  • ip_n_sp_is Nominal idle speed without additional load on the engine.
  • ip_dri_n_sp_is Nominal idle speed with drive engaged for AT gearbox.
  • ip_acin_n_sp_is Nominal idle speed with air conditioner switched on.
  • ip_dri_acin_n_sp_is Nominal idle speed with air conditioner switched on and drive engaged for AT gearbox.

The idle setpoint is modified from the nominal speed above by

  • ip_n_sp_add_cha_cdn_bat Nominal idle speed offset for battery charge state.
  • ip_n_sp_add_heat Nominal idle speed offset with catalyst heating function active.

In addition, the idle speed change rate can be changed with c_n_sp_lgrd_is.

DTC Suppression

DTCs can be suppressed in the MS43 by zeroing out the c_abc_... specific codes. The full list of DTCs can be found here:

DTC variables OBD
Code Description
c_dtc_ad_mec_ref_ivvt_ex P0014 B Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
c_dtc_ad_mec_ref_ivvt_in P0011 A Camshaft Position - Timing Over-Advanced or System Performance (Bank 1)
c_dtc_amp P0107 Manifold Absolute Pressure/Barometric Pressure Circuit Low Input
P0108 Manifold Absolute Pressure/Barometric Pressure Circuit High Input
c_dtc_bls_plaus P0571 Cruise Control/Brake Switch A Circuit Malfunction
c_dtc_cam P0340 Camshaft Position Sensor Circuit Malfunction
P0344 Camshaft Position Sensor Circuit Intermittent
c_dtc_cam_ex P0365 Camshaft Position Sensor 'B' Circuit Bank 1
P0369 Camshaft Position Sensor 'B' Circuit Intermittent Bank 1
c_dtc_cam_ex_ivvt P1529 "B" Camshaft Position Actuator Control Circuit Signal Low Bank 1
P1530 "B" Camshaft Position Actuator Control Circuit Signal High Bank 1
P1531 "B" Camshaft Position Actuator Control Open Circuit Bank 1
c_dtc_cam_in_ivvt P1523 "A" Camshaft Position Actuator Signal Low Bank 1
P1524 "A" Camshaft Position Actuator Signal High Bank 1
P1525 "A" Camshaft Position Actuator Control Open Circuit Bank 1
c_dtc_can_boff P1610 CANbus offline
c_dtc_cat_diag_1 P0420 Catalyst System Efficiency Below Threshold (Bank 1)
c_dtc_cat_diag_2 P0430 Catalyst System Efficiency Below Threshold (Bank 2)
c_dtc_cat_eff_1 P0421 Warm Up Catalyst Efficiency Below Threshold (Bank 1)
c_dtc_cat_eff_2 P0431 Warm Up Catalyst Efficiency Below Threshold (Bank 2)
c_dtc_cc
c_dtc_cps P0443 Evaporative Emission Control System Purge Control Valve Circuit Malfunction
P0444 Evaporative Emission Control System Purge Control Valve Circuit Open
P0445 Evaporative Emission Control System Purge Control Valve Circuit Shorted
c_dtc_crk P0335 Crankshaft Position Sensor A Circuit Malfunction
P0339 Crankshaft Position Sensor A Circuit Intermittent
c_dtc_cs P0xxx Clutch Switch
c_dtc_ct
c_dtc_ctoc
c_dtc_diagcps P0441 Evaporative Emission Control System Incorrect Purge Flow
c_dtc_dmtl P1444 Diagnostic Module Tank Leakage (DM-TL) Pump Control Open Circuit
P1445 Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal Low
P1446 Diagnostic Module Tank Leakage (DM-TL) Pump Control Circuit Signal High
c_dtc_dmtl_leak P0455 Evaporative Emission Control System Leak Detected (gross leak)
P0456 EVAP Leak Monitor Small Leak Detected
c_dtc_dmtlm P1447 Diagnostic Module Tank Leakage (DM-TL) Pump Too High During Switching
P1448 Diagnostic Module Tank Leakage (DM-TL) Pump Too Low During Switching
P1449 Diagnostic Module Tank Leakage (DM-TL) Pump Too High
c_dtc_ecf P0480 Cooling Fan 1 Control Circuit Malfunction
c_dtc_ect P1619 MAP Cooling Control Circuit Signal Low
P1620 MAP Cooling Control Circuit Signal High
c_dtc_ect_mec P0128 Range/Performance Problem In Thermostat
c_dtc_ecu P0604 Internal Control Module Random Access Memory (RAM) Error
c_dtc_ef P0477 Exhaust Pressure Control Valve Low
P0478 Exhaust Pressure Control Valve High
c_dtc_er_ad P0xxx Misfire adaptation
c_dtc_igcfb_0 P0351 Ignition Coil 1 Primary/Secondary Circuit Malfunction
P1301 Misfiring Cylinder 1
c_dtc_igcfb_1 P0355 Ignition Coil 5 Primary/Secondary Circuit Malfunction
P1305 Misfiring Cylinder 5
c_dtc_igcfb_2 P0353 Ignition Coil 3 Primary/Secondary Circuit Malfunction
P1303 Misfiring Cylinder 3
c_dtc_igcfb_3 P0356 Ignition Coil 6 Primary/Secondary Circuit Malfunction
P1306 Misfiring Cylinder 6
c_dtc_igcfb_4 P0352 Ignition Coil 2 Primary/Secondary Circuit Malfunction
P1302 Misfiring Cylinder 2
c_dtc_igcfb_5 P0354 Ignition Coil 4 Primary/Secondary Circuit Malfunction
P1304 Misfiring Cylinder 4
c_dtc_imob P1660 EWS system
P1666 EWS system
c_dtc_is P0505 Idle Control System Malfunction
c_dtc_isa_1 P1506 Idle Speed Control Valve Open Solenoid Control Circuit Signal High
P1507 Idle Speed Control Valve Open Solenoid Control Circuit Signal Low
P1508 Idle Speed Control Valve Opening Solenoid Control Open Circuit
c_dtc_isa_2 P1502 Idle Speed Control Valve Closing Solenoid Control Circuit Signal High or Low
P1503 Idle Speed Control Valve Closing Solenoid Control Circuit Signal Low
P1504 Idle Speed Control Valve Closing Solenoid Control Open Circuit
c_dtc_iv_0 P0201 Injector Circuit Malfunction - Cylinder 1
P0261 Cylinder 1 Injector Circuit Low
P0262 Cylinder 1 Injector Circuit High
c_dtc_iv_1 P0205 Injector Circuit Malfunction - Cylinder 5
P0273 Cylinder 5 Injector Circuit Low
P0274 Cylinder 5 Injector Circuit High
c_dtc_iv_2 P0203 Injector Circuit Malfunction - Cylinder 3
P0267 Cylinder 3 Injector Circuit Low
P0268 Cylinder 3 Injector Circuit High
c_dtc_iv_3 P0206 Injector Circuit Malfunction - Cylinder 6
P0276 Cylinder 6 Injector Circuit Low
P0277 Cylinder 6 Injector Circuit High
c_dtc_iv_4 P0202 Injector Circuit Malfunction - Cylinder 2
P0264 Cylinder 2 Injector Circuit Low
P0265 Cylinder 2 Injector Circuit High
c_dtc_iv_5 P0204 Injector Circuit Malfunction - Cylinder 4
P0270 Cylinder 4 Injector Circuit Low
P0271 Cylinder 4 Injector Circuit High
c_dtc_knk_1 P0327 Knock Sensor 1 Circuit Low Input (Bank 1 or Single Sensor)
c_dtc_knk_2 P0332 Knock Sensor 2 Circuit Low Input (Bank 2)
c_dtc_lam_dly_down_1 P0096 Intake Air Temperature Sensor 2 Circuit Range/Performance
P0097 Intake Air Temperature Sensor 2 Circuit Low
c_dtc_lam_dly_down_2 P0098 Intake Air Temperature Sensor 2 Circuit High
P0099 Intake Air Temperature Sensor 2 Circuit Intermittent/Erratic
c_dtc_lam_dly_up_1 P1090 Pre-Catalyst Fuel Trim Too Lean Bank 1
P1092 Pre-Catalyst Fuel Trim Too Lean Bank 2
c_dtc_lam_dly_up_2 P1091 Pre-Catalyst Fuel Trim Too Rich Bank 1
P1093 Pre-Catalyst Fuel Trim Too Rich Bank 2
c_dtc_lam_lim_1 P1083 Fuel Control Mixture Lean (Bank 1 Sensor 1)
P1084 Fuel Control Mixture Rich (Bank 1 Sensor 1)
P1314 Fuel System Error
c_dtc_lam_lim_2 P1085 Fuel Control Mixture Lean (Bank 2 Sensor 1)
P1086 Fuel Control Mixture Rich (Bank 2 Sensor 1)
P1314 Fuel System Error
c_dtc_lam_stop_1 P0171 System too Lean (Bank 1)
P0172 System too Rich (Bank 1)
P1314 Fuel System Error
c_dtc_lam_stop_2 P0174 System too Lean (Bank 2)
P0175 System too Rich (Bank 2)
P1314 Fuel System Error
c_dtc_leak_big P0441 Evaporative Emission Control System Incorrect Purge Flow
c_dtc_leak_small P0442 Evaporative Emission Control System Leak Detected (small leak)
c_dtc_ls_frq_1 P0133 O2 Sensor Circuit Slow Response (Bank 1 Sensor 1)
P1087 O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 1)
P1088 O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
c_dtc_ls_frq_2 P0153 O2 Sensor Circuit Slow Response (Bank 2 Sensor 1)
P1089 O2 Sensor Circuit Slow Response in Lean Control Range (Bank 1 Sensor 2)
P1094 O2 Sensor Circuit Slow Response in Rich Control Range (Bank 2 Sensor 1)
c_dtc_lsh_down_1 P0036 HO2S Heater Control Circuit Bank 1 Sensor 2
P0037 HO2S Heater Circuit Low Voltage Bank 1 Sensor 2
P0038 HO2S Heater Circuit High Voltage Bank 1 Sensor 2
c_dtc_lsh_down_2 P0056 HO2S Heater Circuit Bank 2 Sensor 2
P0057 HO2S Heater Circuit Low Voltage Bank 2 Sensor 2
P0058 HO2S Heater Circuit High Voltage Bank 2 Sensor 2
c_dtc_lsh_obd_down_1 P0141 O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 2)
c_dtc_lsh_obd_down_2 P0161 O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 2)
c_dtc_lsh_obd_up_1 P0135 O2 Sensor Heater Circuit Malfunction (Bank 1 Sensor 1)
c_dtc_lsh_obd_up_2 P0155 O2 Sensor Heater Circuit Malfunction (Bank 2 Sensor 1)
c_dtc_lsh_up_1 P0030 HO2S Heater Control Circuit Bank 1 Sensor 1
P0031 HO2S Heater Circuit Low Voltage Bank 1 Sensor 1
P0032 HO2S Heater Circuit High Voltage Bank 1 Sensor 1
c_dtc_lsh_up_2 P0050 HO2S Heater Circuit Bank 2 Sensor 1
P0051 HO2S Heater Circuit Low Voltage Bank 2 Sensor 1
P0052 HO2S Heater Circuit High Voltage Bank 2 Sensor 1
c_dtc_maf P0102 Mass or Volume Air Flow Circuit Low Input
P0103 Mass or Volume Air Flow Circuit High Input
c_dtc_maf_mafm P0101 Mass or Volume Air Flow Circuit Range/Performance Problem
c_dtc_mec_isa P1500 Idle Speed Control Valve Stuck Open
P1501 Idle Speed Control Valve Stuck Closed
c_dtc_mec_ivvt_ex P0015 B Camshaft Position - Timing Over-Retarded (Bank 1)
c_dtc_mec_ivvt_in P0012 A Camshaft Position - Timing Over-Retarded (Bank 1)
c_dtc_mec_sav P0411 Secondary Air Injection System Incorrect Flow Detected
c_dtc_min_saf P0491 Secondary Air Injection System Insufficient Flow Bank 1
c_dtc_mis_0 P0301 Cylinder 1 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1342 Misfire During Start Cylinder 1
P1343 Misfire Cylinder 1 With Fuel Cut-off
c_dtc_mis_1 P0305 Cylinder 5 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1350 Misfire During Start Cylinder 5
P1351 Misfire Cylinder 5 With Fuel Cut-off
c_dtc_mis_2 P0303 Cylinder 3 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1346 Misfire During Start Cylinder 3
P1347 Misfire Cylinder 3 With Fuel Cut-off
c_dtc_mis_3 P0306 Cylinder 6 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1352 Misfire During Start Cylinder 6
P1353 Misfire Cylinder 6 With Fuel Cut-off
c_dtc_mis_4 P0302 Cylinder 2 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1344 Misfire During Start Cylinder 2
P1345 Misfire Cylinder 2 With Fuel Cut-off
c_dtc_mis_5 P0304 Cylinder 4 Misfire Detected
P0313 Misfire Detected With Low Fuel Level
P1348 Misfire During Start Cylinder 4
P1349 Misfire Cylinder 4 With Fuel Cut-off
c_dtc_mis_f P0313 Misfire Detected With Low Fuel Level
c_dtc_mis_mul P0300 Random/Multiple Cylinder Misfire Detected
c_dtc_mis_t_s P0336 Crankshaft Position Sensor A Circuit Range/Performance
c_dtc_mon_plaus P1602 Control Module Self Test, Control Module Defective
c_dtc_mon_tqi_av P1603 Control Module Self Test, Torque Monitoring
c_dtc_mon_tqi_n_max P1604 Control Module Self Test, Speed Monitoring
c_dtc_msw_2 P1565 Multifunction Steering Wheel
c_dtc_msw_3 P1565 Multifunction Steering Wheel
c_dtc_msw_tog P1567 Multifunction Steering Wheel, toggle bit
c_dtc_mtc_ctl_1 P1638 Throttle Valve Position Control; Throttle Stuck Temporarily
c_dtc_mtc_ctl_2 P1639 Throttle Valve Position Control; Throttle Stuck Permanently
c_dtc_mtc_ctl_3 P1637 Throttle Valve Position Control; Control Deviation
c_dtc_mtc_dr P1636 Throttle Valve Control Circuit
c_dtc_otcc P1477 Leakage Diagnostic Pump Reed Switch Did Not Open
c_dtc_pvs_1 P1122 Pedal Position 1 Low Input
P1123 Pedal Position 1 High Input
c_dtc_pvs_2 P1222 Pedal Position Sensor 2 Low Input
P1223 Pedal Position Sensor 2 High Input
c_dtc_pvs_bls P0xxx Simultaneous activation of accelerator pedal and brake pedal
c_dtc_pvs_bls_bts_plaus P0xxx Brakelight switch and brake test switch not plausible
c_dtc_pvs_pvs P1120 Pedal Position Sensor Circuit
c_dtc_pvs_ratio P1121 Pedal Position 1 Range/Performance Problem
c_dtc_r_igcfb P0350 Ignition Coil Primary/Secondary Circuit Malfunction
c_dtc_rly_accout P0532 A/C Refrigerant Pressure Sensor Circuit Low Input
P0533 A/C Refrigerant Pressure Sensor Circuit High Input
c_dtc_rly_efp P0231 Fuel Pump Secondary Circuit Low
P0232 Fuel Pump Secondary Circuit High
c_dtc_rly_main P1695 Main relay
c_dtc_rly_main_dly P0xxx Delay in main relay
c_dtc_sa_1 P0491 Secondary Air Injection System Insufficient Flow Bank 1
c_dtc_sa_2 P0492 Secondary Air Injection System Insufficient Flow Bank 2
c_dtc_sa_conf P0411 Secondary Air Injection System Incorrect Flow Detected
c_dtc_safm P1419 Secondary Air System Air Mass Flow Sensor Disconnected or Stuck Signal
c_dtc_sap P1413 Secondary Air Injection Pump Relay Control Circuit Signal Low
P1414 Secondary Air Injection System Monitor Circuit High
c_dtc_sap_safm P0411 Secondary Air Injection System Incorrect Flow Detected
c_dtc_sav P0413 Secondary Air Injection System Switching Valve A Circuit Open
P0414 Secondary Air Injection System Switching Valve A Circuit Shorted
c_dtc_sav_1_safm P0411 Secondary Air Injection System Incorrect Flow Detected
c_dtc_sav_safm P0411 Secondary Air Injection System Incorrect Flow Detected
c_dtc_t_igcfb_2 P0350 Ignition Coil Primary/Secondary Circuit Malfunction
c_dtc_t_lam_act P0125 Insufficient Coolant Temperature for Closed Loop Fuel Control
c_dtc_tco P0117 Engine Coolant Temperature Circuit Low Input
P0118 Engine Coolant Temperature Circuit High Input
c_dtc_tco_ex P1111 Engine Coolant Temperature Radiator Outlet Sensor Low Input
P1112 Engine Coolant Temperature Radiator Outlet Sensor High Input
c_dtc_tco_max P0116 Engine Coolant Temperature Circuit Range/Performance Problem
c_dtc_teg_down_1 P0xxx Exhaust gas temperature post-cat, bank1
c_dtc_teg_down_2 P0431 Exhaust gas temperature post-cat, bank2
c_dtc_teg_up_1 P0431 Exhaust gas temperature pre-cat, bank1
c_dtc_teg_up_2 P0431 Exhaust gas temperature pre-cat, bank2
c_dtc_tia P0112 Intake Air Temperature Circuit Low Input
P0113 Intake Air Temperature Circuit High Input
c_dtc_toil P0197 Engine Oil Temperature Sensor Low
P0198 Engine Oil Temperature Sensor High
c_dtc_tout_amt_1 P1611 Serial Communicating Link Transmission Control Module
c_dtc_tout_asr_1 P1613 Time-out ASR1
c_dtc_tout_asr_3 P1613 Time-out ASR3
c_dtc_tout_cng_ecu_1 P0xxx Time-out CNG ECU
c_dtc_tout_etcu_1 P0600 Serial Communication Link Malfunction
c_dtc_tout_icl_2 P1612 Time-out instrument cluster2
c_dtc_tout_icl_3 P1612 Time-out instrument cluster3
c_dtc_tout_imob P1661 Time-out EWS system
P1662 Time-out EWS system
c_dtc_tout_pste_1 P0xxx Time-out PowerSteering
c_dtc_tps_1 P0122 Throttle/Pedal Position Sensor/Switch A Circuit Low Input
P0123 Throttle/Pedal Position Sensor/Switch A Circuit High Input
c_dtc_tps_2 P0222 Throttle/Pedal Position Sensor/Switch B Circuit Low Input
P0223 Throttle/Pedal Position Sensor/Switch B Circuit High Input
c_dtc_tps_ad P1632 Throttle Valve Adaptation; Adaptation Condition Not Met
P1633 Throttle Valve Adaptation; Limp Home Position
P1634 Throttle Valve Adaptation; Spring Test Failed
P1635 Throttle Valve Adaptation; Lower Mechanical Stop Not Adapted
c_dtc_tps_maf_1 P0121 Throttle/Pedal Position Sensor/Switch A Circuit Range/Performance Problem
c_dtc_tps_maf_2 P0221 Throttle/Pedal Position Sensor/Switch B Circuit Range/Performance Problem
c_dtc_tps_st_chk_1 P1675 TPS stuck, sensor 1 check condition
c_dtc_tps_st_chk_2 P1694 TPS stuck, sensor 2 check condition
c_dtc_tqi_amt_1 P1653 Indicated torque not matching AMT gearbox request
P1654 Indicated torque not matching AMT gearbox request
P1670 Indicated torque not matching AMT gearbox request
c_dtc_tqi_lim P1605 Limiting criteria for indicated torque
c_dtc_tqi_n_max_nvmy_mon P1604 Control Module Self Test, Speed Monitoring
c_dtc_var_amp P1171 Ambient Pressure Sensor Learned Value Error
P1172 Ambient Pressure Sensor Rationality Check
P1173 Ambient Pressure Sensor Rationality Check
c_dtc_vcc_poti_1 P1624 Pedal Position Sensor Potentiometer Supply Channel 1 Electrical
c_dtc_vcc_poti_2 P1625 Pedal Position Sensor Potentiometer Supply Channel 2 Electrical
c_dtc_vdmtl P1451 Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal Low
P1452 Diagnostic Module Tank Leakage (DM-TL) Switching Solenoid Control Circuit Signal High
c_dtc_vim P1512 DISA Control Circuit Signal Low
P1513 DISA Control Circuit Signal High
c_dtc_vls_down_1 P0137 O2 Sensor Circuit Low Voltage (Bank 1 Sensor 2)
P0138 O2 Sensor Circuit High Voltage (Bank 1 Sensor 2)
P0140 O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 2)
c_dtc_vls_down_2 P0157 O2 Sensor Circuit Low Voltage (Bank 2 Sensor 2)
P0158 O2 Sensor Circuit High Voltage (Bank 2 Sensor 2)
P0160 O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 2)
c_dtc_vls_down_act_chk_1 P1143 ???
P1144 ???
c_dtc_vls_down_act_chk_2 P1149 ???
P1150 ???
c_dtc_vls_down_afl_1 P0139 O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
c_dtc_vls_down_afl_2 P0159 O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
c_dtc_vls_down_post_puc_1 P1097 O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 1 Sensor 1)
c_dtc_vls_down_post_puc_2 P1098 O2 Sensor Circuit Slow Response after Coast Down Fuel Cutoff (Bank 2 Sensor 2)
c_dtc_vls_down_t_1 P0139 O2 Sensor Circuit Slow Response (Bank 1 Sensor 2)
c_dtc_vls_down_t_2 P0159 O2 Sensor Circuit Slow Response (Bank 2 Sensor 2)
c_dtc_vls_jump_1 P1088 O2 Sensor Circuit Slow Response in Rich Control Range (Bank 1 Sensor 1)
P1119 ???
P1178 O2 Sensor Signal Circuit Slow Switching From Rich to Lean (Bank 1 Sensor 1)
c_dtc_vls_jump_2 P1095 O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 1 Sensor 1)
P1096 O2 Sensor Circuit Slow Switching From Lean to Rich (Bank 2 Sensor 1)
P1114 ???
c_dtc_vls_stk_1 P0136 O2 Sensor Circuit Malfunction (Bank 1 Sensor 2)
c_dtc_vls_stk_2 P0156 O2 Sensor Circuit Malfunction (Bank 2 Sensor 2)
c_dtc_vls_up_1 P0131 O2 Sensor Circuit Low Voltage (Bank 1 Sensor 1)
P0132 O2 Sensor Circuit High Voltage (Bank 1 Sensor 1)
P0134 O2 Sensor Circuit No Activity Detected (Bank 1 Sensor 1)
c_dtc_vls_up_2 P0151 O2 Sensor Circuit Low Voltage (Bank 2 Sensor 1)
P0152 O2 Sensor Circuit High Voltage (Bank 2 Sensor 1)
P0154 O2 Sensor Circuit No Activity Detected (Bank 2 Sensor 1)
c_dtc_vs P0500 Vehicle Speed Sensor Malfunction

Extra Features

Idle Control Valve Delete

Removing the idle control valve (ICV) / idle speed actuator (ISA) is possible due to the motorized throttle body the M54 engine uses.

Disconnect the idle control valve connector and either remove the idle control valve and plug the hole in the intake manifold (preferred) or use something to seal the idle control valve air tight.

The way the ICV delete works is by utilizing the ip_pvs_isa_isapwm table. This table dictates how much pvs input should be added to the drivers requested pvs input for a given idle control valve load.

In a stock engine this table is used to extend the idle control valve load so when the idle control valve load goes above 100% the throttle will start to open to deliver more air into the engine.

By rescaling this table we are able to completely remove the idle control valve.

But be aware that the values in ip_pvs_isa_isapwm is dependent on the values in ip_tps_sp_pvs so if ip_tps_sp_pvs is modified then ip_pvs_isa_isapwm also needs to be re-scaled accordingly to maintain a stable idle.

The ip_pvs_isa_isapwm values in the picture are made for a M54B30 so the values may need to be modified to get a stable idle with M54B25 and M54B22 as these engines have a smaller throttle body.

This modification modifies a monitoring table so the calibration addition checksum needs to be corrected or disabled after applying the changes.

Check here for more information about checksums.

Exhaust Pop Modifications

The current solution for forced exhaust pop is to change the overrun fuel cutoff detection from the ECU. This is accomplished by raising the minimum RPM threshold to a number of revolutions the engine can't reach.

This behaviour can be set different depending on your air condition is turned on or off, because the MS43 has two seperate tables for overrun fuel cutoff handling depending on the engine state ACCIN.

Note: Theorethically every engine state can be used to switch between the two tables. Another one that could be handy is CRU_MAIN_SWI, this state is also represented by the green cruise control light in the cluster. Requires program code editting.


Exhaust pops with activated A/C

TunerPro depiction of overrun fuelcut mod

This screenshot shows the values to have pops when A/C is on. To get exhaust pops with the A/C disabled leave the lower tables stock and only edit the uper ones.

Using these settings B25 engine users have reported throttle hang, poor idling, and decreased performance. Test these settings at your own responsibility.


Timer configurable exhaust pops

It is also possible to tweak gear related timers that will let the engine pop for a given time. After this timer is zero, the engine will go back into overrun-fuelcut. So it's pretty easy to have 2 or 3 pretty loud pops followed by "silence".

The following screenshot is an example for the values at M54B30 which give 3 loud pops.

TunerPro depiction of timered overrun fuelcut mod

If you want to relay fuel cutoff while standing, adjust c_t_puc_deacc_vs to your desired time.


For anyone wanting the best of both worlds:

TunerPro depiction of combined overrun fuelcut mod

Forced OBD Readiness

Common solution for forced OBD readiness monitors seems to be setting the following config switches

File:ForcedOBD.jpg
TunerPro depiction of config switches


  • c_conf_eobd If this value is set to one then the ECU will be able to report the traveled distance with the MIL active.
  • c_obd_diag_state This value represents which OBD standard that the ecu complies to. If set to one the ecu will report that it complies to the OBD-II standard as defined by CARB. A full list of what the values corresponds to can be found here under the "Service 01 PID 1C" section.

Engine coolant temperature control

The M54 engine family is fitted with an e-thermostat that the ecu can control to alter the engine coolant temperature. By altering these values we can change how hot the engine will run in different conditions.

  • c_tam_min_ect - Minimum ambient temperature threshold for e-thermostat activation
  • c_tia_min_ect - Minimum intake air temperature threshold for e-thermostat activation
  • c_toil_min_ect - Minimum oil temperature threshold for e-thermostat activation
  • c_tia_max_ect - Maximum intake air temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tia_max
  • c_tco_ex_max_ect - Maximum radiator outlet temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tco_ex_max
  • c_toil_max_ect - Maximum oil temperature threshold. When exceeded target coolant temperature will be set to c_tco_sp_tia_max
  • c_tco_sp_toil_min - Target coolant temperature until the thresholds set by c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded.
  • c_tco_sp_tco_ex_max - Target coolant temperature if c_tco_ex_max_ect is exceeded
  • c_tco_sp_tia_max - Target coolant temperature if c_toil_max_ect or c_tia_max_ect are exceeded
  • c_tco_bol_ect - Target coolant temperature if an external low coolant temperature request has been received
  • c_tco_min_ect - Minimum coolant temperature threshold for full energization of the e-thermostat
  • id_tco_sp_ect__n__maf_sub - Target coolant temperature when c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded - AC off
  • id_tco_sp_ect_acin__n__maf_sub - Target coolant temperature Target coolant temperature when c_toil_min_ect, c_tam_min_ect, and c_tia_min_ect are exceeded - AC on
  • ip_ectpwm_i__tco_dif - e-thermostat I component
  • ip_ectpwm_p__tco_dif - e-thermostat P component
  • id_ectpwm_add__n__tco_sp - Required e-thermostat duty cycle to achieve coolant temperature setpoint


TunerPro depiction of Coolant Maps

Secondary Air Pump Delete

For forced OBD Readiness set C_CONF_SAP: "1"

Lambda Sensor Configuration

Constant "c_conf_cat" has five different options which represent the ecu´s ability to work with different lambda probe setups.

Set the following values that suit you needs:

  • 0: Single bank with one pre-cat lambda sensor or cat-preparation (SA199)
  • 1: Twin bank with two pre-cat lambda sensors or cat-preparation (SA199) and automatic learning of postcat sensors
  • 2: Single bank with one precat lambda sensor and one post-cat lambda sensor
  • 3: Twin bank with two pre-cat lambda sensors and one post-cat lambda sensors
  • 4: Twin bank with two pre-cat lambda sensors and two post-cat lambda sensors

The automatic learning process of post-cat lambda sensors starts after deleting "learned variants" with INPA.

After installing catless headers, it could be useful to eliminate post-cat sensors with setting "c_conf_cat" to "1".

MAF Sensor Scalar Adjustments

The standard MAF sensor map is a non-interpolated 16*16 lookup table, that can also be shown as 1*256 "voltage (v) vs. airflow (kg/h)" table. The 10 bit analog to digital conversion is reduced to 8 bits and 4 bits of each are used to lookup the MAF value.

There are differences in flow between the M54B22/M54B25 and M54B30 MAF sensors, as the diametre is different. Differences in cross sectional area would be expected to rescale the values, but the sensor is part of the tube and not easily modified.

Replacement slot type sensors (Ford based) are often used in high output blow through configurations for turbocharging, as the BMW OEM sensors are not well suited to boost in blow through setup.

"Engine load (mg/stroke) is proportional to "airflow (kg/h)" divided by RPM and is used to reference most of the important injection and ignition tables.

There is a factory airflow limit of 1024kg/h that can be doubled or quadrupled with a patch that has undergone basic testing, but the maximum engine load is still limited to 1389mg/stroke, unless there are massive code rewrites.

A M54B30 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.

RPM limiter

The Siemens MS43 has two gear dependant rpm limiters, a softlimiter and a hardlimiter for each gearbox type (manual or automatic transmission).

The softlimiter works by cutting injectors based on fuelcut pattern, whereas the hardlimiter immediately cuts off all cylinders.

  • ID_N_MAX_AT: softlimiter for AT gearbox
  • ID_N_MAX_MAX_AT: hardlimiter for AT gearbox
  • ID_N_MAX_MT: softlimiter for MT gearbox
  • ID_N_MAX_MAX_MT: hardlimiter for MT gearbox

In addition to that, you will want to raise "ID_N_MAX_VS_MAX_AT" or "ID_N_MAX_VS_MAX_MT" slightly above the hardlimiter.

The Siemens MS43 gets it's vehicle speed signal (_VS) from the ABS control unit and not from a sensor inside the differential, like older chassis.

In case the ECU doesn't get a valid vehicle speed signal, for example when you put an M54 engine in an older chassis, or strip out the ABS block for weight reasons, a third RPM limiter is applied:

  • C_N_MAX_VS_DIAG: RPM limiter in case of missing vehicle speed

VMAX limiter

The Siemens MS43 has two gearbox dependant speed limiters, set them to 255 to have unrestricted vehicle speed.

  • C_VS_MAX_AT_1
  • C_VS_MAX_MT_1

Fake Race Camshafts / Lumpy Idle Mod

Faking some serious camshafts is pretty easy as M54 engine has adjustable camshafts. So basically whats happening when going camshafts is, the valve overlap will be increased by a huge amount. This means, intake and exhaust valves are open at the same time.

  • ip_cam_sp_tco_1_ex_is__n__maf_iv
  • ip_cam_sp_tco_2_ex_is__n__maf_iv
  • ip_cam_sp_tco_1_in_is__n__maf_iv
  • ip_cam_sp_tco_2_in_is__n__maf_iv
  • c_n_min_er >idlespeed, to not trigger during when engine idles lumpy.

Max adjustable value for the different engine specs:

Vanos specs

The biggest valve overlap will be achieved when using the lowest adjustable value on the intake side (80° respectively 86°) and the lowest adjustable value on the exhaust side (-80°)

TunerPro depiction of min allowed Vanos setpoints


A good starting point for further optimization could be:

TunerPro depiction of GhostCam mod

Safety Features

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!

Misfire Detection

  • c_n_min_er: minimum engine speed for detection of misfire!
  • c_n_max_er: maximum engine speed for detection of misfire!

Knock Detection

  • id_iga_dec_knk_1__n: ignition angle reduction based on knock stage1
  • id_iga_dec_knk_2__n: ignition angle reduction based on knock stage2

Injection Adaptation

  • c_n_ti_ad_fac_min: min engine speed to allow adapation of fuel trim, multiplicative
  • c_n_ti_ad_add_max: max engine speed to allow adapation of fuel trim, additive

Special Functions

Please look here for the special functions that need licencing: Daniel_F._Special_Functions

Here are some handy mods when going forced induction Forced_Induction_Upgrades

M Cluster LED Control

After swapping in an M3 cluster into a E46 or M5 cluster into E39, 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 shiftlights behaviour.

Following maps are used:

  • id_icl_led__n - Warmuplights - LED switchpoints for the given temperature
  • ldpm_toil_led - Warmuplights - axis defining the oiltemperature range in °C
  • id_icl_led__n - Shiftlights - LED switchpoints for the given temperature
  • ldpm_toil_led - Shiftlights - axis defining the rpm range

Explaination for the decimal values used:

  • 112 - all LEDs lit
  • 96 - 4500 and upwards
  • 80 - 5000 and upwards
  • 64 - 5500 and upwards
  • 48 - 6000 and upwards
  • 32 - 6500 and upwards
  • 16 - 7000 and upwards
  • 00 - 7500 lit
  • 01 - oil warning LED yellow (M5)
  • 02 - oil warning LED yellow
  • 04 - coolant warning LED

Download the warmup and shiftlights patch for TunerPro depending on your software version:

Use with 512kByte file only. Checksum correction required!

M3 Cluster warmuplight maps M3 Cluster shiftlight maps

Launch Control

TunerPro launch control maps

Setting up LC:

Set the following maps in TunerPro:

Configuration Launch Control

  • Launch_PVS_min (i suggest to set this switch over 50% and UNDER 70%. Anything different may lead to non-working LC)
  • Launch_TCO_min (and this to "-48" )
  • Launch_RPM_max
  • Launch_VS_max (set to "1")

Using LC:

  1. Make sure coolant temp is equal or above the threshold and ASC/DSC is turned off
  2. Depress the clutch pedal
  3. Put car into first gear
  4. Floor the accelerator pedal! (At least that °PVS matches the threshold!)
  5. Engine speed should bounce at chosen rpm setpoint. There may be offset which engine speed bounces, like +/- 200rpm
  6. Release clutch pedal while holding accelerator pedal down.
  7. Engine speed will be reduced until vehicle speed exceeds chosen threshold (currently not working!)


Engine RPM setting may be adjusted according to road conditions/tire setup, in order to minimize wheel spin.

For additional aggressiveness set "c_n_max_hys_max" to 32 or 64, then LC is much less bouncy

Example video:

Alternative for non working LC

LC fix Brakeswitch.jpg

Map reduction "fewmaps"

The _fewmaps file reduces the number of used maps to the following ones:

  • Injection
    • Idlespeed: ip_ti_tco_1_is_ivvt__n__maf
    • Part load: ip_tib__n__maf
    • Full load:
  • Ignition
    • Idlespeed: ip_igab_is__n__maf
    • Part- & full loadip_igab__n__maf
  • VANOS
    • Idle speed: IP_CAM_SP_tco_1_IN_IS / IP_CAM_SP_tco_1_EX_IS
    • Part load: IP_CAM_SP_tco_1_IN_PL / IP_CAM_SP_tco_1_EX_PL
    • Full load: IP_CAM_SP_tco_1_IN_FL / IP_CAM_SP_tco_1_EX_FL

This is great for finding basemaps.