Free OBD-II software driver

Paul Blackmore paul at blacky.co.nz
Mon Sep 10 22:53:14 GMT 2001


> Date: Mon, 10 Sep 2001 09:36:22 -0500
> From: Gary Heuston <gary.heuston at afwa.af.mil>
> Subject: Re: Free OBD-II software driver
>
> this is great schtuff Paul!  I'm gonna run out at lunch time and see if I can
> pull the codes from my car!   I am somewhat of a newbie so this stuff is
> probably obvious to everyone else, but what is the detailed view showing
> exactly?


---------------------------------------------------------------------
Here is the sample output

OBD requirements to which vehicle is designed...
OBD-II (Californian ARB)

DTC summary...
Module $10, is reporting 0 DTCs.

---------------------------------------------------------------------
Here is the same sample output (with debug turned on)
My comments prefixed with #

# Program displays the length of the different pulses in microseconds.
Short pulse    (SHORT) symbol:  34us < length <=  96us
Long pulse     (LONG)  symbol:  96us < length <= 163us
Start of Frame (SOF)   symbol: 163us < length <= 239us Active
End of Data    (EOD)   symbol: 163us < length <= 239us Passive

# Program queries the vehicle to determine its OBD compliance level
OBD requirements to which vehicle is designed...

# Before sending any data, wait for the network heartbeat
# Because I have not implement bit arbitration (tsk tsk) I wait for
# this heartbeat so that I can send the request on an idle bus.
Wait for Heartbeat

# Heartbeat frame is found
# Display the received VPW waveform, each pulse length is shown
# in microseconds and its interpretation as (L)ong or (S)hort.
Received wave 0: SOF=220, EOF=99999 (S)=Short pulse (L)=Long pulse.
Byte 0: 122(L), 93(S),129(L),150(L),128(L),156(L), 63(S),157(L)
Byte 1: 128(L), 91(S),128(L), 85(S),129(L), 93(S),127(L), 92(S)
Byte 2:  64(S),150(L), 64(S), 92(S), 64(S),156(L), 63(S),150(L)
Byte 3:  63(S),158(L), 64(S),157(L), 62(S),150(L),129(L), 93(S)
Byte 4: 129(L),149(L),129(L), 92(S), 63(S),155(L),128(L), 92(S)

# The EOF length was 0.1 seconds long which means that no more
# frames are expected as part of the current transmission.
1 reply...

# Display the heartbeat frame
Received frame 0: $E8,$FF,$10,$03,$B3
Heartbeat: $E8,$FF,$10,$03,$B3

# Explanation of frame
# $E8 determines the priority, header format and addressing modes.
# $FF is the destination address, $FF=Network controller.
# $10 is the source module, $10=Engine controller.
# $03 is the Node Alive status
# $B3 is the crc
# Basically this is the Engine controller telling the network
# that it is still alive.

Send  : $E8,$6A,$F1,$01,$1C,$65

# Explanation of frame
# $E8 determines the priority, header format and addressing modes.
# $6A is the destination address, $6A=Mandated diagnostics query.
# $F1 is the source module, $F1=Scan tool.
# $01 is the Mode, $01=Current status ($02=Freeze frame status)
# $1C is the PID (Parameter ID), $1C=query OBD-II compliance
# $65 is the crc

Received wave 0: SOF=217, EOF=99999 (S)=Short pulse (L)=Long pulse.
Byte 0:  57(S), 90(S), 67(S),149(L),134(L),150(L), 65(S),157(L)
Byte 1:  60(S), 95(S),127(L),150(L),131(L),157(L),126(L), 89(S)
Byte 2:  65(S),155(L), 60(S), 88(S), 67(S),150(L), 65(S),157(L)
Byte 3:  65(S), 89(S), 60(S),157(L), 65(S),156(L), 58(S), 90(S)
Byte 4:  67(S),158(L), 59(S), 93(S),126(L), 89(S), 67(S),150(L)
Byte 5:  65(S),157(L), 60(S),157(L), 67(S),149(L), 67(S), 89(S)
Byte 6:  65(S),149(L),134(L),150(L),127(L), 94(S),127(L), 88(S)

1 reply...
Received frame 0: $48,$6B,$10,$41,$1C,$01,$2F
# Explanation of frame
# $48 determines the priority, header format and addressing modes.
# $6B is the destination address, $6B=Mandated diagnostics reply.
# $10 is the source module, $10=Engine controller.
# $41 is always the first response byte to a Mode $01 request.
# $1C is the PID (Parameter ID), $1C=query OBD-II compliance
# $01 is the compliance level ($01=CARB)
# $2F is the crc

OBD-II (Californian ARB)

DTC summary...
Wait for Heartbeat
Received wave 0: SOF=215, EOF=99999 (S)=Short pulse (L)=Long pulse.
Byte 0: 123(L), 93(S),129(L),150(L),128(L),158(L), 64(S),150(L)
Byte 1: 133(L), 90(S),127(L), 89(S),124(L), 90(S),133(L), 89(S)
Byte 2:  59(S),158(L), 64(S), 89(S), 67(S),156(L), 59(S),154(L)
Byte 3:  67(S),156(L), 59(S),154(L), 66(S),157(L),127(L), 87(S)
Byte 4: 126(L),157(L),127(L), 89(S), 65(S),156(L),127(L), 88(S)

1 reply...
Received frame 0: $E8,$FF,$10,$03,$B3
Heartbeat: $E8,$FF,$10,$03,$B3
Send  : $E8,$6A,$F1,$01,$01,$29

# Explanation of frame
# $E8 determines the priority, header format and addressing modes.
# $6A is the destination address, $6A=Mandated diagnostics query.
# $F1 is the source module, $F1=Scan tool.
# $01 is the Mode, $01=Current status ($02=Freeze frame status)
# $01 is the PID (Parameter ID), $01=query DTCs
# $29 is the crc

Received wave 0: SOF=222, EOF=99999 (S)=Short pulse (L)=Long pulse.
Byte 0:  52(S), 90(S), 66(S),150(L),134(L),154(L), 58(S),157(L)
Byte 1:  67(S), 87(S),127(L),157(L),126(L),157(L),124(L), 90(S)
Byte 2:  67(S),149(L), 67(S), 90(S), 67(S),152(L), 67(S),150(L)
Byte 3:  67(S), 87(S), 67(S),157(L), 58(S),158(L), 59(S), 94(S)
Byte 4:  66(S),149(L), 67(S),154(L), 67(S),156(L), 59(S), 93(S)
Byte 5:  58(S),159(L), 66(S),150(L), 67(S),150(L), 65(S),156(L)
Byte 6:  67(S),149(L), 67(S),154(L), 67(S), 88(S),128(L), 89(S)
Byte 7:  65(S), 88(S),127(L),156(L), 59(S),162(L), 58(S),156(L)
Byte 8:  67(S),150(L), 65(S),156(L), 58(S),160(L), 60(S),157(L)
Byte 9: 126(L),157(L), 59(S),158(L),124(L),157(L), 58(S), 97(S)

1 reply...
Received frame 0: $48,$6B,$10,$41,$01,$00,$07,$60,$00,$89

# Explanation of frame
# $48 determines the priority, header format and addressing modes.
# $6B is the destination address, $6B=Mandated diagnostics reply.
# $10 is the source module, $10=Engine controller.
# $41 is always the first response byte to a Mode $01 request.
# $01 is the PID (Parameter ID), $01=query DTCs
# $00 is the number of DTC (bits 0-6) for this module ($10).
#     the MSB (bit 8) indicates if the MIL is lit.
# $07 is the system readiness test status (not used here)
# $60 is the system readiness test status (not used here)
# $00 is the system readiness test status (not used here)
# $89 is the crc

Module $10, is reporting 0 DTCs.

# If one or more modules were reporting one or more DTC's then the
# program would issue another query to obtain the actual DTCs.

Paul Blackmore


----------------------------------------------------------------------------
To unsubscribe from gmecm, send "unsubscribe gmecm" (without the quotes)
in the body of a message (not the subject) to majordomo at lists.diy-efi.org




More information about the Gmecm mailing list