BMW E46 Fanatics Forum banner

1 - 20 of 93 Posts

·
Registered
Joined
·
7,986 Posts
Discussion Starter #1 (Edited)
Note: I know there's a specific DIY section on this forum, but that side doesn't get much traffic, and most programming information seems to be in this section.

Requirements
  • BMW Scanner
  • Cluster made in 09/2001 or newer (edit: not 100% sure about this date cutoff after looking at some NCS Expert files. Might even be as late as 03.5)
    • I'm sure it is possible to do this on early clusters too, but the software is quite different. I can research if a few of you send me a dump of your cluster EEPROM
  • Some common sense

As most of you know, E46 clusters tend to be optimistic. What you may not have known is that the DME and Cluster know the exact speed; the error is deliberate on BMW's part. There have been a few ways to correct this in the past; one way is to just trick the cluster into thinking you have smaller tires, but this can screw up things like MPG and average MPH calculations. Another way was to rescale the cluster curve itself, but this required a decent bit of trial and error and it was just fooling the cluster into thinking the scale was larger.

After studying M and non-M EEPROM files, here's what I found -- there is a function deliberately designed to increase the speed by a certain ratio. In the non-M, the displayed speed is the real speed + 5.7%. In the M3, the error is a massive 8.9% -- completely unacceptable IMO.

So here's what you do.

  1. Start up the PASoft software and load your IKE. Read off the EEPROM.
  2. Now, in the built in hex editor, look for the following hex string (pick the appropriate one for your model). In my cluster, it was located at offset 0x339

    Code:
    E46 M3:     03 00 2D C8 00 31 D6
    Non-M:      03 00 23 C8 00 25 CC
  3. Change it to the following

    Code:
    All models: 03 00 01 C8 00 01 CA
  4. Save the file, and flash the EEPROM back to your cluster.
Done. If you have stock diameter tires, your speedometer should be almost 100% accurate

If you're curious as to how the change works, the bytes I change are used as a ratio. 0x25 = 37; 0x23 = 35. 37/35 = 1.057, or a 5.7% error. I am not sure what the 0xC8 (200) value represents; I think it might be an upper limit to the allowed error (5.7% until the error reaches 20 km/h). That last byte is simply a checksum (XOR all the values together, and then XOR with 1)

If you have a 99-01 cluster, please send me your EEPROM. I can't promise I'll figure out how to do the change there, but I'll try. Also, if there are any Japanese fanatics here, please send me a dump of your cluster. In the E39, the Japanese values for the cluster are 100% accurate; I suspect the same holds true for the E46. It would be interesting to see how BMW configured the cluster.

Also give me feedback; so far in my testing it agrees with GPS, but it's always nice to have others confirm too
 

·
Registered
Joined
·
116 Posts
Thats great, its nice when speedometer reads correctly and there is no need to dig in hidden menu to see correct speed:thumbup:
Can you figure out my 99 328i cluster, this is how EEPROM looks:
 

·
OEM ///PLUS
2003 M3 6MT Slicktop
Joined
·
23,534 Posts
wouldn't mind my M3 down to about 2% optomistic :4ngie:
 

·
Registered
Joined
·
7,986 Posts
Discussion Starter #7 (Edited)
I will try this tomorrow. What are the odds I'll screw something up? Is this safe?

Oh and is gay marriage legal in Pennsylvania? :eeps:
It's pretty safe. As long as the checksums are calculated correctly, it should work fine. PASoft automatically saves two copies of the EEPROM anyway; if the cluster boots displaying "pppppp" then flash the stock file back. Just don't knock over the unit while flashing.

And uhm, no, I don't think so :eeps:

wouldn't mind my M3 down to about 2% optomistic :4ngie:
Try this: 03 00 31 C8 00 32 C8

Thats great, its nice when speedometer reads correctly and there is no need to dig in hidden menu to see correct speed:thumbup:
Can you figure out my 99 328i cluster, this is how EEPROM looks:
Well according to the daten files, there's a 16-bit value "TACHO_SKALA_ENDWERT" at 0xD2. This translates to "Speedometer Scale End Value" On your file it's set to 0x02bf (703). On the early E46 M3s, the same bytes are set to 0x032a (810).

703 / 3 = 234.3; (250 - 234.3) / 250 * 100% = 6.27%.
810 / 3 = 270; (300 - 270) / 300 * 100% = 10%.

Both values are close to (but higher than) the error present on the newer clusters. My guess is BMW simply used the cluster scaling to make the reported speed off; this is similar to the strategy I used to correct my cluster before I figured out this new method.

I think if you set 0xd2 to 02EE and 0xd4 to 0xFD11, you should be good to go. I am not sure if there's any checksums you need to correct beyond that however.

Let me know if that works, and I'll update my first post with the info
 

·
Registered
Joined
·
57 Posts
But officer, my gauge reads faster, so even tho it said i was doing 80 in a school zone, i was still probably totally legal.
 

·
Registered
Joined
·
1,706 Posts
I wish I knew what the hell you all are talking about. All of these acronyms and codes make my head hurt. I need a DIY tutorial to even understand any of this stuff.
 

·
Registered
Joined
·
7,986 Posts
Discussion Starter #13 (Edited)
Thanks for your help.
But I don't see anywhere values 0xd2 and 0xd4, so I don't know where write new values. Where they should be located?
D2 and d4 are locations, or offsets, not values. Notice how in the left column there are values like (0x000, 0x010, 0x020... 0x0A0, 0x0B0, etc.)? Go to the row with 0xD0. The first value next to that offset label wiil be located at 0xd0. Then 0xd1, 0xd2, 0xd3, 0xd4, etc.

So you want to change 02 BF FD 40 to 02 EE FD 11

I wish I knew what the hell you all are talking about. All of these acronyms and codes make my head hurt. I need a DIY tutorial to even understand any of this stuff.
It's not that bad. The only acronyms I used are the ones PASoft uses for those particular items. I told you exactly what to change too.
 

·
Registered
Joined
·
8,053 Posts
I wish I knew what the hell you all are talking about. All of these acronyms and codes make my head hurt. I need a DIY tutorial to even understand any of this stuff.
Do you have PASoft? If you have the software, all of this will sound familiar. Without seeing the software I totally understand how this would be way intangible.
 

·
Registered
Joined
·
3,826 Posts
Great info, thanks.

Now I need to compare the actual speed reading at cluster test 7.3 with the speedo gauge. Then will decide if I need to change the 0xd2-0xd4 values (09/08 cluster).
The thing is I can't complain about my speedometer gauge accuracy: Even at high speeds (80+ mph) it reads less than 2 mph higher than the actual speed measured by GPS. That's on stock size tires.
 

·
Registered
Joined
·
812 Posts
curiosity, why does the E46 cluster show optimistic speeds?? what was bmw's reasoning behind that??
 

·
Registered
Joined
·
7,986 Posts
Discussion Starter #18
curiosity, why does the E46 cluster show optimistic speeds?? what was bmw's reasoning behind that??
Well a lot of countries laws are that the speedometer cannot underread by any amount. So they tend to compensate for things like tire wear, pressure, wrong tire sizes by making the speedometer inaccurate. Japanese companies tend not to do this, and I think it's because Japanese law demands accurate clusters
 

·
Registered
Joined
·
1,112 Posts
Can the PA Soft hex editor enable shift light as well? I've been studying the M3forum comprehensive thread but am in over my head.

Sent from BimmerApp mobile app
 
1 - 20 of 93 Posts
Top