The Old OBD Codes The Reason why there is an OBD 2
PID Description
(hex)
0 PIDs supported [01 - 20]
1 Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.)
2 Freeze DTC
3 Fuel system status
4 Calculated engine load
5 Engine coolant temperature
6 Short term fuel trim—Bank 1
7 Long term fuel trim—Bank 1
8 Short term fuel trim—Bank 2
9 Long term fuel trim—Bank 2
0A Fuel pressure (gauge pressure)
0B Intake manifold absolute pressure
0C Engine RPM
0D Vehicle speed
0E Timing advance
0F Intake air temperature
10 MAF air flow rate
11 Throttle position
12 Commanded secondary air status
13 Oxygen sensors present (in 2 banks)
14 Oxygen Sensor 1
A: Voltage
B: Short term fuel trim
15 Oxygen Sensor 2
A: Voltage
B: Short term fuel trim
16 Oxygen Sensor 3
A: Voltage
B: Short term fuel trim
17 Oxygen Sensor 4
A: Voltage
B: Short term fuel trim
18 Oxygen Sensor 5
A: Voltage
B: Short term fuel trim
19 Oxygen Sensor 6
A: Voltage
B: Short term fuel trim
1A Oxygen Sensor 7
A: Voltage
B: Short term fuel trim
1B Oxygen Sensor 8
A: Voltage
B: Short term fuel trim
1C OBD standards this vehicle conforms to
1D Oxygen sensors present (in 4 banks)
1E Auxiliary input status
1F Run time since engine start
20 PIDs supported [21 - 40]
21 Distance traveled with malfunction indicator lamp (MIL) on
22 Fuel Rail Pressure (relative to manifold vacuum)
23 Fuel Rail Gauge Pressure (diesel, or gasoline direct injection)
24 Oxygen Sensor 1
AB: Fuel–Air Equivalence Ratio
CD: Voltage
25 Oxygen Sensor 2
AB: Fuel–Air Equivalence Ratio
CD: Voltage
26 Oxygen Sensor 3
AB: Fuel–Air Equivalence Ratio
CD: Voltage
27 Oxygen Sensor 4
AB: Fuel–Air Equivalence Ratio
CD: Voltage
28 Oxygen Sensor 5
AB: Fuel–Air Equivalence Ratio
CD: Voltage
29 Oxygen Sensor 6
AB: Fuel–Air Equivalence Ratio
CD: Voltage
2A Oxygen Sensor 7
AB: Fuel–Air Equivalence Ratio
CD: Voltage
2B Oxygen Sensor 8
AB: Fuel–Air Equivalence Ratio
CD: Voltage
2C Commanded EGR
2D EGR Error
2E Commanded evaporative purge
2F Fuel Tank Level Input
30 Warm-ups since codes cleared
31 Distance traveled since codes cleared
32 Evap. System Vapor Pressure
33 Absolute Barometric Pressure
34 Oxygen Sensor 1
AB: Fuel–Air Equivalence Ratio
CD: Current
35 Oxygen Sensor 2
AB: Fuel–Air Equivalence Ratio
CD: Current
36 Oxygen Sensor 3
AB: Fuel–Air Equivalence Ratio
CD: Current
37 Oxygen Sensor 4
AB: Fuel–Air Equivalence Ratio
CD: Current
38 Oxygen Sensor 5
AB: Fuel–Air Equivalence Ratio
CD: Current
39 Oxygen Sensor 6
AB: Fuel–Air Equivalence Ratio
CD: Current
3A Oxygen Sensor 7
AB: Fuel–Air Equivalence Ratio
CD: Current
3B Oxygen Sensor 8
AB: Fuel–Air Equivalence Ratio
CD: Current
3C Catalyst Temperature: Bank 1, Sensor 1
3D Catalyst Temperature: Bank 2, Sensor 1
3E Catalyst Temperature: Bank 1, Sensor 2
3F Catalyst Temperature: Bank 2, Sensor 2
40 PIDs supported [41 - 60]
41 Monitor status this drive cycle
42 Control module voltage
43 Absolute load value
44 Fuel–Air commanded equivalence ratio
45 Relative throttle position
46 Ambient air temperature
47 Absolute throttle position B
48 Absolute throttle position C
49 Accelerator pedal position D
4A Accelerator pedal position E
4B Accelerator pedal position F
4C Commanded throttle actuator
4D Time run with MIL on
4E Time since trouble codes cleared
4F Maximum value for Fuel–Air equivalence ratio, oxygen sensor voltage, oxygen sensor current, and intake manifold absolute pressure
50 Maximum value for air flow rate from mass air flow sensor
51 Fuel Type
52 Ethanol fuel %
53 Absolute Evap system Vapor Pressure
54 Evap system vapor pressure
55 Short term secondary oxygen sensor trim, A: bank 1, B: bank 3
56 Long term secondary oxygen sensor trim, A: bank 1, B: bank 3
57 Short term secondary oxygen sensor trim, A: bank 2, B: bank 4
58 Long term secondary oxygen sensor trim, A: bank 2, B: bank 4
59 Fuel rail absolute pressure
5A Relative accelerator pedal position
5B Hybrid battery pack remaining life
5C Engine oil temperature
5D Fuel injection timing
5E Engine fuel rate
5F Emission requirements to which vehicle is designed
60 PIDs supported [61 - 80]
61 Driver's demand engine - percent torque
62 Actual engine - percent torque
63 Engine reference torque
64 Engine percent torque data
65 Auxiliary input / output supported
66 Mass air flow sensor
67 Engine coolant temperature
68 Intake air temperature sensor
69 Commanded EGR and EGR Error
6A Commanded Diesel intake air flow control and relative intake air flow position
6B Exhaust gas recirculation temperature
6C Commanded throttle actuator control and relative throttle position
6D Fuel pressure control system
6E Injection pressure control system
6F Turbocharger compressor inlet pressure
70 Boost pressure control
71 Variable Geometry turbo (VGT) control
72 Wastegate control
73 Exhaust pressure
74 Turbocharger RPM
75 Turbocharger temperature
76 Turbocharger temperature
77 Charge air cooler temperature (CACT)
78 Exhaust Gas temperature (EGT) Bank 1
79 Exhaust Gas temperature (EGT) Bank 2
7A Diesel particulate filter (DPF)
7B Diesel particulate filter (DPF)
7C Diesel Particulate filter (DPF) temperature
7D NOx NTE (Not-To-Exceed) control area status
7E PM NTE (Not-To-Exceed) control area status
7F Engine run time
80 PIDs supported [81 - A0]
81 Engine run time for Auxiliary Emissions Control Device(AECD)
82 Engine run time for Auxiliary Emissions Control Device(AECD)
83 NOx sensor
84 Manifold surface temperature
85 NOx reagent system
86 Particulate matter (PM) sensor
87 Intake manifold absolute pressure
A0 PIDs supported [A1 - C0]
C0 PIDs supported [C1 - E0]
C3 ?
C4 ?
PID | Description |
(hex) | |
100 | OBD Monitor IDs supported ($01 – $20) |
101 | O2 Sensor Monitor Bank 1 Sensor 1 |
102 | O2 Sensor Monitor Bank 1 Sensor 2 |
103 | O2 Sensor Monitor Bank 1 Sensor 3 |
104 | O2 Sensor Monitor Bank 1 Sensor 4 |
105 | O2 Sensor Monitor Bank 2 Sensor 1 |
106 | O2 Sensor Monitor Bank 2 Sensor 2 |
107 | O2 Sensor Monitor Bank 2 Sensor 3 |
108 | O2 Sensor Monitor Bank 2 Sensor 4 |
109 | O2 Sensor Monitor Bank 3 Sensor 1 |
010A | O2 Sensor Monitor Bank 3 Sensor 2 |
010B | O2 Sensor Monitor Bank 3 Sensor 3 |
010C | O2 Sensor Monitor Bank 3 Sensor 4 |
010D | O2 Sensor Monitor Bank 4 Sensor 1 |
010E | O2 Sensor Monitor Bank 4 Sensor 2 |
010F | O2 Sensor Monitor Bank 4 Sensor 3 |
110 | O2 Sensor Monitor Bank 4 Sensor 4 |
201 | O2 Sensor Monitor Bank 1 Sensor 1 |
202 | O2 Sensor Monitor Bank 1 Sensor 2 |
203 | O2 Sensor Monitor Bank 1 Sensor 3 |
204 | O2 Sensor Monitor Bank 1 Sensor 4 |
205 | O2 Sensor Monitor Bank 2 Sensor 1 |
206 | O2 Sensor Monitor Bank 2 Sensor 2 |
207 | O2 Sensor Monitor Bank 2 Sensor 3 |
208 | O2 Sensor Monitor Bank 2 Sensor 4 |
209 | O2 Sensor Monitor Bank 3 Sensor 1 |
020A | O2 Sensor Monitor Bank 3 Sensor 2 |
020B | O2 Sensor Monitor Bank 3 Sensor 3 |
020C | O2 Sensor Monitor Bank 3 Sensor 4 |
020D | O2 Sensor Monitor Bank 4 Sensor 1 |
020E | O2 Sensor Monitor Bank 4 Sensor 2 |
020F | O2 Sensor Monitor Bank 4 Sensor 3 |
210 | O2 Sensor Monitor Bank 4 Sensor 4 |
mon ECU ID : 32920-27GA | |
10 Start Diagnostic Session | |
11 ECU Reset | |
12 Read Freeze Frame Data | |
13 Read Diagnostic Trouble Codes | |
14 Clear Diagnostic Information | |
17 Read Status Of Diagnostic Trouble Codes | |
18 Read Diagnostic Trouble Codes By Status | |
1A Read Ecu Id | |
20 Stop Diagnostic Session | |
21 Read Data By Local Id | |
22 Read Data By Common Id | |
23 Read Memory By Address | |
25 Stop Repeated Data Transmission | |
26 Set Data Rates | |
27 Security Access | |
2C Dynamically Define Local Id | |
2E Write Data By Common Id | |
2F Input Output Control By Common Id | |
30 Input Output Control By Local Id | |
31 Start Routine By Local ID | |
32 Stop Routine By Local ID | |
33 Request Routine Results By Local Id | |
34 Request Download | |
35 Request Upload | |
36 Transfer data | |
37 Request transfer exit | |
38 Start Routine By Address | |
39 Stop Routine By Address | |
3A Request Routine Results By Address | |
3B Write Data By Local Id | |
3D Write Memory By Address | |
3E Tester Present | |
81 -> xx xx Start Communication | |
82 Stop Communication | |
83 Access Timing Parameters | |
85 Start Programming Mode | |
I bolded the ones we've already seen with the SDS software. | |
I wonder if command 23 could be used to loop through all the addresses and read out the original program without needing to access the AUD port. | |
Sensor : Command, Byte | |
TPS : 08,20 | |
IAP#1 : 08,21 | |
Temp : 08,22 | |
IAT : 08,23 | |
O2S : 08,26 | |
IAP#2 : 08,28 | |
On command 21 Read by Local ID supports the following arguments | |
0x08 (returns 50 bytes) | |
0x80 (returns 100 bytes) | |
0x90 (returns 70 bytes) | |
0xC0 (returns 60 bytes) | |
0x40 (returns 16 bytes) | |
0x41 (returns 16 bytes) | |
0x42 (returns 16 bytes) | |
0x43 (returns 16 bytes) | |
0x44 (returns 16 bytes) | |
0x45 (returns 16 bytes) | |
0x50 (returns 16 bytes) | |
0x51 (returns 16 bytes) | |
0x52 (returns 16 bytes) | |
0x53 (returns 16 bytes) | |
0x54 (returns 16 bytes) | |
0x55 (returns 16 bytes) | |
I found the code where the commands are parsed. It is at 0x00007840. | |
It looks like only the following commands are supported: | |
14 Clear Diagnostic Information | |
18 Read Diagnostic Trouble Codes By Status | |
1A Read Ecu Id | |
21 Read Data By Local Id | |
3E Tester Present | |
82 Stop Communication | |
A5 Test outputs | |
81 establish communications is not in the list but I'm assuming it is a special case. | |
I should be able to find the list of 'Local IDs' pretty quickly. | |
So for example 80 F1 12 03 C1 EA 8F C0 reads as | |
packet from ECU ( 80 F1 12 ) | |
3 bytes in data ( 03 ) | |
data is C1 EA 8F | |
checksum = (80 + F1 + 12 + 03 + C1 + EA + 8f) & 00FF | |
Initialize: | |
From SDS: 81 12 F1 81 05 | |
From ECU: 80 F1 12 03 C1 EA 8F C0 | |
Keep alive: | |
From SDS: 80 12 F1 01 3E C2 | |
From ECU: 80 F1 12 01 7E 02 | |
Quit (disconnects from ECU) | |
From SDS: 80 12 F1 01 82 06 | |
From ECU: 80 F1 12 01 C2 46 | |
80 12 F1 02 21 08 monitor sensor data | |
80 12 F1 03 14 00 00 clear dtc | |
80 12 F1 04 18 00 00 00 dtc monitoring | |
80 12 F1 01 3e keep alive | |
Sensor : argument , Byte | |
TPS : 08,20 | |
IAP#1 : 08,21 | |
Temp : 08,22 | |
IAT : 08,23 | |
O2S : 08,26 | |
IAP#2 : 08,28 | |
Initialization sequence | |
02 1A 9A | |
02 1A 91 | |
then only keepalives | |
01 3E | |
and when data monitoring starts | |
02 21 08 | |
When closing connection | |
01 82 | |
RPM = Value*100/255 | |
Throttle position (°) = Value*125/255 | |
Manifold pressure = (Value*5 - 153)*133/4/255 | |
Temperature (C) = Value*160/255 - 30 | |
Temperature (F) = Value*288/255 - 22 | |
Voltage = Value*20/255 | |
Secondary throttle position (%) = Value*100/255 | |
EXCVA sensor = Value*100/255 | |
Some more commands: | |
Clear Trouble codes: 80 12 F1 03 14 00 00 9A | |
EVAP purge valve: | |
On: 80 12 F1 06 A5 07 80 00 00 00 B5 | |
PAIR solenoid: | |
On: 80 12 F1 06 A5 01 80 00 00 00 AF | |
Off: 80 12 F1 06 A5 01 00 00 00 00 2F | |
for testing purposes also this may be useful: | |
80 12 F1 06 a5 01 80 00 00 00 set pair on | |
80 12 F1 06 a5 01 00 00 00 00 set pair off | |
Secondary throttle: | |
Full open: 80 12 F1 06 A5 03 80 80 00 00 31 | |
Full closed: 80 12 F1 06 A5 03 80 00 00 00 B1 | |
Here's some ECU responses to 2.5v sensor inputs, differences highlighted in purple: | |
No sensor inputs | |
80 F1 12 34 61 08 0C 16 50 E0 17 50 E1 FF FF FF FF 00 00 01 FF 00 | |
00 FF 00 FF 00 FF 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 40 | |
FF 00 FF FF 26 00 00 01 22 FF FF D0 | |
Intake Air Temp Sensor: | |
80 F1 12 34 61 08 0B 16 50 E0 17 50 E1 FF FF FF FF 00 00 01 FF 00 | |
42 FF 00 FF 00 FF 60 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF 11 | |
Intake Air Pressure #1: | |
80 F1 12 34 61 08 0C 16 50 E0 17 50 E1 FF FF FF FF 00 00 01 80 00 | |
00 FF 00 FF 00 FF 60 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF 51 | |
Intake Air Pressure #2 | |
80 F1 12 34 61 08 0C 16 50 E0 17 50 A1 FF FF FF FF 00 00 01 FF 00 | |
00 FF 00 FF 00 80 60 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF 11 | |
Oxygen Sensor | |
80 F1 12 34 61 08 0C 05 05 E0 16 50 E0 FF FF FF FF 00 00 01 FF 00 | |
00 FF 00 80 00 FF 60 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF F3 | |
Throttle position sensor | |
80 F1 12 34 61 08 0C 05 05 E0 16 50 E0 FF FF FF FF 00 00 80 FF 00 | |
00 FF 00 FF 00 FF 60 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF F1 | |
Engine temperature | |
80 F1 12 34 61 08 0C 05 05 E0 01 05 E1 FF FF FF FF 00 00 01 FF 4B | |
00 FF 00 FF 00 FF 71 7C FF 00 00 00 00 00 00 00 00 FF FF 40 40 40 | |
40 FF 00 FF FF 26 00 00 01 22 FF FF 6F | |
I found the code where the commands are parsed. It is at 0x00007840. | |
It looks like only the following commands are supported: | |
0x14 Clear Diagnostic Information | |
0x18 Read Diagnostic Trouble Codes By Status | |
0x1A Read Ecu Id | |
0x21 Read Data By Local Id | |
0x3E Tester Present | |
0x82 Stop Communication | |
0xA5 Test outputs | |
81 establish communications is not in the list but I'm assuming it is a special case. | |
I should be able to find the list of 'Local IDs' pretty quickly. | |
The physical interface is assumed to be a K-line using the KWP2000/ISO-14230 protocol. Right now I am using inverted RS-232 to read the data on that K-line as it's exchanged between the SDS box and ECU. | |
The initiation has not been determined yet. The protocol spec on the swiftcomm site shows the following for initialization, but I've been letting the SDS box take care of this so far. | |
This is what I managed to figure until now (Please note that I might be wrong, more or less!): | |
Pos. Value Data | |
0 80 Header byte | |
1 F1 Tester ID | |
2 12 ECU ID | |
3 34 Message length | |
4 61 Message type (Sensor data) | |
5 08 | |
6 02 | |
7 05 | |
8 05 | |
9 A0 | |
10 17 | |
11 69 | |
12 A2 | |
13 FF | |
14 FF | |
15 FF | |
16 00 Speed = byte 16 * 2 in km/h | |
17 00 RPM byte 1 | |
18 00 RPM byte 2: RPM = 10 * byte 17 +byte 18 / 10 | |
19 37 Throttle position: 0x37 = 0%, 0xDD = 100% | |
20 B8 | |
21 6B Engine Temperature = (byte 21 - 48) / 1.6 in Celsius degrees | |
22 61 Intake Air Temperature, same formula as above | |
23 B9 | |
24 00 | |
25 FF | |
26 00 Gear indicator 0-neutral; 1- 1st gear... a.s.o. | |
27 FF | |
28 5E | |
29 1F | |
30 FF | |
31 00 | |
32 00 | |
33 00 | |
34 00 | |
35 00 | |
36 00 | |
37 00 | |
38 00 | |
39 FF | |
40 FF | |
41 40 | |
42 40 | |
43 40 | |
44 40 | |
45 FF | |
46 1A | |
47 00 | |
48 CB | |
49 1A | |
50 30 | |
51 00 | |
52 04 Clutch sensor (bit 8?): 0x04 = clutch released, 0x14 clutch "pressed" | |
53 00 Neutral sensor (bit 1?): 0x00 = neutral, 0x02 = in gear | |
54 FF | |
55 FF | |
56 07 Checksum | |
mon retour en hexa | |
reference | |
Starting comunication (fastinit) // lignes du code retour des capteurs | |
Throtle Position: 7E //19 | |
Intake Air Pressure_1: FF //20 | |
Engine Coolant Temp: 0 //21 | |
Intake Air Temp: B //22 | |
Gear: 0 //26 | |
Intake Air Pressure_2: FF //27 | |
Second Throtle Valve: 0 //46 | |
i= : 19 Throtle Position: 61 | |
i= : 20 Intake Air Pressure_1: 13 | |
i= : 21 Engine Coolant Temp: -30 | |
i= : 22 Intake Air Temp: -24 | |
i= : 26 Gear: 0 | |
i= : 27 Intake Air Pressure_2: 13 | |
i= : 46 Second Throtle Valve: 0 | |