VPW Communication Protocol

Breakdown of the j1850 3 byte Header format

  • Byte1 = priority


Bits 7,6 and 5 are priority 0=High, 7=Low
Bit 4 is header style (0=3 byte header-GM, 1=1 byte header-??)
Bit 3 is In Frame Response (0=Required-Ford, 1=Not allowed-GM)
Bit 2 is addressing mode (1=Physical, 0=Functional)
Bit 1,0 is message type: (depending on bit 2 and 3 see below)

Bit 3 2 1 0
-----------
Functional

1 0 0 0 Function
1 0 0 1 Broadcast
1 0 1 0 Query
1 0 1 1 Read

Physical

1 1 0 0 Node to Node
1 1 0 1 Reserved
1 1 1 0 Reserved
1 1 1 1 Reserved

 

  • Byte2 = physical ID of destination
  • Byte3 = physical ID of source

    Typical Physical ID's, PCM = $10, Off-board scan tool = $F1


Functional Addresses:

ID           Function
-----       ----------------------------
$6A       Request Legislated Diagnostics (bit 0 (W bit) = 0 Command)
$6B       Report Legislated Dianostics (bit 0 (W bit) = 1 Status)


Physical Node Addresses:

ID                 Module
---------       ----------------------------
$00-$1F Powertrain controllers

$00-$0F Integration/Manufacturer Expansion
$10-$17 Engine controllers
$18-$1F Transmission controllers

$20-$3F Chassis controllers

$20-$27 Integration/Manufacturer Expansion
$28-$2F Brake controllers
$30-$37 Sterring controllers
$38-$3F Suspension controllers

$40-$C7 Body controllers

$40-$57 Integration/Manufacturer Expansion
$48-$5F Restraints
$60-$6F Driver information/Diplays
$70-$7F Lighting
$80-$8F Enterntainment
$90-$97 Personal communications
$98-$9F Climate control (HVAC)
$A0-$BF Convenience (doos, Seats, Windows, etc.)
$C0-$C7 Security

$C8-$CB Electric Vehicle Energy Transfer System (EV-ETS)

$C8 Utility connection services
$C9 AC to AC conversion
$CA AC to DC conversion
$CB Energy storage management

$CC-$CF Future expansion

$D0-$EF Manufacturer specific

$F0-$FD Off-Board Testers/Diagnostic scan tools

$FE All nodes

$FF Null node


PCM Mode Requests:

J1979 (Functional) supports modes $01 thru $0F

  • Mode $01 - Request Current Powertrain Diagnostic Data
  • Mode $02 - Request Powertrain Freeze Frame Data
  • Mode $03 - Request Powertrain Diagnostic Trouble Codes
  • Mode $04 - Request to Clear/Reset Diagnostic Trouble Codes
  • Mode $05 - Request Oxygen Sensor Monitoring Test Results
  • Mode $06 - Request On-Board Monitoring Test Results
  • Mode $07 - Request Pending Powertrain Trouble Codes
  • Mode $08 - Request Control of On-Board System, Test, or Component
  • Mode $09 - Request Vehicle Information

J2190 (Physical) supports modes $10 thru $3F and $80 thru $BF

  • Mode $10 - Initiate Diagnostics Operation
  • Mode $11 - Request Module Reset
  • Mode $12 - Request Diagnostic Freeze Frame Data
  • Mode $13 - Request Diagnostic Trouble Code Information
  • Mode $14 - Clear Diagnostic Information
  • Mode $17 - Request Status of Diagnostic Trouble Codes
  • Mode $19 - Request Diagnostic Trouble Codes by Status
  • Mode $20 - Return to Normal Mode
  • Mode $21 - Request Diagnostic Data
  • Mode $22 - Request Diagnostic Data by PID
  • Mode $23 - Request Diagnostic Data by Memory Address
  • Mode $24 - Request Scaling and Offset / PID
  • Mode $25 - Stop Transmitting Requested Data
  • Mode $26 - Specifiy Data Rates
  • Mode $27 - Security Access Mode
  • Mode $28 - Disable Normal Message Transmission
  • Mode $29 - Enable Normal Message Transmission
  • Mode $2A - Request Diagnostic Data Packets
  • Mode $2B - Dynamically Define Data Packet by Single Data Offsets
  • Mode $2C - Dynamically Define Diagnostic Data Packet
  • Mode $2F - Input/Output Control by PID
  • Mode $30 - Input/Output Control by Data Value ID
  • Mode $31 - Enter/Start Diagnostic Routine by Test Number
  • Mode $32 - Exit/Stop Diagnostic Routine by Test Number
  • Mode $33 - Request Diagnostic Routine Results by Test Number
  • Mode $34 - Request Download - tool to module
  • Mode $35 - Request Upload - module to tool
  • Mode $36 - Block Transfer Message
  • Mode $37 - Request Data Transfer Exit
  • Mode $38 - Enter Diagnostic Routine by Address
  • Mode $39 - Exit Diagnostic Routine by Address
  • Mode $3A - Request Diagnostic Routine Results
  • Mode $3B - Write Data Block
  • Mode $3C - Read Data Block
  • Mode $3F - Test Device Present
  • Mode $7F - General Response Message
  • Mode $A0 - Request High Speed Mode
  • Mode $A1 - Begin High Speed Mode
  • Mode $A2 - Programming Prompt
  • Mode $AE - Request Device Control


PCM Mode Responses:
The response will always be $40 greater than the request mode.

  • Response $41 - Report Powertrain Diagnostic Data
  • Response $42 - Report Powertrain Freeze Frame Data
  • Response $43 - Report Emission Related Diagnositc Powertrain Trouble Codes
  • Response $44 - Emission-Related Diagnostic Information Cleared
  • Response $45 - Report Oxygen Sensor Monitoring Test Resluts
  • Response $46 - Report On-Board Monitoring Test Results for Non-Continuously Monitored Systems
  • Response $47 - Report On-Board Monitoring Test Results for Continuously Monitored Systems
  • Response $48 - Report Control of On-Board System, Test, or Component
  • Response $49 - Report Vehicle Information


PCM Mode $7F Response Codes:

  • Code $00 - Affirmative Response
  • Code $10 - General Reject
  • Code $11 - Mode Not Supported
  • Code $12 - Sub-Function Not Supported or Invalid format
  • Code $21 - Busy - Repeat Request
  • Code $22 - Conditions Not Correct or Request Sequence Error
  • Code $23 - Routine Not Complete
  • Code $31 - Request Out of Range
  • Code $33 - Security Access Denied
  • Code $34 - Security Access Allowed
  • Code $35 - Invalid Key
  • Code $36 - Exceed Number of Attempts
  • Code $37 - Required Time Delay Not Expired
  • Code $40 - Download Not Accepted
  • Code $41 - Improper Download Type
  • Code $42 - Can't Download to Specified Address
  • Code $43 - Can't Download Number of Bytes Requested
  • Code $44 - Ready for Download
  • Code $50 - Upload not Accepted
  • Code $51 - Improper Upload Type
  • Code $52 - Can't Upload from Specified Address
  • Code $53 - Can't Upload Number of Bytes Requested
  • Code $54 - Ready for Upload
  • Code $61 - Normal Exit with Results Available
  • Code $62 - Normal Exit without Results Available
  • Code $63 - Abnormal Exit with Results
  • Code $64 - Abnormal Exit without Results
  • Code $71 - Transfer Suspended
  • Code $72 - Transfer Aborted
  • Code $73 - Block Transfer Complete/Next BLock
  • Code $74 - Illegal Address in Block Transfer
  • Code $75 - Illegal Byte Count in Block Transfer
  • Code $76 - Illegal Block Tranfser Type
  • Code $77 - Block Transfer Data Checksum Error
  • Code $78 - Block Transfer Message Correctly Received
  • Code $79 - Incorrect Byte Count During Block Transfer


