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.
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.
And its contents:
The content is similar to that of a M35080 EEPROM from an E46.
Twisted (if you’re using an editor other than the EEPROM’s built in) :
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
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.
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.