Reprogram your Subaru odometer

Attention: open in a new window. PDFPrintE-mail

Warning! Modification of a vehicle odometer for fraudulent purposes is against the law! Check your local laws before proceeding. Make sure you have contacted your local law enforcement and government for additional steps, licenses, forms, etc. required to complete this procedure legally.

This how to is aimed at individuals who have replaced there digital gauge clusters and would like to match their odometer to the actual mileage of their vehicle. I will be focusing on the Subaru cluster with the solid PCB in this example.
This modification is a little on the technical side. You should be proficient at soldering and have a general understanding of electronics, programming and hexadecimal math.

I have not perfected the math for coding the odometer chip. While I can get the mileage close, I cannot program the chip exactly to some numbers.

Required Tools:
  • Flat head screwdriver
  • Soldering Iron and solder
  • De-soldering tools: Copper braid or a solder-vacuum
  • Pliers
  • A pen
  • Personal computer with a serial port
  • Microwire serial programmer (schematic included)
  • Serial programming software (Such as PonyProg2000: http://www.lancos.com/prog.htmlhttp://www.lancos.com/prog.html )

Step 1: Extraction.

The first step is to remove the odometer memory chip from the gauge cluster. This is the most difficult part of the entire project. Start with a cluster removed from your car. I won't cover removing the gauge cluster.

Remove the rear plastic cover by lifting the ten tabs around the side, and pressing back on the three 'center' tabs on the back. A slotted screwdriver helps with this.
alt

Once you have removed the rear cover, you now have to free the stepper motors from the PCB. Locate the four motors. I have circled them in the picture. Using the screwdriver and the pliers, pry back the two tabs on each motor. Be careful not to scratch any traces nearby.
alt

Using a ballpoint pen, push gently on each motor, pushing it away from the board. This is to free the motors a little so they come off easily when you remove the PCB.

Remove the circuit board. You may have to push back the three plastic tabs. If the stepper motors are still stuck onto the board, you can try wiggling the board a bit or push the motors away with a pen.

Once the board is free from the rest of the gauge cluster, you can start to remove the odometer memory chip. First locate the chip. I have circled here in the picture.
alt
alt

In most cases it should be a 93C56EN. You must now de-solder the chip. There are eight connections to the PCB. I have marked the points in the picture. I used a solder vacuum, but use whatever you are most comfortable with.

Once you have the extracted chip, you can start with the programmer.
Step2: Programmer.

Shown here is one of the most simplistic Microwire serial programmers one can build.
alt

The following components are used:
  • 3x 5v Zener diodes
  • 3x 4.7k ohm resistors
  • 2x 47uF electrolyte capacitors
  • 2x 100 mF ceramic capacitors
  • 3x high-speed diodes (1N4148)
  • 1x 5 volt regulator, suggested LM2936Z
  • 1x 8-pin DIP socket
  • 1x DB9 male serial jack

My completed programmer looks something like this:
alt

Step 3: Decoding.

Install and launch PonyProg2000.
From the SetUp menu, choose Interface Setup.

You should have the I/O port set as:
  1. Serial
  2. SI Prog I/O
  3. Which ever port you connected you programmer to.
  4. Leave all the check boxes unchecked.
Click OK!

From the chipset dropdown, choose MicroWire 16 eeprom and the 9356 chip.

Insert your odometer chip into the programmer, and connect the programmer to your computer.

From the command menu, click the Read option.
You should now be presented with a memory dump of your odometer chip.
alt
Step 4: Encode Chip

Looking at the memory dump from your odometer chip, the lines we are interested in are 000060 and 000070.

The mileage is encoded in two hexadecimal octets. The two octets have an inverted checksum.
These four octets are duplicated four times per line, for a total of eight copies.

In my case, I have 20 1B DF E4 duplicated eight times.
My actual mileage is contained in 20 1B. The DF E4 is the inverted checksum.

Each digital is a multiplier.
  • The first digit is a 65,536 multiplier.
  • The second digit is a 4,096 multiplier.
  • The third digit is a 256 multiplier.
  • I haven't quite figured out the fourth digit, it appears to loop based on an extra multiplier.

So far I can't figure out how to get even numbers on the odometer. If others would like to post up their mileage, let's see if we can figure out exactly how to encode the values.

I haven't figured out the details, but the following table appears to work well enough:
Code:
0 = 15
1 = 95
2 = 223
3 = 143
4 = 159
5 = 207
6 = 79
7 = 31
8 = 191
9 = 239
A = 111
B = 63
C = 47
D = 127
E = 255
F = 175
In my case, 20 1B can be read as (2 x 65536) + (0 x 4096) + (1 x 256) + 63 which equals 131391!

Let's say I want to change my mileage to 203,151. I would use 31 93.
(3 x 65536) + (1 x 4096) + 91 x 256) + 143 = 203151.

The checksum is found by inverting each digit.
In my case I get 31 93 CE 6C


For ease, the checksums can be found using this table:
Code:
0 - F
1 - E
2 - D
3 - C
4 - B
5 - A
6 - 9
7 - 8
8 - 7
9 - 6
A - 5
B - 4
C - 3
D - 2
E - 1
F - 0