BMW E90 New Battery Coding & Register FAQ and Guide

Check information below to read if you’d like to know why coding/register BMW ss important and how you can get it done yourself!

Credit to bNks334 from bmw e90post forum. You are at your risk. 

Q: I have an older E90, does this apply to me?
A: This guide only applies to vehicles equipped with IBS (intelligent battery sensor). Registration and coding will not be successful on older vehicles that are equipped with basic power management systems.

Q: I replaced my battery and it works just fine, why all the fuss?
A: Disregarding the need to register and code for a new battery may result in improper charging. Over time, improper charging may have detrimental effects on the lifespan of your cars battery and the operation of the vehicles electronics.

Q: Why do I need to register a new battery?
A: The short answer is that BMW designed the charging system with an algorithm that varies the rate of charge by the age and type of the battery installed. Registering a new battery resets the algorithm back to optimal charging voltage for the specified battery.

Q: Why do I need to "code" for a new battery?
A: The answer to this varies. You may not have to! That is, so long as you replace your old battery with an exact replacement. However, if you switch from a wet-cell type battery to an AGM type battery, or vice versa, you must code for the change.

AGM and wet-cell batteries require a different rate of charge output from the alternator. Moving between these two types without coding can lead to over-charging or under-charging.
Also, batteries have a discharge rating called amp hours (ah). You must specify to the DME what the “ah” rating of your battery is so the car can run the proper charging algorithm.

Q: I bought a lightweight battery, but the “ah” rating for my new battery is less than the lowest setting available in the CAS/NFRM module. Is this ok?
A: While not ideal, you can certainly use your new battery. Code your car for the setting that best matches your new battery. Most important is ensuring you’ve changed the settings from wet-cell to AGM type, if necessary. Consequently, you may negatively impact the life expectancy of the new battery by coding say an 80ah AGM charging map when your lightweight battery has a discharge capacity of only 18ah…

Personally, I am running a Deka/East Penn Sports Power ETX-30L Battery ($103.99). I used XS Power 586 Tall Brass Post Adaptors (M6 Thread). The Deka ETX-30L is rated 400CCA @ 28.6Ah(20HR) and is a 21lb AGM type battery. EDIT: I now run a PC925. Both these batteries crank the car strong, but I would not recommend ever using anything weaker!

My 2011 E82 did not have a charging map listed in the CAS module for anything less than 80ah AGM. Therefore, this is what I chose when I coded my car (initially). There are people that have reported seeing options in the CAS module for as low as 40ah AGM. I believe updating to a newer CAS ZB software may provide more options. Or, maybe the additional options are only available in the CAS module for higher end models like 335is E92’s? I can only speculate as to why some people have more settings available than others.

I ended up using Carly to code my battery again. Even though the lowest setting I found in the CAS module was 80ah AGM, Carly provided a 36ah AGM option. After using Carly to code my new battery, INPA does indeed confirm (see appendix D) the charging system is using a 36ah AGM charging map, or at least INPA recognizes that’s what Carly set it to

Q: What cable do I need to connect to use BMWtools on my laptop/device?
A: I use a generic OBDII to USB (K+DCAN) cable I got off amazon, and it works fine:

Q: Can I use Bluetooth?
A: I bought a generic ELM327 OBDII to Bluetooth adapter for use with apps like Carly, Torque, Trackaddict, and Harry’s lap time to name a few, and it works fine:

Q: I installed a battery with exact replacement specs (e.g. 80ah wet cell with 80ah wet cell). How can I register my new battery?
A: There are several methods that can be used to register a new battery. See options 1, 2, and 3 below:

 I installed a battery of a different type and/or capacity (e.g. 80ah wet-cell with a 90ah wet-cell, or, 90ah wet-cell with a 40ah AGM). How can I code for the changes I made to the battery?
A: There are several methods that can be used to code for battery changes. See options 1, 2, 4, and 5, below:

Option 1:


