Cars / e32 / Electronics / Odometer Stuck at 299,960km

Odometer Stuck at 299,960km

Article by: Johan

Models: All E32 models manufactured before 02/89. This also applies to E34 models with a “high” version of the cluster.

If your E34 has a check control display it’s the “high” version.

Problem: The odometer stops at 299,960 km or 300,000 miles.


There are a couple of ways of identifying the affected clusters:

– Push the odometer reset button on the cluster while turning the key from I to II. On the affected clusters it will show a number.

– On the newer clusters it won’t show anything, but if you press the other button while turning the key you will see a self test.

– This test will start with some information on your check control display. More on this test later.



– The speedometer shows a number behind the K. The newer unaffected clusters just have EG on them.

My guess is that the EG stands for “electronisch geregelt” which is German for electronically controlled.

The newer clusters also show a K index in their test mode.



Background: The specific vehicle information is stored inside the code plug.

The information inside the plug is:

  • Fuel tank capacity
  • Automatic or manual gearbox
  • Electronic automatic gearbox with S/E/M switch or standard automatic gearbox (I’ve only seen these on the 730i 6 cylinder)
  • Fuel consumption calculation data
  • Temperature indicator offset
  • Mileage of the car.

There are three versions of the instrument cluster all with their own code plug. You can’t interchange the code plug in between the different versions, but you can swap the entire cluster.

Do be advised when you take the old cluster you need the code plug that’s mounted inside the brown plug.

Coding Plug Matrix:

Application DateBack Plate ColorCode Plug TypeSizeExtra Information
start ->02/89Grey
HML 0752048 bytesNo self test or diagnosis via Modic. Stops at 299960. code plug is non-standard
02/89 -> 09/90WhitePIC 93C461024 bytesSelf test + diagnosis via Modic. Code plug is standard EPROM
09/90 -> endBluePIC 93C562048 bytesSelf test + diagnosis via Modic. Code plug is standard EPROM

Of the failing odometer in euro cars I’ve heard about 99% stop at 299 960 km. US cars do seem to make it to 300 000 miles before freezing up.

There is no clear reason for me why the counter stops. The chip’s internal representation is 40km higher making it 300 000 which still doesn’t give any clue as to why it stops.

As mentioned before the newer clusters have a self test. On the one I have with a blue cover you can start the self test by pressing the right button while turning the ignition on.

Invoking this test will show you the following:

The BMW number:

Probably the number starting from the 1st ever BMW manufactured.


The code plug number:


The K-Zahl. This has something to do with the speedometer correction as it’s completely electrical on the new clusters.

It’s actually the same number as printed on my older cluster. Both came from 735i’s.


The F.G.Nr. These are the last seven digits of your VIN.


The SW version inside the cluster.


The ‘AND Index’. This is the “anderungs-Index” or change index. Thanks for the information Wolfgang!


Solutions: Of course we all hate having parts in our cars that do not work. And a failing odometer is really irritating as you have no idea what the mileage is of the car.

Personally I don’t think it makes a difference for the value of the car as 300K is more then most people care to see when they buy a used car.

The state is much more important if you ask me. So don’t leave a car standing because the mileage is unknown (do try to haggle the price down 🙂 ).

There are a couple of options you can explore to get the odometer to start counting again:

Options for people who think electronics are complicated:

– Get used to it. Write down the mileage of the trip counter on the fuel receipts and add these up every month so you can at least account for the mileage when selling the car. This is a very cheap option.

– Get a used code plug out of a car with the same configuration that has some life left in it i.e. it’s still under 300k. A used code plug should be 5 to 20 Euro/US$. Have a look around the scrap yards.

Do check that it comes from the same type of vehicle. Getting the plug from a car with a manual box will disable the automatic gearbox program, getting a plug from a v12 into a R6 will mess up the fuel consumption,…etc.

Don’t try looking for the exact same code plug number as these numbers are unique.

– Get a new code plug from the dealer. This will start the counter back at zero. You will need the VIN number of your car and the code plug number.

The number can be obtained by turning the key from I to II while holding the odometer reset. The number is also printed on the code plug itself.

