Anonymous
Not logged in
Talk
Contributions
Create account
Log in
B58 Wiki
Search
Editing
Useful resources for getting started
(section)
From B58 Wiki
Namespaces
Page
Discussion
More
More
Page actions
Read
Edit
History
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
=== A2L file for your car === Having an A2L file that corresponds to your car is '''the''' resource for tuning because it describes every value, curve and map in the (stock) ECU. The A2L also describes all the units of these quantities and BMW's A2L are fairly well commented which helps with understanding. As well as maps, the A2L describes every ''function'' and ''measurement'' in the ECU and the relationships they have to the maps. This provides a black-box view of what the ECU is doing and, although this does not describe the calculations taking place inside each function, for tuning purposes it is often enough to see the inputs and outputs. It is worth remembering that, inside each function, the ECU only performs map lookups, simple arithmetic and logic operations. It is a real-time system so any complex calculations, and even square roots, are loaded into maps. This means the implementation is often somewhat guessable from inspection of the inputs and outputs, their units and BMW's comments. By way of example, the graph below was generated from a gen 1 A2L (using tools at https://github.com/jtownson/xdfbinext) and shows the ECU considering pressure across the cat. From this and graphs like it, one can often work out which maps need inspecting and changing. [[File:BMW_MOD_AusyKat_10ms.svg]] ==== Finding the A2L for you car ==== Inside A2L there is an identifier called the ''EPK''. This is hardcoded inside the A2L and, in addition, there is an ''EPK_ADDR'' property which provides a memory location for the EPK in calibration data files. This allows people and software tools to match up EPKs in an A2L and a bin. Here is an example: /begin MOD_PAR "MG1CS003" VERSION "R1C2J8B3B" ADDR_EPK 0x96C5AE8 EPK "53/1/MG1CS003/11/MG1CS003_BX8_R1C2J8B3B//R1C2J8B3B///" ... A technical issue is that if we start with a (stock) bin taken from a car, we do not know the EPK_ADDR. Nonetheless we can use a command like the linux strings command to scan the bin and find the EPK string. Alternatively tools like WinOLS will search for and find it (including the demo version). $ strings 00003076501103_original.bin | grep MG1CS003 #DME__861#D1#BTL#MDG1G_LK-CB_011_253.5_1.A#MG1CS003_LK______________________________________________________________________________________________________________________________________________________________ 53/1/MG1CS003/11/MG1CS003_BX8_R1C2J8B3B//R1C2J8B3B/// 53/1/MG1CS003/11/MG1CS003_BX8_R1C2J8B3B//R1C2J8B3B/// Clearly this bin corresponds to A2L version '''R1C2J8B3B'''. By running this query for all bins in the BMW-XDF repo provides the following: {| class="wikitable" style="margin:auto" |+ Original bin vs A2L correspondence |- ! Gen !! Bin File !! A2L Version !! Full EPK |- | Gen1 || 00003076501103_original.bin || R1C2J8B3B || 53/1/MG1CS003/11/MG1CS003_BX8_R1C2J8B3B//R1C2J8B3B/// |- | Gen1 || 00003076501D02_original.bin || R1C2J8I2B || 53/1/MG1CS003/11/MG1CS003_BX8_R1C2J8I2B//R1C2J8I2B/// |- | Gen1 || 000030765A3C06_original.bin || R1C2JD06B || 53/1/MG1CS003/11/MG1CS003_BX8_R1C2JD06B//R1C2JD06B/// |- | Gen1 || 00003081501102_original.bin || R0C2J8B2B || 53/1/MG1CS003/11/MG1CS003_BX8_R0C2J8B2B//R0C2J8B2B/// |- | Gen1 || 00003081501D04_original.bin || R0C2J8I4B || 53/1/MG1CS003/11/MG1CS003_BX8_R0C2J8I4B//R0C2J8I4B/// |- | Gen2 || 00005D55289606_original.bin || R4C2F4E6B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2F4E6B//R4C2F4E6B/// |- | Gen2 || 00005D5528AA06_original.bin || R4C2F4K6B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2F4K6B//R4C2F4K6B/// |- | Gen2 || 00005D5528B405_original.bin || R4C2F4N5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2F4N5B//R4C2F4N5B/// |- | Gen2 || 00005D5528BE07_original.bin || R4C2F4P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2F4P7B//R4C2F4P7B/// |- | Gen2 || 00005D5528BE09_original.bin || R4C2F4P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2F4P9B//R4C2F4P9B/// |- | Gen2 || 00005D55327806_original.bin || R4C2H596B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H596B//R4C2H596B/// |- | Gen2 || 00005D55328C05_original.bin || R4C2H5C5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5C5B//R4C2H5C5B/// |- | Gen2 || 00005D55329606_original.bin || R4C2H5E6B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5E6B//R4C2H5E6B/// |- | Gen2 || 00005D5532BE07_original.bin || R4C2H5P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5P7B//R4C2H5P7B/// |- | Gen2 || 00005D5532BE09_original.bin || R4C2H5P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5P9B//R4C2H5P9B/// |- | Gen2 || 00005D5532C808_original.bin || R4C2H5S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5S8B//R4C2H5S8B/// |- | Gen2 || 00005D5532DC05_original.bin || R4C2H5V5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H5V5B//R4C2H5V5B/// |- | Gen2 || 00005D553C6405_b58o1_original.bin || R4C2H695B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H695B//R4C2H695B/// |- | Gen2 || 00005D553C6405_original.bin || R4C2H695B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H695B//R4C2H695B/// |- | Gen2 || 00005D553C6E05_b58o1_original.bin || R4C2H6B5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6B5B//R4C2H6B5B/// |- | Gen2 || 00005D553C6E05_original.bin || R4C2H6B5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6B5B//R4C2H6B5B/// |- | Gen2 || 00005D553C7805_original.bin || R4C2H6D5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6D5B//R4C2H6D5B/// |- | Gen2 || 00005D553C7807_b58o1_original.bin || R4C2H6D7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6D7B//R4C2H6D7B/// |- | Gen2 || 00005D553C7807_original.bin || R4C2H6D7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6D7B//R4C2H6D7B/// |- | Gen2 || 00005D553C8207_b58o1_original.bin || R4C2H6H7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6H7B//R4C2H6H7B/// |- | Gen2 || 00005D553C8207_original.bin || R4C2H6H7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6H7B//R4C2H6H7B/// |- | Gen2 || 00005D553C8C05_b58o1_original.bin || R4C2H6K5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6K5B//R4C2H6K5B/// |- | Gen2 || 00005D553C8C05_original.bin || R4C2H6K5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6K5B//R4C2H6K5B/// |- | Gen2 || 00005D553C9607_b58o1_original.bin || R4C2H6N7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6N7B//R4C2H6N7B/// |- | Gen2 || 00005D553C9607_original.bin || R4C2H6N7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6N7B//R4C2H6N7B/// |- | Gen2 || 00005D553CA007_b58o1_original.bin || R4C2H6P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6P7B//R4C2H6P7B/// |- | Gen2 || 00005D553CA007_original.bin || R4C2H6P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6P7B//R4C2H6P7B/// |- | Gen2 || 00005D553CA009_b58o1_original.bin || R4C2H6P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6P9B//R4C2H6P9B/// |- | Gen2 || 00005D553CA009_original.bin || R4C2H6P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6P9B//R4C2H6P9B/// |- | Gen2 || 00005D553CAA08_b58o1_original.bin || R4C2H6S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6S8B//R4C2H6S8B/// |- | Gen2 || 00005D553CAA08_original.bin || R4C2H6S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6S8B//R4C2H6S8B/// |- | Gen2 || 00005D553CBE05_b58o1_original.bin || R4C2H6V5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2H6V5B//R4C2H6V5B/// |- | Gen2 || 00005D55461E08_b58o1_original.bin || R4C2J718B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J718B//R4C2J718B/// |- | Gen2 || 00005D55461E08_original.bin || R4C2J718B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J718B//R4C2J718B/// |- | Gen2 || 00005D55463208_b58o1_original.bin || R4C2J758B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J758B//R4C2J758B/// |- | Gen2 || 00005D55463208_original.bin || R4C2J758B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J758B//R4C2J758B/// |- | Gen2 || 00005D55463C07_b58o1_original.bin || R4C2J797B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J797B//R4C2J797B/// |- | Gen2 || 00005D55463C07_original.bin || R4C2J797B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J797B//R4C2J797B/// |- | Gen2 || 00005D55464605_b58o1_original.bin || R4C2J7A5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7A5B//R4C2J7A5B/// |- | Gen2 || 00005D55464605_original.bin || R4C2J7A5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7A5B//R4C2J7A5B/// |- | Gen2 || 00005D55465005_b58o1_original.bin || R4C2J7N5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7N5B//R4C2J7N5B/// |- | Gen2 || 00005D55465005_original.bin || R4C2J7N5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7N5B//R4C2J7N5B/// |- | Gen2 || 00005D55465A07_b58o1_original.bin || R4C2J7P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7P7B//R4C2J7P7B/// |- | Gen2 || 00005D55465A07_original.bin || R4C2J7P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7P7B//R4C2J7P7B/// |- | Gen2 || 00005D55465A09_b58o1_original.bin || R4C2J7P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7P9B//R4C2J7P9B/// |- | Gen2 || 00005D55465A09_original.bin || R4C2J7P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7P9B//R4C2J7P9B/// |- | Gen2 || 00005D55466408_b58o1_original.bin || R4C2J7S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7S8B//R4C2J7S8B/// |- | Gen2 || 00005D55466408_original.bin || R4C2J7S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7S8B//R4C2J7S8B/// |- | Gen2 || 00005D55467805_b58o1_original.bin || R4C2J7V5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7V5B//R4C2J7V5B/// |- | Gen2 || 00005D55467805_original.bin || R4C2J7V5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2J7V5B//R4C2J7V5B/// |- | Gen2 || 00005D55502807_b58o1_original.bin || R4C2L857B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L857B//R4C2L857B/// |- | Gen2 || 00005D55503705_b58o1_original.bin || R4C2L875B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L875B//R4C2L875B/// |- | Gen2 || 00005D55503C05_b58o1_original.bin || R4C2L8N5B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8N5B//R4C2L8N5B/// |- | Gen2 || 00005D55504807_b58o1_original.bin || R4C2L8P7B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8P7B//R4C2L8P7B/// |- | Gen2 || 00005D55504809_b58o1_original.bin || R4C2L8P9B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8P9B//R4C2L8P9B/// |- | Gen2 || 00005D5550480C_b58o1_original.bin || R4C2L8PCB || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8PCB//R4C2L8PCB/// |- | Gen2 || 00005D55505008_b58o1_original.bin || R4C2L8S8B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8S8B//R4C2L8S8B/// |- | Gen2 || 00005D55506406_b58o1_original.bin || R4C2L8V6B || 56/1/MG1CS201/11/MG1CS201_BX8TUE_R4C2L8V6B//R4C2L8V6B/// |- |} ==== BMW software versioning side-note ==== Apparently, the format of BMW software versions is composed from PREFIX + C2|C9 + VERSION1 + VERSION2 where * Prefix denotes a specific engine as noted in the table below. * C9 denotes a development build * C2 denotes a release build * VERSION 1 and 2 appear to be major/minor versions (although I was not able to confirm this). {| class="wikitable" style="margin:auto" |+ Version prefixes vs engine |- ! Version prefix!! Engine code !! DME !! App software |- | R0 || Early BX8 || MG1CS003 || DME8.? |- | R1 || B58 || MG1CS003 || DME8.6 |- | R2 || ? || ? || ? |- | R4 || B58TU || MG1CS201 || DME8.6T0 |- | F4 || S58 || MG1CS049 || DME8.6.S |- | H4 || S63TU || MG1CS202 || DME II |}
Summary:
Please note that all contributions to B58 Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
B58 Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation
Navigation
Main page
Resources for getting started
MHD Logging
How the performance gauges work
Understanding the MPPSK map
Creating a stage 1 map
Timing
Boost control
Recent changes
Random page
Help about MediaWiki
Wiki tools
Wiki tools
Special pages
Page tools
Page tools
User page tools
More
What links here
Related changes
Page information
Page logs