Results 1 to 18 of 18

Thread: E31 EKM Coder - Update coding of EKM modules unsupported by NCS Expert

  1. #1
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany

    Lightbulb E31 EKM Coder - Update coding of EKM modules unsupported by NCS Expert

    E31 EKM Coder - Update coding of EKM modules unsupported by NCS Expert

    Ever tried to recode an early E31 EKM module with NCS Expert and found out that it does not work? Recoding via DIS/Progman works but is coarse and does not offer the same level of control as NCS Expert does. Some coding features are not even possible via DIS/Progman. End of story? Not any longer...

    E31 EKM Coder reads and writes coding from and to all E31 EKM modules including the ones that do not work with NCS Expert. Coding is read to and written from nettodata trace files for use with NCS Dummy or binary files for use with an EEPROM programmer. E31 EKM Coder does not require Ediabas, works with both serial and USB ADS interfaces and can run on modern 64-bit operating systems.




    Download E31 EKM Coder 0.4 (111 kB)

    E31 EKM Coder is freeware. If you paid for it you got cheated!

    Minimum requirements

    • Microsoft Windows XP or later
    • Microsoft .NET Framework 4 (link) or later
    • USB or serial ADS interface

    To get the most out of E31 EKM Coder the application should be used in conjunction with NCS Dummy (link)

    If you find bugs or experience any problems with E31 EKM Coder, please let me know in this thread or contact me at .


    Who is this tool for?

    If you have an early E31 of which the EKM module is not compatible with NCS Expert and you wish to change some coding, this is the tool you want.

    If you have a later EKM module that works with NCS Expert, you don't need E31 EKM Coder. It will work too but offers few benefits over NCS Expert. In the future E31 EKM Coder may become a standalone replacement for NCS Expert. The differentiator with NCS Expert would be that E31 EKM Coder runs on any modern (Windows) computer and does not require a true serial port.

    It is not exactly clear which EKM modules do work with NCS Expert and which do not. 1995 and up all work with NCS Expert. 1991 and 1992 do not work. It's probaly safe to assume older than 1991 do not work either but it's a bit unclear from when on exactly it works. If you do have a '93 or '94 EKM and you've tried it with NCS Expert, please let me know whether it worked for you. If it doesn't, you'll get error COAPI-1000 (CODIERINDEX) in NCS Expert.


    Known limitations

    E31 EKM Coder can read the entire coding memory of the E31 EKM module but write only address range 0x58 .. 0xE7 (NCS Expert has the same limitation). The addresses outside this range are write-protected by the module itself. So far I have not found a way around that. All regular coding features like units and language are found within that address range but some advanced features like making the EKM module virgin again are not possible via E31 EKM Coder or NCS Expert. The only way to achieve this remains desoldering the EEPROM from the EKM printed circuit board and reprogram it with an EEPROM programmer...

    At this moment E31 EKM Coder does not have provisions to manipulate the coding from within the application. E31 EKM Coder exports and imports nettodata trace files that can be manipulated with NCS Dummy. I know it's a bit ironic that E31 EKM Coder does not require Ediabas (INPA / NCS Expert) to read from and write to the EKM module, yet depends on NCS Dummy which requires... NCS Expert's DATEN files. In the future I hope to expand the E31 EKM Coder user interface with most common coding features so that the application can be used truly standalone and NCS Dummy is required only for more advanced jobs.

    E31 EKM Coder can read the central coding key (ZCS) but cannot (yet) write it. I might add support for updating the ZCS in a later release. Note that the ZCS has no direct effect on the coding of the car. It's just the digital equivalent of the label on the inside of the fuse box lid.

    Only ADS interfaces are supported. E31 EKM Coder is not compatible with the BMW/Siemens DK (aka yellow head). No support for the DK is planned.


    Installation and usage

    Download E31 EKM Coder and extract the contents of the downloaded archive to a local folder on your hard disk. Double-click E31EkmCoder.exe to start the application.

    Uninstall is as simple as removing the extracted files from your hard disk.

    By default E31 EKM Coder is set to detect the COM port automatically. You do not need to change this setting unless you have many COM ports in your system and do not want to lose time by probing each port. E31 EKM Coder can only detect the port when the ADS interface is connected to both the computer and the vehicle, and the ignition is switched on.

    The E31 EKM Coder user interface has only 2 buttons: "Download Coding" to read the coding data from the EKM module and export it to a nettodata trace file or binary file, and "Upload Coding" to import coding from a nettodata trace file or binary file and write it to the EKM module.

    The typical workflow is to use "Download Coding" to read the current coding of the EKM module to a nettodata trace file, then load that trace file in NCS Dummy to make changes to it, and finally use "Upload Coding" to write the updated coding to the module.

    It is recommended to switch off the ignition for approximately 10 seconds after coding the EKM module.


    Example: Changing an EKM from imperial to metric units

    Connect the ADS interface to both computer and vehicle, switch on ignition and launch E31 EKM Coder. Click "Download Coding" and select "To Nettodata trace file". E31 EKM Coder immediately starts reading coding data from the EKM module and after a couple of seconds a save file dialog appears to export the coding to a file on your hard disk.



    Now launch NCS Dummy and load the trace file:



    Scroll through the list of coding functions and tick the checkboxes to make changes. For this particular example following changes are made:

    VERBRAUCH_EINHEIT - FUEL CONSUMPTION UNIT mpg_uk → l/100km
    WEG_REICHWEITE - RANGE ON REMAINING FUEL UNIT mls → km
    WEG_DURCHSCHNITT - AVERAGE SPEED UNIT mph → km/h
    WEG_EINHEIT - DISTANCE UNIT mls → km
    TEMPERATUR_EINHEIT - TEMPERATURE UNIT grad_f → grad_c
    WEG_LIMIT - SPEED LIMIT UNIT mph → km/h
    ZEIT_EINHEIT - TIME FORMAT 12_stunden → 24_stunden
    DATUM_FORMAT - DATE FORMAT mmtt → ttmm
    ZEIT_ANKUNFT - TIME OF ARRIVAL FORMAT 12_stunden → 24_stunden
    ZEIT_TIMER1 - TIMER 1 FORMAT 12_stunden → 24_stunden
    WEG_BC_GRAFIK_EINHEIT - DISTANCE UNIT IN ON-BOARD COMPUTER (OBC) mls → km
    VERBRAUCH_BC_GRAFIK - FUEL CONSUMPTION UNIT IN ON-BOARD COMPUTER (OBC) mpg_uk → l/100km
    GESCHW_EINH_BC_GRAFIK - SPEED UNIT IN ON-BOARD COMPUTER (OBC) mph → km/h

    Once you are done making changes, click "Export Nettodata", then "Export Nettodata trace file" and save the changes to a file on your hard disk. It is recommended to not overwrite the original trace file and keep that as a backup in case you ever wish or need to revert to the original coding.

    Now switch back to E31 EKM Coder, click "Upload Coding" and select the trace file exported with NCS Dummy. E31 EKM Coder will show a final confirmation dialog and after answering positively proceed to code the EKM module. The process takes just seconds.



    Switch off the ignition for approximately 10 seconds and from then on the trip/odometer and multi-information display (MID) should display metric units.


    Future plans

    At this moment E31 EKM Coder is very basic and depends on NCS Dummy to make changes. I hope to implement a better user interface in the future that allows you to change (popular) coding by simply ticking self-explanatory checkboxes. Maybe I'll even throw in support for the general module (GM) and light control module (LKM). I do not have any plans to support other chassis nor is it my intent to implement the advanced features of NCS Dummy and NCS Expert.

    I can't make any promises or planning. I don't have much time these days to work on projects like this. That's also why E31 EKM Coder was released in its current form: A basic tool is better than nothing. I hope it's useful to some of you!

    Changelog

    • 0.4 (2023-02-12)
      • Further improved reliability of downloading coding. This fixes another timeout error in EKM_READ_CODING for the earliest EKM modules.
    • 0.3 (2020-11-15)
      • Improved reliability of downloading coding. This fixes a timeout error in EKM_READ_CODING after VIN/GM/SA/VN are read correctly for the earliest EKM modules.
    • 0.2 (2020-07-13)
      • First public release.
    Last edited by revtor; 02-12-2023 at 10:21 AM. Reason: E31 EKM Coder 0.4

  2. #2
    Join Date
    Jan 2017
    Location
    The Netherlands
    Posts
    157
    My Cars
    850i
    Thanks Revtor, good work.
    Will it be possible to change the odometer reading from miles to kilometers?

  3. #3
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany
    Quote Originally Posted by Albert850i View Post
    Will it be possible to change the odometer reading from miles to kilometers?
    Yes, that is possible! See the example I gave in the topic start.

  4. #4
    Join Date
    Feb 2010
    Location
    Hampshire UK
    Posts
    8,891
    My Cars
    99 840ci Sport Indv
    Brilliant work Revtor!
    Timm..2007 E64 650i Individual Sport..1999 E31 840ci Individual Sport..ex owner of 2000 E38 740..1999 E38 740i V8 M62..1998 E38 735i V8..1993 E32 730i V8..1988 E28 518i


    My BMW Repair YouTube Channel
    My Current 840ci Sport Individual
    My Current 650ci Sport Individual
    My E31 Repair and Information Website
    My E38 Repair and Information Website
    My E63/E64 Repair and Information Website

    Chase - Heroes to a generation

  5. #5
    Join Date
    Sep 2003
    Location
    Birmingham, UK
    Posts
    1,873
    My Cars
    BMW 850 and E55 AMG
    Great stuff, I was trying some coding at the weekend, and the EKM wouldn't recode through NCS.
    DIS 44 apparently did manage to code it without issues.

    One of the jobs with NCS Expert appeared to be something along the lines of generating an FSW_PSW trace based on the ZCS, so even though it couldn't read the coding, it could tell me what it was planning to code.

    I have got a set of saved traces now from a Euro 850i

    This is a .zip file disguised as a .pdf as it's not accepting the upload as a zip. Save it and alter the name to .zip and it'll open
    850I Traces.pdf

    Enclosed is the full ZCS, options list of my car, coding traces read from the GM2, LKM2, DWA3 and the autogenerated EKM trace, as well as the complete fsw_psw.trc generated on connecting. This should be enough to compare traces between country specs and versions.

    Giftschrank Projekt

  6. #6
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany
    Quote Originally Posted by enda320 View Post
    Great stuff, I was trying some coding at the weekend, and the EKM wouldn't recode through NCS. DIS 44 apparently did manage to code it without issues.
    Indeed. There appears to be a bug in the data files used by NCS Expert that does not affect DIS. NCS Expert seems to expect a different coding index than actually found.

    That's not the only bug concerning the Ediabas files for the E31 EKM. Just try to view the EKM coding in INPA: It just spews garbage at the screen while DIS has no issues whatsoever.

    I guess that with proper disassembly tools for the PRG/IPO files one may be able to fix the problem(s) but it was quicker for me to write a tool that bypasses Ediabas completely.

    One of the jobs with NCS Expert appeared to be something along the lines of generating an FSW_PSW trace based on the ZCS, so even though it couldn't read the coding, it could tell me what it was planning to code.
    That's right. You can even use NCS Expert to generate trace files without communication to a vehicle (manual ZCS/FA entry).

    Note that the FSW_PSW.TRC file is used by NCS Expert as a working file for various operations. Most of the time it does not contain traces that were actually read from your module(s).

    I have got a set of saved traces now from a Euro 850i

    Enclosed is the full ZCS, options list of my car, coding traces read from the GM2, LKM2, DWA3 and the autogenerated EKM trace, as well as the complete fsw_psw.trc generated on connecting. This should be enough to compare traces between country specs and versions.
    Thanks!

  7. #7
    Join Date
    Aug 2006
    Location
    Victoria, BC, Canada
    Posts
    158
    My Cars
    91 850i
    Hey Revtor, thanks for creating this. It is working great on my 1990 J-spec.

    I have a question about the filename the program generates. In my case it puts in C01 as the coding index. In NCS expert manually entering my ZCS returns a coding index of EKM.C00.

    Which is correct? Is the E31 EKM coder hard coded to write out the C01 in the filename?

  8. #8
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany
    DeltaSix: E31 EKM Coder reads the coding index from the EKM module itself (address 0xFB). I'm pretty sure that is the correct coding index.

    Also note that when trying to read and code an early EKM with NCS Expert, the error message you'll get is "CODIERINDEX" (coding index). So clearly NCS Expert expects a different coding index than actually reported by the module. More proof that NCS Expert is wrong.

    In fact I know part of the problem and can fix it - I just don't have the total picture. I noticed that all .Cxx module description files with an extension other than .C00 (the extension indicates the coding index) have a field "SGID_CODIERINDEX" with the coding index as value (use the disassembly feature of NCS Dummy to view this). There's one exception: EKM.C01... I guess that not explicitly containing the field equals to the default value (0) and that is wrong. It should be 1. Using NCS Dummy I've added SGID_CODIERINDEX 01 to EKM.C01 (disassemble EKM.C25 if you want an example to copy from). With this modified EKM.C01 it is possible to read the EKM using NCS Expert! Writing, however, still fails. I'm afraid there's at least another bug in Ediabas PRG/IPO files but these are a lot harder to debug... Since I had developed an early version of E31 EKM Coder many years ago I was already able to read & code any EKM so I didn't spend more time on trying to get NCS Expert to work.
    Last edited by revtor; 09-12-2019 at 01:09 PM. Reason: typo

  9. #9
    Join Date
    Jul 2007
    Location
    Iceland
    Posts
    4,682
    My Cars
    BMW 850
    Could this fix my problem on the transmission fault?

  10. #10
    Join Date
    Aug 2006
    Location
    Victoria, BC, Canada
    Posts
    158
    My Cars
    91 850i
    Revtor, thanks for the detailed explanation. Makes perfect sense.

  11. #11
    Join Date
    Jan 2017
    Location
    The Netherlands
    Posts
    157
    My Cars
    850i
    It worked, thanks again!

  12. #12
    Join Date
    Mar 2010
    Location
    Kuala Lumpur, Malaysia
    Posts
    168
    My Cars
    BMW E39 530i Sport
    Hi Revtor,

    Just came across this thread by recommendation of a FB group. Thanks for the great work! Waiting for my ADS cable to arrive to code my EKM!

    1st thing I wanna do is code my cluster from miles to KM.

    Second thing is, my car (1990 E31 850i) had been changed from M70 V12 to M60 V8 by a previous owner, and the RPM gives incorrect readings. Way too high RPM!

    Can you tell me what codings need to be changed to do correct this? This will be my first time working on NCS expert/dummy so no experience there.
    Last edited by johnate; 09-30-2021 at 12:19 AM.

  13. #13
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany
    johnate: Here's what you have to change to make the EKM recognize the M60 properly:

    STEIGUNG_EINSPRITZ_KENNL - FUEL INJECTION CHARACTERISTIC CURVE SLOPE m70b50 → m60b40
    SCHWELLE_UEBERDREHZAHL - ENGINE SPEED THRESHOLD 6700_u/min → 7200_u/min
    ZYLINDER_ZAHL - CYLINDER COUNT 12_zylinder → 8_zylinder
    KUEHLMITTEL_OTEMP_GR - COOLANT TEMPERATURE UPPER LIMIT wert_01 → wert_02
    KUEHLMITTELTEMP_ADC - COOLANT TEMPERATURE ANALOG-TO-DIGITAL CONVERSION kennlinie_02 → kennlinie_03
    KUEHLMITTELTEMP_ADC_WERT - COOLANT TEMPERATURE ANALOG-TO-DIGITAL CONVERSION VALUE kennlinie_02 → kennlinie_03
    MOTOR_FAKTOR - ENGINE FACTOR 3_imp/umdrehung → 4_imp/umdrehung

    If the dial faces were changed as well and you now have a 280 km/h speedometer (the 850i speedometer goes up to 300 km/h) you should also change:

    TACHO_SKALA_ENDWERT - SPEEDOMETER MAXIMUM VALUE 300_km/h_ece/jpn → 280_km/h_ece/jpn
    TACHO_SKALA_ENDWINKEL - SPEEDOMETER MAXIMUM ANGLE 300_km/h_ece/jpn → 280_km/h_ece

  14. #14
    Join Date
    Mar 2010
    Location
    Kuala Lumpur, Malaysia
    Posts
    168
    My Cars
    BMW E39 530i Sport
    Thanks for the reply! The original 300kmh cluster is maintained, no problem with the speedometer, temperature and fuel gauge.

    Only need to correct the RPM readings and miles to KM

  15. #15
    Join Date
    Sep 2014
    Location
    Santo Domingo, DR
    Posts
    30
    My Cars
    1995 BMW 750i DG21097
    Hey, Revtor

    Thanks for your research and development on this and everything else BMW for all of us. I'm curious to know what data must be changed on EKM's eeprom to make it virgin. Maybe even on LCMs. For example using a UPA programmer to read the eeprom information directly or in the case of an LCM, the motorola Micro. I have been successfully able to read the information off of an early e38 LM and a later E53 LCM using UPA. I just have no Idea what gets modified for usable changes, like virginizing. Or in my case I've been trying to retro fit a LCM IV to an early e38 LM and CCM version. Any input woud be great. Thanks

  16. #16
    Join Date
    Nov 2007
    Location
    Belgium
    Posts
    2,484
    My Cars
    Made in Germany
    jl01152: This depends entirely on the module.

    To make the E31 EKM virgin again you have to change addresses 0x000000FC and 0x000000FF to value 0x3F in the 93C56 EEPROM. This must be done via an EEPROM programmer and cannot be done with E31 EKM Coder.

    I have no idea how the used state of the E38 LCM module is detected, sorry.

  17. #17
    Join Date
    Sep 2014
    Location
    Santo Domingo, DR
    Posts
    30
    My Cars
    1995 BMW 750i DG21097
    Thanks for that information revtor.

  18. #18
    Join Date
    Feb 2023
    Location
    Czech Republik
    Posts
    1
    My Cars
    BMW e39 530da 2001
    Neuvěřitelná práce, a velký RESPEKT pro revtora. Aní mě pořádně nenapadá, jak Ti poděkovat, za to co jsi tady předvedl. Ta jednoduchost a přehlednost, hardwerově nenáročné rozhraní a dovolím si i napsat bez hloubkové znalosti kódování, je velmi vhodný jak pro začátčníka, tak i v případě vyhození nějaké z chyb NSC Experta, tak i DIS, a podobně.V jednoduchosti je síla a jak se u nás říká, někdy méně znamená více v určitých případech. Ještě jednou velké díky a jsem rád,že ještě jsou na světě lidi, jako jsi Ty.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •