Field note
Toyota odometer over OBD: DID 0103 and where it answers
A 2018 Camry answered 22 0103 with 02 00 E2 36 and the dash read 57,910 miles. What each byte means, and which older Toyotas refuse the request.
2018 Toyota Camry · 2017 Toyota Prius · 2017 Toyota Camry Hybrid · 2021 Toyota Prius · 2015 Toyota Corolla · 2015 Toyota Prius · 2013 Toyota Highlander · 2012 Lexus ES 350
Odometer mileage is not part of the classic OBD-II data set, so a scan tool that shows it on a Toyota is asking a specific module a manufacturer-specific question. Which question works depends on the car's generation. This note covers what eight Toyota and Lexus vehicles actually answered in a working bay, including the ones that said no.
The request that matched the dash
On a 2018 Toyota Camry (TNGA platform, US market), the scan sent a UDS ReadDataByIdentifier request for DID 0103 to the modules at addresses 700 and 701. Both answered the same way. The reply from 708:
TX 700 22 01 03
RX 708 07 62 01 03 02 00 E2 36
| Bytes | Meaning |
|---|---|
07 | ISO-TP single frame, 7 bytes follow |
62 | Positive response to service 22 |
01 03 | The DID, echoed back |
02 | Format byte, not part of the number |
00 E2 36 | The counter |
0x00E236 is 57,910. The dash read 57,910 miles. That is a match to the mile, so on this car the counter is the three bytes after the format byte, in miles.
Two wrong ways to read the same bytes
Both of these were tried before the dash settled it:
- All four bytes:
0x0200E236is 33,612,342. Read as kilometers, that is 33.6 million km. Any sane plausibility check throws it out, and if the tool drops it quietly, the scan shows no mileage while the car is answering the request perfectly well. - The first three bytes:
0x0200E2is 131,298, which matches nothing on the dash in either unit.
That is what happened on the Camry: the 33.6 million km read was thrown away without a log line, and the record showed no mileage while both modules were answering. The rule that came out of it: when a decode fails a plausibility check, log the raw bytes instead of discarding them. A rejected value with its payload attached is evidence. A blank field is not.
Miles or kilometers?
The evidence car is a US-market Camry and the counter matched miles. We have not captured a kilometer-market TNGA car against its dash, so we cannot say whether the unit follows the market. Until one is checked, treat the unit as unconfirmed outside the US.
A 2017 Prius (XW50, the first TNGA car) also answered DID 0103, at address 700, and Lane Pilot read 28,914 miles from it. Nobody checked that dash, so it counts as a reading, not a verification.
Other Toyotas: different request, different answer
The scan asks for the standard odometer PID A6 first and only tries a manufacturer request when that fails. Older, pre-TNGA generations answered different requests, or none, and on the 2015 Corolla the TNGA addresses did not answer at all. What each car answered:
| Vehicle | Request | Sent to | Answer |
|---|---|---|---|
| 2017 Camry Hybrid | 21 28 | Engine computer (7E0) | Counter read as 182,046 km (dash not recorded) |
| 2021 Prius | Mode 01 PID A6 | Broadcast | 167,983.3 km from the standard odometer PID, so no manufacturer request was sent (dash not recorded) |
| 2013 Highlander | 21 28 | Engine computer (7E0) | Negative response 12: not supported |
| 2013 Highlander | 22 01 03 | Combination meter (7C0) | Negative response 11: service not supported |
| 2015 Corolla | 21 28 | Engine computer (7E0) | Negative response 12 |
| 2015 Corolla | 22 01 03 | 700, 701, 7D2, 747 | No data from any of them |
| 2015 Corolla | 21 A7 | Combination meter (7C0) | 61 A7 C0: one data byte |
| 2015 Prius | 21 28 | Engine computer (7E0) | Negative response 12 |
| 2015 Prius | 21 A7 | Combination meter (7C0) | 61 A7 C0: one data byte |
| 2012 Lexus ES 350 | 21 28 | Engine computer (7E0) | Negative response 12 |
Two things stand out:
- **
21 A7at the meter answers, but it is not the odometer.** Two different 2015 cars returned the same single byte,C0. One byte cannot hold a mileage. A tool that decodes it anyway is making a number up. - **The 2013 Highlander's meter is there and simply does not do service
22.** A sweep of the bus found a live module at7C0answering from7C8. It refused the request outright, and none of the requests the scan tried read the mileage on that truck. It had to come off the dash.
What to take from this
- On a 2018 Camry,
22 01 03to700returns a format byte02and a three-byte mile counter, verified against the dash. - Do not fold the format byte into the number. Both wrong framings above look reasonable until you compare them to the cluster.
- A negative response is an answer.
11means the module does not offer the service at all;12means it does not support that particular request. Neither one means "try another guess". - When a tool cannot read the mileage, it should say so. Lane Pilot leaves the field empty on these cars rather than filling it with a number the bytes do not support.
If you have a kilometer-market TNGA car on a lift and can photograph its dash next to a 22 01 03 reply, that is the capture that would settle the unit question.