This is exactly the reference I needed, and the diff is very revealing. Let me show you what actually moved between the two dumps.
Comparing 1,000,366 km vs 1,000,370 km, the
only bytes that changed are in the tail, in that repeating 4-byte block starting at 0x774:
Code:
1000366 dump @ 0x774: e8 7a ef ab e8 7a ef 2c e8 7a ef ad e8 7a ef ae e8 7a ef 2a
1000370 dump @ 0x774: e8 7a ef 32 e8 7a ef 32 e8 7a ef ad e8 7a ef ae e8 7a ef 32
So we have five records, each
e8 7a ef XX. The
e8 7a ef prefix is constant, and only the last byte is a per-record checksum/tag. The header counter fields at 0x28–0x58 that we were both eyeing
did not change at all between the two reads. That confirms what I warned about earlier: the live km on this 24C16 is not held as a plain integer in the header — the moving part is this checksummed record block at the tail, and it's a rolling/redundant structure.
Here's the honest limit, and it matters: a 4 km delta is too small to decode the encoding. Three of the five records didn't even update, and the ones that did only changed the trailing byte, not a value field. That tells me the actual mileage magnitude lives partly in the MCU internal EEPROM and this 24C16 block is a mirror/rolling log with per-record integrity bytes — not a clean odometer register I can solve from two near-identical samples. I can see
which region moves, but I can't derive the km-to-bytes formula or the checksum algorithm from a 4 km step, and guessing the record values + trailing checksums for a jump all the way down to 309,400 would almost certainly desync it.
Two ways forward that will actually work:
- Big delta diff. If you can, roll it a large, exact amount (e.g. +1000 km) and give me that dump plus the two you already posted. A large known step will expose the value field and the checksum relationship. A 4 km step won't.
- Use a tool that already knows BS7T. Honestly, for this cluster the clean route is a dash tool with the Visteon BS7T-14C026 algorithm built in (correct UPA Ford script, or a dedicated Ford IPC tool). It handles the internal MCU value + this mirror + checksums together. Editing only the 24C16 by hand is the path that leaves it desynced.
One more thing worth confirming: does your XTOOL D8S have an odometer-adjust / correction function for this Mondeo under its Ford IPC menu? If it read the live 1,000,370 correctly, it may also be able to write the target directly — which would be far safer than any hand edit.
If you want to keep going the manual route, post a dump after a large known change and I'll re-diff it.