Connor McMillan

connor@mcmillan.website – http://github.com/mibs510

BMW E36 Z3 Cluster EEPROMs

Recently I’ve been interested in converting my analog dash board on my 2001 BMW Z3 into a digital dashboard using an arduino. So I bought a used cluster off of eBay for ~$47 The only part I was originally planning to use was the front half of the dash board to take the dials out and put 5″ LCD screen while keeping the cutouts for the odometer, turn signals, warning lights, etc. That way I would be able to still use the original second half of the cluster to keep the original odometer rolling and VIN number. Curiously I was interested in what was inside the two EEPROMs. The E36 cluster has two EEPROMs, one which is detachable and is believed to store the mileage, and car-specific info such as the size of the gas tank, size of differential gearbox, transmission type, etc. According to realoem.com this EEPROM is described as the “CODING PLUG” and is shown below.

Location of BMW E36 CODING PLUG

The plug is an enclosure for a Fairchild 93C46EN EEPROM. Upon connecting onto my TL866CS Minipro Programmer I was able to pull the 128 bytes off.

FAIRCHILD_93C46EN_LM03114_275447KM.BIN

And its contents:

E36 mileage location

The content is similar to that of a M35080 EEPROM from an E46.

https://www.bimmerforums.com/forum/showthread.php?1709868-Hex-Offset-in-M35080-EEprom-E46

Twisted (if you’re using an editor other than the EEPROM’s built in) :

E36 odometer mileage twisted

The first two lines contain the mileage, it’s just a matter of learning the formula used to store it. Also there might be a checksum as well. I remember reading on a forum (no link, sorry) that after the first two lines the data contains vehicle specific integers and flags such as the differential gear size, gas tank capacity for fuel gauge, KPH or MPH, etc. No one has been able to decode them last time when I searched.

In order to gain access to the second EEPROM you will need to remove the black plastic shell as shown below. You’ll need to detach the front half with the back half. The white, blue, and black X connectors each have “clamps” which are holding the plastic shell, you’ll need to apply force and squeeze the pins inwards while pulling the shell away from the board without damaging it.

The data which was pulled off: ST_M93S56_LM03114_275447KM.BIN

Examining the ST M93S56 EEPROM the VIN number (IKE stores only the last 7 characters of the VIN) appears to have been coded as:

Alpha-numerical VIN: LM03114

LM 03 11 03 40 -> 4C4D 0311 0340

E36 VIN location

If your using some other Hex editor other than the EEPROM programmer builtin editor, each byte will be twisted with the other, meaning that                 LM->4C4D->4D4C.

E36 twisted VIN

The 03 in between 11 and 40 to my best assumption represents the year of the car model is equal to or less than 2003.

Unfortunately I may have damaged something along the way of removing something which caused a malfunction and it pretty much ended here (CodE_2), as I’ve said before I’m not concerned for this board since I’m going to use the original one once I fit the LCD and arduino along with whatever transceiver I decide use to pull real-time data. I also wasn’t able to decode the mileage off of the Fairchild EEPROM but I’m guessing it’s stored in the first two lines (0x00 and 0x01). I’ve checked with Tachosoft and I also had no luck, the best way is probably creating a before and after snapshot of the EEPROM contents, record what the odometer displays and what the above contents are inside the EEPROM then run the car for a few miles or so and then again record the displayed mileage and and EEPROM contents and see what values have changed and how. FYI this cluster had 275,447 km on the odometer.

CodE_2 Error

“CODE-2 on the unit means that internal eeprom is damaged (or possibly not soldered correctly etc…). CODE-1 would mean that eeprom in coding plug is damaged or not present. Also could be EEP-1 or EEP2 indicating probably that data in either of eeproms are corrupted.” – Martin Kutny

More pictures!

6 Comments

  1. Ralf

    Hi Osmar,
    what is not clear to me is, the new odometer shows MLS (miles) with the code error, but you are talking about Kilometers in the describtion of the EEPROM. Whats correct? Miles or Kilometers?
    Regards,
    Ralf

    Reply
  2. Osmar Gonzalez

    To my understanding from my research the mileage is indeed stored in kilometers on the EEPROM and is then converted to miles on the screen depending on the region the car was manufactured for. US = miles, EU = km. The US/EU bit flag is probably also encoded into the “Coding Plug”.

    Reply
    1. Osmar Gonzalez

      I’m sorry but I don’t have any to spare. Besides that, putting a coding plug into a dashboard requires you to have the data pulled from the old plug. Mismatch of mileage from the new coding plug and the dashboard EEPROM will result in a red tamper dot next to your mileage.

      Reply
      1. Martin Kutny

        Hi Osmar,
        pleaset if you have disassembled that coding plug, would you be able to tell me or look at the 93c46 eeprom pinout? I mean which leg goes to which pin on the coding plug’s enclosure, to be able to read without breaking it?
        Also please how did you separate pcb from rear plastic? Did you drill out those plastic rivets?

        Reply
  3. Martin Kutny

    Hi Osmar,
    pleaset if you have disassembled that coding plug, would you be able to tell me or look at the 93c46 eeprom pinout? I mean which leg goes to which pin on the coding plug’s enclosure, to be able to read without breaking it?
    Also please how did you separate pcb from rear plastic? Did you drill out those plastic rivets?

    Reply

DROP A COMMENT

Your email address will not be published. Required fields are marked *