Carly is an Android/iOS app that can be used to painlessly register and code a new battery. Just purchase the app, and the in-app purchase for the battery module, and it walks you through the process.

1) Download the Carly app on your device ($44.99 + $9.99 for battery module):
2) Verify your OBDII to USB cable is working properly or that your OBDII to Bluetooth adapter is properly paired to your device and communicating with Carly.
3) Purchase the in-app battery module. From here, Carly walks you through the steps of both registering the battery and coding for any changes. It’s that simple.

Option 2:

Use Rheingold (ISTA-D) to REGISTER and/or CODE a new battery. The virtual machine, mentioned above, comes pre-loaded with this dealer level software. An ICOM emulator is all setup for you to use this program with the aforementioned K+DCAN cable.
  • Rheingold is an amazing tool. It will automatically diagnose issues with your vehicle and provide a corrective action plan to fix them. It will even tell you the steps you need to take to re-program things with a separate program called ISTA-P.


1) Turn ignition to the “on” position. INPA can be used to verify the car is communicating properly. INPA shows when the ignition is in the on/off position.
2) Load Rheingold
3) Click the “Identification” tab
4) Click “Read out” tab and then “start” in the bottom right (takes a long time to gather cars info)
5) Once vehicle info has loaded (verify your vin is accurately displaying) click the “Vehicle management” tab
6) Navigate to: Service function>body>voltage supply>battery>register and then click “start search”
7) Select result “ABL register battery replacement ”
8) Rheingold then walks you through your options! You can simply register a new like-for-like battery, or you can change the battery capacity. Rheingold will prompt you to perform coding using ISTA-P!

Option 3:


Use Ediabas Toolset32, a software packaged with the BMWtools suite, to REGISTER a new battery

1) Run Tool32.exe
2) Navigate: File>Load SGB>C:/EDIABAS/ECU/[choose the appropriate .prg file for your DME – see appendix A]
3) Look up steuern_batterietausch_registri (near bottom of job list)
4) Go to Jobs menu
5) Select Run Job (German: Job Einmal Ausfuhren [run job once])
6) Verify operation reports “Okay”

Option 4:


This method is a bit incomplete in regard to coding. It uses NCSexpert to edit the settings in the CAS and NFRM modules. Essentially, you are manually changing the settings in the CAS/NFRM module to reflect the new battery.

*****While this method seems like a straightforward way to code for battery changes, it fails to address the issue of vehicle order (VO). This could have implications for future coding and ZB updates. See option 5.

*****After completing this coding, you must still perform "Option 3" to register the new battery using Tool32. Or, you can use ISTA-D to do the registering, but then you might as well also use ISTA to do the programming at that point...


1) Load NCSExper.exe
2) Select a profile that has manipulation enabled: File>load profile> “CNCcoding”
3) Select: F1>F3>select your chassis>select “CAS
4) Press F6 for back
5) Press F4 to select a specific module “Process ecu” then you get a list of all modules available for your car
6) Select “CAS” then select “READ ECU” this is going to read all the values from the specific module and create an FSW_PSW.TRC file with the values
8) Leave NCSExper.exe open and navigate to the “work” folder ([X]:\NCSEXPER_64\WORK)

The FSW_PSW.TRC file we generated when we “read” the CAS module is where we are going to change the battery settings. After making our changes, we will then change the file extension to the file type NCS uses to write to the selected module (.MAN).

At this point, you can also use a program called NCSDummy to make things easier. You can use NCSDummy to import the .TRC file. NCSDummy will provide translations and descriptions for all the settings in the CAS module. I will not cover the details on how to use NCSDummy, it is very easy if you search. The following steps continue with how you can just simply edit the .TRC file in notepad to achieve our goal of coding a new battery:

