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