This will set you back about 110 Euro/US$. This should not active the red LED that indicated the odometer has been tampered with.

A picture showing the code plug number from my car:

codeplug  code_plug_id_10101

– Have the plug reset to zero. You’ve probably seen ads in the paper that got your petrol enriched blood boiling: “Mileage adjustments for all cars”.

Well time to call them. As the affected code plug is a micro controller instead of a standard serial EPROM you can’t write to the data area directly.

So most of these guys who claim to have the equipment can’t do this. So they have to send it out to someone else. If that’s the case don’t bother as this will make it expensive.

Before I had a full understanding of this problem I had my plug reset for 70 Euro/US$. Which was way over the agreed price of 45 Euro/US$.

– Get a newer type cluster with code plug and all. Install this into your car and then you can choose to have it reprogrammed to 300K. This is the nicest way to solve the problem.

And again see that the code plug comes from the same car configuration as your own. You can find a used cluster for 16 Euro (fleabay) to 100 Euro (breakers).

For the electronically enlightened:

– Reset the plug yourself: I haven’t checked it yet, but I was told by someone you can clock in a speed signal of 100 kHz. This equals a very high speed (about 60 000 km/h).

The plug should then store the mileage in it’s RAM. As it can’t write settings over 300K in into the ROM area 300K you will have to wait until it’s been around 1 000 000 km. It should then write 000 000 back into the odometer.

This costs about 0 Euro. Highly recommended. If you have tried this and it works I LOVE to hear from you!!!

– Build your own code plug based on an Atmel 90S2313 micro-controller. There is some very interesting information about the code plug on a Russian site called Diakom.

As I can’t read Russian I never saw this site until I found an automatic translation of the site on a French E32 site from J. Weiss.

Even though my plug was already on it’s way to be reset I had to try this as I love electronics 🙂 The translation of the website is mirrored locally here.

Of course nothing ever seems to work as people tell you so I’ve ran into a couple of problems:

– The schematic on the Diakom page speaks of pin numbers over 20 while the plug only has 18 pins.

This was easily solved when I found out the referred pins numbers are the pins of the HML075 IC.

Anyway the code plug has pins 4-12 on the lower row and the higher row has 16-4.


– Nothing showed up at all. Leaving out resistor “R102” on the schematic solved this.

– Nothing but garbage showed up on my display…Mea culpa: I forgot to program the EPROM area of the Atmel with an odometer setting. The fun part was that it did count in a strange way:

garbage-1  garbage-2

The odometer started counting very strangely. In 37 km the odometer had covered 100 km. And that was the only change in the odometer. So it’s save to say there is an error in the assembler code.

I’ve fixed this (at least I think I did). My code is over here . . . and yes I’ve thought of getting the odometer to count backwards 🙂

strange_1  strange_2

After fitting the plug to the car the service interval information kept resetting itself and every now and then a “kuhlwasser temp” or coolant temperature error came up on the display while there was nothing wrong.

The solution to this problem came from Fred a member of the Change pin 7 and 9 (PD3/INT1 and PD5/T1) on the Atmel.

Now the cluster still behaves strange. It still doesn’t show the transmission program (Sport/Economy/manual) and the fuel consumption is twice the actual value (that or the Atmel runs on petrol 🙂 )

So I still need to copy the information from the original code plug. When I get the time and urge to play with it again I’ll write a piece of code that allows an Atmel to read the code from the original plug.

If you want to have a go at it the timing is explained on the Diakom webpage.

Some results from the Atmel building and tinkering:

result_1  result_2  result_3  result_4

Some pictures of the Atmel code plug and it’s placement in my cluster:

atmel_circuitboard_s atmel_in_cluster

My test setup on my desk with the extra instrument cluster from the 735iL parts car (also stuck at 299 960 km).

In the picture you can see: a power supply, an instrument cluster, two code plugs, a small circuit that give a speed pulse from 140 km/h to 250 km/h and the Atmel code plug connected to my pc + power supply for programming.


I used an assembler from Atmel’s homepage and a little program called “Sp13” to download the code into the Atmel under DOS or Linux.

Thanks to everybody who supplied me with extra information!

Leave a Comment

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