9) Open the generated FSW_PSW.TRC file with notepad
10) Select: File>save as>FSW_PSW.MAN (be sure to select “save as type” to all files so that it will accept the “.MAN” extension. If you fail to do so it will just save it as a text file .TXT)
11) Search for the option “KLASSE_BATTERIE” and change the value from its current setting to a setting that most closely matches the rating of your new battery (e.g. “90ah” to “70ah” or if using an AGM battery “70ah_agm”) (see Appendix E)
12) Select: File >Save
13) Back to NCS now hit F5 for basic functions
14) Select “coapiReadSgGetFswPsw” and then “ok.” You are basically telling NCS to read all the values from your .MAN file. You will see a screen… just press ok. Then press ok again.

Ok now take a look where it says “JOBNAME = CODIERDATEN_LESEN” We need to change that to a coding function because we want to write the changes to the module, not READ as we did earlier.

15) Select F2 “job”
16) Select SG_CODIEREN and press ok 
17) Then press F3 to execute the job. After a pause you will see the “coding ended” message!

I am not sure if these steps are 100% what you’ll see. It’s been a while since I coded my battery, but I’ll update the steps as needed.

Instead of clicking "Process ECU", you can click "Process car" (F3), and then "Code Car" (F1). This will code every module in the car (might take longer like 5minutes) for the changes you made in the .MAN folder for the CAS module we read. There are changes that may need to be made in NFRM that this will take care of.

The battery rating should now be updated in the system. You can verify the coding was successful by performing the steps outlined in Appendix D.

Option 5:


This is the proper method to manually code for changes to the battery. Your vehicle order (VO) stores all the information regarding the various hardware your car came with from the factory. For example, if your car came with a wet-cell 70ah battery, your VO will read out with attribute -B070 (see Appendix B). Now, lets say you used option 4, above, to manually change the CAS module to reflect a new 70ah AGM battery. Your VO will still reflect the old battery of –B070. You want your VO to be updated to read -A070 (see Appendix B).!

If you go to the dealer, their software (Rheingold/ISTA-D and ISTA-P) will read your VO and recommend diagnostic/programming changes as if you still have that old battery installed. Basically, their software would overwrite the changes you made in option 4 and set all the coding back to the settings that reflect the old battery!

This is also how people lose their DEALER flashed PPK tune. The dealer fails to perform the proper programming portion of the PPK flash and the VO is never updated to reflect the PPK tune is installed on the vehicle. Return visits to the dealer then results in the dealers software to recommends DME updates that overwrite the PPK dme software! If you properly update the VO then only software, and settings, that matches your cars hardware will be recommended!

Changing VO
1. Open NCSEXPER.exe
2. Select: File > Load profile > Select a profile that has manipulation enabled (“CNCoding”) > Click OK
3. Press F1 (VIN/ZCS/FA)
4. Press F3 (CS/FA f. EC) > Select E89 (chassis family for E9x and E8x vehicles) > Click OK > Select CAS > Click OK
5. Press F6 (Back)
6. Press F1 (VIN/ZCS/FA)
7. Press F2 (Enter FA) > Select E89 > Click OK
8. A window labeled “Enter VIN” appears with your vehicles VIN number filled in > Click OK
9. A window labeled Enter FA appears > scroll to find VO for old battery (-B090) > highlight –B090 and press delete on keyboard
10. Enter –A080 (see Appendix B) in the “Attribute” box > Click Add > Click OK
11. Press F6 (Back)
12. Press F4 (Process ECU) > Select CAS > Click OK
13. Press F2 (Change Job) > Select FA Write > Click OK
14. Press F3 (Execute Job)
15. Verify that the write is complete “Job Ended”
16. Press F1 (Change ECU) > Select FRM/NFRM > Click OK
17. Verify lines: get coded, FRM, JOBNAME = FA_Write
18. Press F3 (Execute Job)
19. Verify that the write is complete “Job Ended”
20. Press F6 (Back) > Exit NCSEXPERT

The CAS and NFRM/FRM modules will now always default back to the new attributes you assigned to the VO!