PID List:
Provided by Beerman on the forum.

  • $01 - Number of Emission Related DTC
  • $03 - Fuel System Status
  • $04 - Calculated Load
  • $05 - Engine Coolant Temperature
  • $06 - Short Term Fuel Trim Bank 1
  • $07 - Long Term Fuel Trim Bank 1
  • $08 - Short Term Fuel Trim Bank 2
  • $09 - Long Term Fuel Trim Bank 2
  • $0B - Manifold Absolute Pressure
  • $0C - Engine RPM High Resolution (RPM x4)
  • $0D - Speed in KPH
  • $0E - Ignition Timing Advance
  • $0F - Intake Air Temperature
  • $10 - Mass Air Flow
  • $11 - Throttle Position Sensor %
  • $12 - Commanded Secondary Air
  • $13 - Report O2 Sensor Configuration
  • $14 - O2 B1S1
  • $15 - O2 B1S2
  • $18 - O2 B2S1
  • $19 - O2 B2S2
  • $1C - OBD Requirements
  • $0020 - $21 - $50 Bit Map Flash Constant
  • $110F - Rear O2 Current Non-Volatile
  • $1140 - Mass Air Flow Sensor 1
  • $1141 - Ignition Voltage
  • $1143 - Throttle Position Sensor
  • $1144 - Air Conditioner Pressure
  • $1145 - O2 Sensor - Bank 1 Sensor 1 (mv)
  • $1146 - O2 Sensor - Bank 1 Sensor 2 (mv)
  • $1148 - O2 Sensor - Bank 2 Sensor 1 (mv)
  • $1149 - O2 Sensor - Bank 2 Sensor 2 (mv)
  • $1151 - Throttle Position Sensor Normalized in Degrees / Percent
  • $115E - CAM Engine Speed Activity
  • $116F - Start Up Engine Coolant Temperature
  • $1170 - Controlled Canister Perge Solenoid
  • $1171 - EGR Duty Cycle
  • $1172 - IAC
  • $1176 - Current IAC Memory
  • $1179 - IAC Motor Position
  • $1190 - Fuel Trim Cell
  • $1192 - Desired Idle Speed
  • $119D - Barometric Pressure
  • $119E - Air Fuel Ratio
  • $11A1 - Engine Run Time
  • $11A6 - Knock Retard
  • $11BD - EGR Test Count
  • $11C0 - EGR Decel Filter
  • $11D7 - O2 Response Lean to Rich Switches Bank 1 Sensor 1
  • $11D8 - Catalyst Monitor EWMA Sample Counter Bank 1
  • $11E3 - LOW RESOLUTION SIGNAL
  • $11E4 - Cylinder Mode Misfire Index
  • $11E6 - Revolution Mode Misfire Index (Balance Time)
  • $11EA - Misfire Current Cylinder #5
  • $11EB - Misfire Current Cylinder #6
  • $11EC - Misfire Current Cylinder #7
  • $11ED - Misfire Current Cylinder #8
  • $11F3 - Total Misfires per Test Special
  • $11F8 - Misfire History Cylinder #5
  • $11F9 - Misfire History Cylinder #6
  • $11FA - Misfire History Cylinder #7
  • $11FB - Misfire History Cylinder #8
  • $1200 - Total Misfire Current Count
  • $1201 - Misfire History Cylinder #1
  • $1202 - Misfire History Cylinder #2
  • $1203 - Misfire History Cylinder #3
  • $1204 - Misfire History Cylinder #4
  • $1205 - Misfire Current Cylinder #2
  • $1206 - Misfire Current Cylinder #1
  • $1207 - Misfire Current Cylinder #3
  • $1208 - Misfire Current Cylinder #4
  • $120A - Short Term Fuel Trim Bank 1
  • $120B - Long Term Fuel Trim Bank 1
  • $120C - Short Term Fuel Trim Bank 2
  • $1212 - Rich/Lean to Lean/Rich Ratio Sen. 1
  • $1216 - O2 Response Rich to Lean Switches Bank 2 Sensor 1
  • $1217 - O2 Response Lean to Rich Switches Bank 2 Sensor 1
  • $121A - O2 Response Rich to Lean Switches Bank 1 Sensor 1
  • $121C - O2 Average Bias Voltage
  • $1227 - Total Misfire Failures Since First Fail
  • $1228 - Total Misfire Passes Since First Fail
  • $122A - Cycles of Misfire Data
  • $1232 - Warm up cycles without an emission fault
  • $1233 - Warm up cycles without a non-emission fault
  • $1234 - Mileage Since Last Code Clear
  • $1235 - Mileage Since First Fail
  • $1236 - Mileage Since Last Fail
  • $1237 - Fail Counter
  • $1238 - Pass Counter
  • $1239 - No Results Counter
  • $123A - Long Term Fuel Trim Bank 2
  • $123D - REAR O2 FAIL TIME LEFT
  • $1246 - O2 Response Rich to Lean Average Time Bank 2 Sensor 1
  • $1248 - Catalyst Monitor Average Deviation
  • $124A - Catalyst Monitor Filtered Deviation Difference
  • $1258 - Rear O2 Time to Activity
  • $125A - Injector Pulse Width Average Bank 1
  • $125B - Injector Pulse Width Average Bank 2
  • $125D - Knock Retard
  • $125E - Knock Sensor Active Counter
  • $1262 - Long Term Fuel Trim Decal
  • $1263 - Long Term Fuel Trim Idle
  • $1264 - Long Term Fuel Trim Cruise
  • $1265 - Long Term Fuel Trim Accel
  • $1266 - Purge Long Term Fuel Trim #1
  • $1267 - Purge Long Term Fuel Trim #2
  • $1268 - Purge Long Term Fuel Trim #3
  • $1269 - Purge Long Term Fuel Trim #4
  • $1276 - CRANKSHAFT POSITION SENSOR LOW RESOLUTION ANGLE
  • $1278 - Average Air Flow When Rear O2 Went Active
  • $1283 - Air Pump Diag. Percent Lean Time
  • $1284 - Air Pump Diag. Percent Rich Time
  • $1286 - Air Pump Diagnostic Active Time
  • $1601 - A/C Evap Temp
  • $1602 - Engine Oil Temperature
  • $1941 - Transmission Input Shaft Speed
  • $1942 - Transmission Output Shaft Speed
  • $1970 - TCC PWM Duty Cycle
  • $1972 - PC (Pressure Control) Solenoid Duty Cycle
  • $1991 - TCC Slip Speed
  • $1992 - Time of Latest Shift
  • $1993 - Time of Latest 1-2 Shift
  • $1994 - Time of Latest 2-3 Shift
  • $1995 - Time of Latest 3-4 Shift
  • $1996 - Shift Time Error for Latest Shift
  • $1997 - Shift Time Error for 1-2 Shift
  • $1998 - Shift Time Error for 2-3 Shift
  • $1999 - Shift Time Error for 3-4 Shift
  • $199C - Current TAP (Transmission Adaptive Pressure) Cell
  • $199D - Transmission Pressure
  • $199E - Pressure Control Actual Current
  • $199F - Pressure Control Reference Circuit
  • $19A0 - Shift Delay
  • $19AD - Transmission Temp Sensor
  • $19F3 - Transmission Temp
  • $19F4 - Gear Box Ratio
  • $19F5 - Current Gear
  • $1A01 - Z-Body: Steady State Ratio Fail Counter


Examples of VPW Code (Functional Messages)
For the OBDII mandated diagnostics, requsts are actually made to the functional address $6A,
with whatever processor is responsible for this function answering the request.
Theoretically many different processors can respond to a single functional request,
each contributing their insight as to the information requested.

Request current value of PID ($00..$20):

  • Send: $68,$6A,$F1,$01,$PID
  • Recv: $48,$6B,$10,$41,$PID,[up to 5 data bytes]

Request freeze frame value of PID ($00..$20):

  • Send: $68,$6A,$F1,$02,$PID,$FRAME
  • Recv: $48,$6B,$10,$42,$PID,$FRAME,[up to 5 data bytes]
    where FRAME is $01..$06 and is the freeze frame number from which to retrieve the PID's history data.


Examples of VPW Code (Physical Messages)

Request GM VIN:

  • Send: $6C,$10,$F1,$3C,$01
  • Recv: $6C,$F1,$10,$7C,$01,[VIN segment 1 data]
  • Send: $6C,$10,$F1,$3C,$02
  • Recv: $6C,$F1,$10,$7C,$02,[VIN segment 2 data]
  • Send: $6C,$10,$F1,$3C,$03
  • Recv: $6C,$F1,$10,$7C,$03,[VIN segment 3 data]

Request GM PCM#:

  • Send: $6C,$10,$F1,$3C,$04
  • Recv: $6C,$F1,$10,$7C,$04,[PCM #, 4 data bytes]

Request enhanced PID ($0000..$FFFF):

  • Send: $6C,$10,$F1,$22,$PID-hsb,$PID-lsb,$01
  • Recv: $6C,$F1,$10,$62,$PID-hsb,$PID-lsb,[up to 5 data bytes]


Requesting a DTC

The $XX byte in the following command:
$6C,$10,$F1,$19,$XX,$FF,$00
is the status byte. It has the following "bitmapped" values:

  • $80 - MIL is illuminated
  • $40 - Pending trouble code
  • $20 - Old code - MIL was illuminated for this code but is no longer illuminated.
  • $10 - History code with freeze frame data available.
  • $08 - Manufacturer specific status (I do not know what this means).
  • $04 - Manufacturer specific status (I do not know what this means).
  • $02 - Current code.
  • $01 - Immature code.

To get real trouble codes you should request only
$80+$10+$02=$C2

To get real trouble codes AND pending trouble codes request:
$80+$40+$10+$02=$D2


Special thanks to Paul of EFI Live for much of this info. See his site at > http://www.efilive.com/news_20040423.html