SAE J1850 VPW
The SAE J1850 VPW is a variable pulse width based OBD-II signal protocol, most notably utilized for General Motors cars and light trucks.
Diagram of the OBD connector pinout for SAE J1850 VPW. Source: onboarddiagnostics.com
Signal Specifications
- 10.4/41.6 Kpbs, single wire
- Pin 2: BUS+ signal
- Idle bus level is low
- High signal voltage: +7V (6.25 to 8.00)
- Low signal voltage: 0V (0.00 to 1.50)
- Decision point is +3.5 V
- Up to 12 message bytes, excluding delimiters
- Bit Timing:
- "1": Signal low 128uS or high 64uS
- "0": Signal low 64uS or high 128uS
- Start-Of-Frame: Signal high 200uS
Handshake
Diagram of the SAE J1850 Message with IFR.
- Idle J1850 bus is weakly pulled to ground
- Start of Frame (SOF) is defined as a “high potential” J1850 bus for a nominal period of 200ms
- Header Field
Diagram of the SAE J1850 Header Byte.
- The P2-P0 bytes are the message priority with 111 being the lowest priority and 000 the highest priority.
- The H-bit is the header type with 0 being the three byte header and 1 being the single byte header. According to http://www.hptuners.com/forum/showthread.php?t=2017 the three byte header will be needed to get request trouble codes.
- The K-bit is the In-Frame Response (IFR) with 0 being IFR required and 1 being IFR not allowed. According to http://www.hptuners.com/forum/showthread.php?t=2017 GM does not use IFR.
- The Y-bit is the addressing mode with 0 being the functional addressing and 1 being the physical addressing. According to http://www.hptuners.com/forum/showthread.php?t=2017, physical addressing is mostly likely used.
- The Z1-Z0 bits are used for specific message types that depend on the K-bit and the Y-bit.
- The data bits use the following figure below to indicate between passive and active logic.
Diagram of the SAE J1850 Bit Symbol Timing.
- Cyclical Redundancy Check (CRC): "One of the most effective error protection schemes in the SAE J1850 Standard is its CRC. The entire message frame, not including the SOF symbol, is treated like “one big word”. This “one big word” is divided by a special “polynomial”. The 1’s complement of the “polynomial” calculation is appended to the end of the associated message as a byte, and transmitted out. All receiving nodes do a similar “polynomial” calculation to received message frames, including the inverted CRC. If no errors have occurred, then the receivers resultant CRC calculation will always equate to a certain value, (C4 hex)".
- End of Data (EOD) consists of 200us long low potential. Directly after the EOD, the IFR can be used. However, since we are not using the IFR in our project, the EOD should be extended to 280us for the End of Frame (EOF) to occur.
Diagram of the End Of Data Symbol versus an End Of Frame Symbol.
Requesting Freeze Frame:
Request freeze frame value of PID ($00..$20) Send: $68,$6A,$F1,$02,$PID Recv: $48,$6B,$10,$42,$PID,[up to 5 data bytes]