It is important to now use NCSExpert to code the car to the new VO settings. If you properly changed the VO, NCSExpert will automatically write the battery capacity and type settings to the various modules. This is what we did manually in option #4!

2. File > Load profile > Select a profile that has manipulation enabled (“CNCoding”) > Click OK
3. Press F1 (VIN/ZCS/FA)
4. Press F3 (CS/FA f. EC) > Select E89 > Click OK > Select CAS > Click OK
5. Press F6 (Back)
6. Press F3 (Process Car)
7. Press F1 (Code Car)

Appendix A:

MSV70,MSV 70.0 for N52 (NG6),
MSV80,MSV 80.0 for N52KP (NG6),
MSD80,MSD 80.0 for N43 N53 & N54 with EWS4/CAS,
Mevd172KW, Mevd 172 for N55 (Older N55’s up to late 2011 production)
Mevd176k, Mevd 176k for N55 (late 2011 production date or newer)
MSS60,MSS60 for S65 (M3),

Appendix B:

"B" represents wet-cell, while "A" represents AGM in the VO.
E B046 BATT_46AH //46 Ah-Batterie
E B055 BATT_55AH //55 Ah-Batterie
E B070 BATT_70AH //70 Ah-Batterie
E B080 BATT_80AH //80 Ah-Batterie
E B090 BATT_90AH //90 Ah-Batterie
E A070 BATT_AGM_70AH //70 Ah-AGM Batterie
E A080 BATT_AGM_80AH //80 Ah-AGM Batterie
E A090 BATT_AGM_90AH //90 Ah-AGM Batterie

Appendix C:

  • ISTA/D (aka Rheingold) is the current dealership diagnostic software for all Exx and Fxx cars.
    • ISTA/D is the replacement for older dealership "DIS" diagnostic software.
  • ISTA/P is the current dealership programming software for all Exx and Fxx cars.
    • ISTA/P is the replacement for the older dealership programming software “SSS.”
  • ISTA/P & ISTA/D are designed to be used with an ICOM Interface, and with full ICOM-A-B-C, you can connect to older cars. The ICOM "C" Connection is for the older BMW ADS 20-pin round "Pacman" connector in the Engine Bay. You can find versions of ISTA/D with an ICOM Emulator built-in that allows you to use it with an ENET Interface for Fxx cars and a DCAN Interface for Exx cars.
  • INPA (interpreter for test procedures) is an older factory floor diagnostic software, designed to run test procedures. While INPA can be set to an English User Interface, most of the Test Procedures (scripts), which can be difficult to find, are in German.
  • WinKFP is for flashing/reprogramming modules
  • NCSexpert is for coding, it can be used to set up options and enable things
  • Tool32 is like a DOS cmd box for the modules, it's text based and can it's able to ask the ECUs various questions and show the answers (like status, programming data etc)

Appendix D:

Verify changes:

To see the current rate your battery is charging at, open the INPA program>> E90>>ENGINE>>MSD80>> Status(F5)>>PM-IBS>>PM FIELD 2 . Under the PM Field option look at the ah reading registered, to see what it's set at to charge your battery at present. If it's incorrect, you need to re-try the options outlined above. Once you have done this, re-register your battery using the Tool32 program. Then go back into INPA and check the PM Field 2 again to see if the new ah reading has been registered.

Appendix E:

wert_00 value 00
80ah 80 ampere-hours
90ah 90 ampere-hours
110ah 110 ampere-hours
70ah 70 ampere-hours
55ah 55 ampere-hours
46ah 46 ampere-hours
70ah_agm 70 ampere-hours (agm)
90ah_agm 90 ampere-hours (agm)
60ah_agm 60 ampere-hours (agm)
80ah_agm 80 ampere-hours (agm)


Free Download BMW E-sys 3.32.1 for ENET Interface

Big thanks to shawnsheridan



BMW E-sys 3.32.1 Released Notes:

Current version:
PSdZ: 5.06.01
ProDiaS: 3.4.0
Jobs: 005_009_002
Template: PT01_template.003_000_228

System requirement:
Processor: Intel Pentium 4 with minimum 1GHz clock rate
RAM: mindestens 512 MB
Hardware interface: (CAN/FD. Ethernet, …)
Java-Version (abgesichert mit): 64 bit
Operation system: Windows 7 (64 bit)
Driver for HW-Interface: for details please see information in ProDiaS Released notes

Info – Please note:
During the vehicle programming with E-sys, no further applications should be excuted in parallel on the flash processor. This includes, inparticular, background processes, such as the indexing service for desktop search or automatic deframentation services.
E-sys is currently not supported under Windows 10. workaround for display problems under Windows 10: E-sys.exe->Properties->Compatibility->”Override behavior at high DPI scaling”->Scaling performed by: “System”

Quality centre (processed items):
14269 – PDX-Charger – Removing of EE-Components from a Container
14271 – Coding Verification – Button ‘Verify All’ will not be activated when using FAs with a single entry
14293 – PDX-Charger – ‘Save As’ of a Container fails when using certain path names
14299 – PDX-Charger – missing SWEs after container import into PsdZ
14301 – Coding Verification – Function ‘Verify All’ can lead to an runtime error

Change requests and minor changes:
CR3304 – Certificate Management – Adaptations based on CR3135 AND 3178
KA3459 – Valid naming for RSU -specific ICs
CR3560 – E-sys – Conversion to 64 bit Java
CR2359 – Certificate Management – unitary form for result files
CR3681 – E-sys – Adaptations resulting from modified TAL-Schema (IDR for ISTA)
BMW Esys Coding: Confirmed by obdii365.com
  1. Lock unlock sound confirmation ( to prevent radio interference, add sound to confirm car locked when turn light confirmation inconvenient. This is setup in cic)
    2. Can operate the navigation menu including watching dvd when driving( for driving safety. Let the side driver operate the navigation menu )
    3. Display engine output and torque meter ( purely fun, look engine output )
    4. Cancel confirmation screen big screen boot delay
    5. Open the voice recognition function
    6. Three kind of bluetooth phone ringtones ( personality only )
    7. Increasing the cic memory address to 50
    8. The glass automatically rise to the top process is not terminated by the car door ( easy to get off to close the window waiting )
    9. The digital speed display ( fun only )
    10. Air-conditioned memory of the last off state ( without air conditioning season is more convenient )
    11. Indoor cycling memories of the last time the state when engine off
    12. A-pillar electric tailgate buttons and remote control a key to close the power tailgate. At any time terminate the reverse operation ( turn off 15 minutes or more reset )
    13. Increasing shift paddles
    14. The small screen to the large-screen display modify
    15. Pdc display vertical and horizontal
    16. Disable the seat belt status display – passenger seat
    17. Disable the seat belt status display – driver seat
    18. Disable seat belt reminder mistake ! The link is invalid. Device – passenger seat
    19. Disable seat belt reminder – driving position
    20. Disabled unfasten their seat belts voice prompts – passenger seat
    21. Disabled unfasten their seat belts voice prompts – driving position
    22. Intersection vehicle high beam automatic control ( no condition tested. Do not know if it is valid )
    23. Angel eyes open and cancel functions
    24 turn off the engine start-stop function turned on by default
    25, gps time synchronization
    26. Foot open the back cover
    27. Ds show s1-s7 selection
    28. Active sports gearbox program sport +
    29. Single microphone settings
    30. Engine off automatically unlock
    31. Internet applications
    32. Armrest usb playback video
    33. The maximum distance disable front camera view
    34. The maximum distance to disable the rear camera view
    35. Maximum speed disable front camera view
    36. The maximum speed to disable the rear camera view

Note that functions are verified with TESTED E-SYS 3.23.4 with BMW ENET cable (Ethernet to OBD) Interface: