(OBD MODE 3)

Mode 3 (Request Trouble Codes)

Before you send a mode 4 request, you can send a mode 1, pid 1 request and the vehicle will tell you how many codes it has stored, and other information, such as whether or not the MIL indicator or "check engine" lamp is on.

Mode 3 actually does not have any PIDs. All that is sent is the three header bytes, the mode byte (which is 3), and of course, the crc or checksum byte.

The vehicle responds with header bytes, a mode byte (which is 43), Six data bytes, and finally the crc or checksum byte for the message.

The six data bytes following the mode byte define up to 3 trouble codes. Each trouble code is represented with two bytes. If there are less than 3 trouble codes, you will still get all six bytes, but some of them will be a pair of zeros, which means no trouble code in that position. This is done to keep the message length constant. If the vehicle has not stored any trouble codes, it probably won't even respond to the mode 3 request. If it has more than three codes stored, it will send multiple message frames, and each of them can hold up to 3 codes.

Below are definitions so you can interpret these data bytes. We'll only refer to Data A and Data B, which are the first two bytes in the total of six bytes representing trouble codes, but keep in mind that the same definitions apply to Data C and Data D, and also to Data E and Data F. Therefore you should always check all six bytes to be sure you examine all trouble codes that are in the message frame.

A trouble code consists of a letter followed by 4 digits. The letter is represented by bit 7 (most significant) and bit 6 of the first byte. The first digit is represented by the next two bits (bit 5 and bit 4). Since only 2 bits are devoted to this first digit, it can only assume values from 0 to 3. The second digit is represented by bits 3,2,1, and 0 (the least significant bit). Similarly, the third digit is represented by upper 4 bits of the second byte, and finally the fourth digit is represented by the lower 4 bits of this byte. All the latter numbers are in binary coded decimal (BCD), which is the same as hexadecimal except it only represents digits 0-9. Hopefully, the following diagramatic representation will make this clear.

Assume that we have two bytes, Data A and Data B, and that the bits of these in order of significance is represented as A7, A6,......AO, and B7,B6,....B0.

The first character is a letter defined by:
A7 A6 Definition
0 0 P
0 1 C
1 0 B
1 1 U

The second character is a numeral defined by:
A5 A4 Definition
0 0 0
0 1 1
1 0 2
1 1 3

The third ,fourth and fifth characters are numerals defined by:
A3
B7
B3
A2
B6
B2
A1
B5
B1
A0
B4
B0
3rd Character
4th character
5th character
Definition
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9

Lets do an example to use the above tables. Assume we get the following data bytes from a vehicle:
Data A = 14 hex = 00010100 binary
Data B = 95 hex = 10010101 binary
Data C through Data F are 00 hex

Isolating the bits and using the tables above, we get:
A7 A6 = 00 which represents the letter P
A5 A4 = 01 which represents the numeral 1
A3 A2 A1 A0 = 0100 which represents the numeral 4
B7 B6 B5 B4 = 1001 which represents the numeral 9
B3 B2 B1 B0 = 0101 which represents the numeral 5

So, the trouble code in this example happens to be a P1495, which is a TCSPL solenoid circuit malfunction. We also note that only one trouble code was sent, since all the other data bytes were zero. We don't have a listing of all the trouble codes, but eventually, we may write a program to look up codes on your computer. In the meantime, BAT Auto has a very complete page of trouble codes, and there are other pages on the net with these codes listed. So once you obtain a trouble code, like the P1495 in the example above, just go to one of these pages and look it up.

Back to OBDII Programmer's Index
Back to OBDII Automotive Diagnostics Home page