BMW MRSZ “1 internal ECU error” fix

I lost almost an entire day trying to figure out what went wrong when I was playing with my E36 airbag module coding in an attempt to disable passenger seat occupancy detection.

I didn’t understand why most MRSZ settings were duplicated, such as these two:


I set only one of these to “nicht_aktiv”, after which the module threw an “internal ECU error” and the FS_LOESCHEN command returned ERROR_ECU_REJECTED. Even after I restored all coding settings back to their original values, the error remained.

As it turns out, after digging through 24KB of microcode, the reason to duplicate every setting is very simple – it is a form of EEPROM error detection. The unit periodically checks to see if every setting has the same value in both copies, and when that is not the case, a static error 195 is logged. Every error code above 100 is mapped to the “internal ECU error”, and when that happens the erase function is also blocked.

Fortunately, at the same time I also found a “secret” command to write EEPROM bytes. Not all areas can be written with that command, but at least the area where the errors are stored is writable.

Attached is an EDIABAS script that attempts to “reanimate” an MRSZ unit. Note that you need to restore the coding to a working state before running the script. NCSExpert’s SG_CODIEREN command will end with an error, that is because it tries to erase errors at the end of the process, which fails, the actual coding should in fact be OK.


Note – the script supports only MRSZ units (MRS v06, P/N 8374799), it does not support MRSZ2 (MRS v07, P/N 8372521), MRSZ3 or MRSZ4. The “secret” command simply does not exist in these modules. I do not know if it supports the older ZAE2 (P/N 8374798) units.

The source code of my MRSZ2 attempt can be found here. It includes working support for MRSZ.


15 Responses to “BMW MRSZ “1 internal ECU error” fix”

  1. August 4, 2013 at 5:22 pm

    You are so cool! I do not suppose I’ve truly read through a single thing like this before. So wonderful to find somebody with original thoughts on this subject. Seriously.. many thanks for starting this up. This site is one thing that is required on the internet, someone with a bit of originality!

  2. 2 Dmitry
    April 2, 2014 at 8:18 am

    Very interesting solution! Is it possible to modify this script for MRS2 v07 (P/N 8372521)?

    • April 2, 2014 at 8:59 am

      No, as I already mentioned MRS2 v07 does not implement the eeprom write command. It can only be reanimated with a motorola 68HC11 programmer or just buy a working one on ebay and code it.

  3. 4 krazei
    May 1, 2014 at 7:12 am

    Can you re-upload the file? It is no longer there. Thanks

  4. June 13, 2014 at 4:24 pm

    Wow!!! Great explanation!! thank you for sharing! Do you know if supports MRSZ4 units (6912755)?


  5. 7 Karl
    August 12, 2014 at 6:30 pm

    I was going to try this with the ZAE2, but with what program do i use the script?

  6. 9 Jonathan
    January 4, 2015 at 9:47 am

    can you create the same for C_ZAEBAE.PRG???? im having the same issue in my 318ti

  7. 10 Máté
    January 24, 2016 at 12:04 am

    I can’t say words… million thanks to you great job, working on ZAE2 :), my Airbag module is working as it should. 🙂

  8. 11 Hugin
    August 12, 2016 at 6:49 pm

    This is done with Best2 programming? Can you make the source for your MRSZ_FIX.PRG program available? How are you getting the source for the “24KB of microcode” ? I’m just starting to learn this stuff and any pointers/info about programming this stuff would be greatly appreciated. Thanks!

    • August 15, 2016 at 2:18 pm

      You need to have a programmer to fetch the microcode from the board. But I later found a command with which you can read the ROM bytes.

      The source code is in Best2 indeed. Couldn’t find the original one, but my MRSZ2 attempt is here. It’s basically the same as MRSZ but with some extra code.

      • April 3, 2018 at 10:02 pm

        Hi rusty!

        Can you tell me how can i run the mrs2_fix.b2v file? Which program should I use?

      • April 4, 2018 at 11:11 am

        Now i can compile the script and run the error deleting job but i have an error code. I get the ERROR_UNSUPPORTED_ECU_VERSION error report.

        INPA information:
        Rework program: MRS2
        Version: 1.42
        Responsibility: BMW TI-430 GALL
        Control unit description file: MRS2
        Control unit: MRS2
        Version: 1.11
        Responsibility: BMW TI-433 Winkler H.-J.
        Language: deutsch

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: