Introducing ZBNumberwang
What is it?
ZBNumberwang is an app to parse and browse the data found in BMW ECU data folders, as used by BMW appplications like WinKFP and Tool32 or ISTA etc.
These are sometimes referred to as "Daten" files however they are only a portion of what is included in the 'Daten' files for a platform.
ZBNumberwang will read either of the following directories:
- The current files used by a current WinKFP installation - example - C:\EC-APPS\NFS\DATA (depends on which chassis files have been loaded)
- The WinKFP data files for an ISTA installation - typically something like SP-daten ??? \ecudata\Exx\data where Xnn = chassis code (Exx or Fxxx aka E46, F030, etc.)
To use ZBNumberwang, you select a chassis\data folder (either of the above), let it parse the data, and then can browse the information retrieved and sorted.
What does it do? The basic tabs in ZBNumberwang allow you to see the following...
System - An extracted summary of identifiers for the module. Worth noting that BMW (and Bosch etc. whoever touches these ECU software files) can be inconsistent about their labeling and tagging and use of fields, but mostly the following will be true:
At the top are a summary of any unique codes listed for 'ZL System' and 'ZL Project' (or Projekt as it were).
- System is normally the master engine management system. Bosch ME systems like ME7 or ME9 for instance, or, Siemens systems like MS42 or MSS54.
- Projekt is normally the actual BMW engine code, and will be a highly familiar code to mechanics, tuners, and even owners. For example M52, S54, S62, N42, etc.
Next is a breakdown of the "ZLREFERENZ" number. This is a coded number that is not only found in the headers but is often written into the binaries in ASCII plain text as well. In raw form it will look something like "0087160H700BBKMY8", but it is positionally meaningful therefore helpful to parse and examine.
It consists of 3 sections of 4 characters and 1 chunk of 3-4 (a character was added to the last field for later platforms)
- ECU Family is a number that is unique to the entire platform. A master ID for all variants of this ECU more or less. There generally will only be one of these.
- ECU System will be numbers that mostly correspond to the listed ZL Systems. However there might be exceptions, for example, MSS54 CSL has a unique ZLRef system code, but falls under the 'normal' MSS54HP ZL System number (interestingly even despite having unique hardware in the ECU, and being a good example of where it seems BMW hasn't always really followed their own rules for the system)
- Program Versions will be the variants of the actual program for the ECU that were found. The program is written by a 'long flash' along with a matching data calibration (tune). This is a critial number for tuning/flashing as it is generally the indicator of data layout, although on rare occasion, different prog versions will share same data layout.
- Calibration Versions are the actual tune-calibration numbers that were found. Each one corresponds to some kind of variation in equipment/tune/regulatory(emissions) that can be written by a 'data' or 'short' flash. The same calibration ID may be issued for 2 program versions, ie. perhaps "JD79" was a calibration update and there were separate JD79 versions created for both program "2601" and "2801".
ZB / Assembly Numbers - The "ZB number" is a number that indicates a valid combination of program + calibration.
It is the last 7-digits of the pseudo part number that can be retrieved from BMW in the parts catalog in order to determine the latest version of software for a particular car.
The ZB Number is labeled and referred to variously and inconsistently by BMW, but most commonly:
- Listed as "ZBNUM" inside file headers
- The number prompted as "ZUSB" or simply "ZB" in WinKFP and other programs
- The number shown as "Assembly number" in INPA and other programs
Each ZBNumber equates to a valid set of the following 3 numbers (which are also 7-digit pseudo part numbers):
- TypeNumber which is a clustering 'type' very inconsistently used by BMW.
- HWNumber which is actually the program number
- SWNumber which is actually the calibration number
Because ZBNumberwang also reads a history "HIS" file, quite often there are a large number of old numbers in this file for which there are no longer program and/or calibration files in your folder.
I call these 'ghost' ZB numbers and they can be displayed or hidden as required using tick box.
ZB numbers are most interesting when breaking down ZB history and supercession chains, but are also essential for using WinKFP. If one has access to very old legacy data package, the original files for these versions may be able to be obtained, however the older data packages are extemely hard to find publicly.
Type Numbers - Any Type number for the current platform can be selected and the valid programs that fall under that Type number will be displayed.
In this way should the platform of interest use Type numbers in a useful manner, different variations or supercessions of each type can be examined. Again BMW seems to use 'Type' inconsistently so this may or may not be very interesting to explore.
Programs - Each program listed corresponds to an actual flashable Program "0PA" file found in the folder.
Any program number listed should be flashable by selecting a valid ZB number that corresponds to that program.
Allows all parsed data for any given program to be viewed in one pane on the left. Also allows list of Programs to be sorted by any data column to search for similarities and breaks. If a 'field' was either blank or not found in the files for a particular version it will not appear in the display pane.
See notes below for examples of how free-text entry fields are used (or not) by BMW. Standards followed on one ECU may not be followed on another, and consistency is always an issue.
Calibration - Each calibration (or "tune") listed corresponds to an actual flashable data calibration "0DA" file found in the folder.
Any number listed should be flashable by selecting a valid ZB number that corresponds to that calibration. Naturally the calibration MUST MATCH THE PROGRAM it is written for.
ZBHistory - Will generate a graphical history-cascade for any given ZBNumber.
Over time, BMW has always issued a long series of program and calibration updates for any given ECU. These most likely were series of minor improvements, maybe more stable idle control, better OBD readiness, etc. or could be minor emissions/regulatory improvements. There is no way publicly to know much about what any given update changed, short of disassembling the programs individually. But we can at least see which ZB numbers were replaced by what, and trace a chain forward to find the 'last final update' for any given ZB number (for example "I have a car with this old ZB/Assembly number in it now, what would the latest version be?" This is the same function that the WinKFP Update process performs for instance).
This tab mostly self-explanatory but predecessors shows old versions that superceded to the number selected (if any), and supercessions shows the chain of any new replacing programs (if any). The final supercession will be bolded to indicate the 'final' version of that chain.
General Use Notes:
- In most tables, any column can be clicked on to sort (click again to reverse sort). This can make searching for certain data or groups of programs (or calibrations) with the same data very easy.
- Many of the 'fields' are free-entry text comments. However BMW, on any given platform, mostly has established / followed some kind of informal conventions. This pertains to the K_Fx and K_Vx fields specifically. By examining those often additional details about the program or calibration may be determined. Examples:
- Field K_F1 for an 0DA calibration file may show the chassis-code variant - example "E36/7-MT"
- Field K_F2 for a calibration may show the emissions standard "ECE" or "USOBD", or, may show a special order-code "SA858"
- Field K_V2 may be used in the calibration file to record the ZB-number that should correspond to the program or data file you are looking at...
- etc.
- Program and Calibration data come from text headers and often data is inconsistent. Issues that may be found include:
- Missing /blank data in fields that should be 'required' (example - a ZLReferenz 'data' code for a calibration... the ZLR number may be 'short' by 3-4 characters)
- Pure typos of the wrong data or wrong labels. Inside a K_F/K_V field a number may be labeled as "ZB" or "HW" when it is actually a SW #.
- Inconsistent use of the K_Fx/K_Vx field 'conventions' across and within platforms.
- Do not expect those fields to be consistent or complete. BMW / Bosch / Siemens just didn't roll that way. There are occasionally typos in that data as well.
- Because of problems above, it can be very helpful to examine other fields and see if missing or 'seemingly incorrect' data is provided or corrected within the other comments (unless of course those fields contain errors!)
Known Issues:
- Global search button is not implemented yet.
- Very early and very late data folders have not been comprehensively tested and may have incompatibilities.
- Folders for early EGS (transmission modules) are not parsed properly as they have some format differences which have not yet been accounted for.
- Rarely in the case of major hardware variants, in the history tab some platforms may cross a hardware-incompatibility boundary. For example with the MSS54 family the 'non-HP' MSS54 ECU's may show a supercession right through to MSS54HP versions that require different hardware (in this case, with double the memory and file size) and therefore it is not a valid 'flash supercession' but a 'hardware supercession'. WinKFP will not flash across this boundary, but the ZBNumberwang display does not filter for it at this time.
GET IT HERE:
ThisIsDropboxLinkForZBNumberwang
Screenshots:
Bookmarks