Volvo 850 S70 keyword D3 B0 protocol interpreter

This page contains a form in which you can paste (or type) text from ELM327 communication with a 1996-1998 Volvo 850 / S70 / V70 / C70 / XC70 into the Paste Volvo 850/SVC70 communication here box. You then select the Interpret button and the successfully interpreted results are returned in the Gleanings box (on a separate Results page).

The input text can involve the Volvo 850 / S70 / V70 / C70 / XC70 keyword D3 B0 protocol (KWPD3B0), the OBDII emissions diagnostics, and any comments which you've inserted.

The text can come from most anywhere -- a Hyperterminal session, a Realterm session, a volvo850diag log file, a web page, your typed input, etc -- anything that contains the Volvo 850 / SVC70 responses recorded by an ELM327 compatible device, such as those based on:

  • the real Elm Electronics ELM327 chip,
  • an ELM327 clone, or
  • an STN1100/STN2000 family chip, as is used by ScanTool.net's OBDLink SX USB, OBDLink LX Bluetooth, OBDLink MX Bluetooth, and (as of late 2018) OBDLink MX+ Bluetooth,

but the ELM327 responses need to be displayed left-aligned on the line, just like the ELM327 device displays to a terminal emulator.

The interpreter is in the process of being generalized for use with the 1997-1998 Volvo S70 / V70 / C70 / XC70 cars. ELM327 compatible communication with a '97-'98 S70 / V70 / C70 / XC70 can be interpreted as far as reading/clearing of KWPD3B0 conversant ECUs' DTCs, reading of the KWPD3B0 ECUs' Hardware/Software version and revision #s, reading of the COMBI's Vehicle Mileage, Service Reminder Indicator limits / counters, some live data, among other things.

The '96-'97 850 and/or '97-'98 S/V/C70 KWPD3B0 ECUs which have been interpreted for Read DTCs (AE01), Clear DTCs (AF01), and/or Read Hardware/Software Version and Revision #s (B9F0) are:

  • ECU 01 (ABS),
  • ECU 11 (MSA15.7),
  • ECU 29 (ECC)   [SVC70 only; only 5 raw hex -> 3-digit DTC code associations are known],
  • ECU 2D (VGLA) [SVC70 only; only 2 raw hex -> 3-digit DTC code associations are known],
  • ECU 2E (Power Seat Left, aka PSL),
  • ECU 2F (Power Seat Right, aka PSR),
  • ECU 41 (Immobilizer),
  • ECU 51 (COMBI),
  • ECU 58 (SRS),
  • ECU 6E (AW50-42) [(as of 2020-07-25) all ECU 6E raw hex -> 3-digit DTC code associations are based primarily on the corrected AW50-42 DTC associations in "850 OBD-II" app V1.2.0],
  • ECU 7A (Motronic 4.4, aka M44),

as well as these rarely encountered ECUs:

  • ECU 18 (912-D Diesel Heater) [MSA15.7 only;
    none of its raw hex -> 3-digit DTC code associations are known],
  • ECU 42 (Convertible Top, aka CCU) [C70 only;
    none of its raw hex -> 3-digit DTC code associations are known],
  • ECU 59 (Volvo Roll Over Protection, aka ROP) [C70 only;
    none of its raw hex -> 3-digit DTC code associations are known],
  • ECU 62 (Road Traffic Info, aka RTI) [S70/V70/C70/XC70 only;
    none of its raw hex -> 3-digit DTC code associations are known].
Capabilities:
As of 2022-09-05, the following items are interpreted and reported as "Gleanings":
  • Vehicle Mileage.
    [The Vehicle Mileage began being interpreted on 2016-01-31 such that now it's raw data is always assumed to represent a multiple of 10 miles (16.09344 km), for all cars worldwide. Thanks to XantheFIN, mikeri, several other 850/S70/V70 owners in metric countries, along with the OTP Volvo 850 Repair DVD, for helping to clarify the mileage units!]
  • Reset SRI (aka, Reset Service Light, or Service Light Reset).
  • Service Reminder Indicator (SRI) intervals (both limits & counters)
    [also known on the ELM327 Reads Volvo 850 and SVC70 Mileage page as "Service Reminder Interval limits" and "counters since last Service Light Reset", but known also on this site as "SERVICE Light Reminder limits/counters", "SERVICE Light Reset limits/counters", "SLR limits", "SLR counters", etc].
    [The SRI Mileage interval limit interpretation went through a major interpretation change on 2016-01-31 such that now it's raw data is always assumed to represent a multiple of 500 km (instead of 1000 km). Thanks to XantheFIN for helping to clearly illuminate that major error!]
  • Vehicle Mileage since last Service Light Reset
    (calculated when it makes sense -- ie, when "last interpreted B903 derived mileage that did not involve a probable data error" minus "B904 derived mileage that does not involve a probable data error" is >= 0).
  • DTCs for any KWPD3B0 conversant ECU -- always as raw 2-digit hex,
    also usually as Volvo's 3-digit DTCs with accompanying explanation,
    and even occasionally with associated Pxxxx codes.
    • Many 3-digit DTC interpretations added 2014-12 thru 2015-02.
    • On 2018-04-16, added ABS DTC interpretation from response to ECU 01 AE03 -- ie, the response which lists all ABS DTCs in one single message, even when there are > 12 ABS DTCs.
    • On 2020-06-13 thru 2020-07-25, corrected many ECU 6E (AW50-42) 2-digit raw to 3-digit DTC interpretations (to more closely match "850 OBD-II" Android app).
    • But still lacking most '98 ECC and VGLA 3-digit DTC codes/explanations, and still lacking all 3-digit DTC codes/explanations for 912-D Diesel Heater, ROP, RTI, CCU, and not-yet-seen ECUs.
  • Clear DTCs responses for any KWPD3B0 conversant ECU
    (both positive and negative acks).
  • Hardware/Software version and revision #s for any KWPD3B0 conversant ECU.
  • Engine RPM -- from ECU 51 (COMBI), and possibly from OBDII, ECU 7A, ECU 6E.
  • Vehicle Speed -- from ECU 51 (COMBI), and possibly from OBDII and/or ECU 7A.
  • Coolant Temp -- from ECU 51 (COMBI), and possibly from OBDII and/or ECU 7A (M44).
  • Fuel Level.
  • Fuel Level Adjustment -- can adjust when the Low Fuel light illuminates on '97-'98 S70/V70/C70/XC70.
  • Fuel Consumption (instantaneous) -- from '97-'98 S70/V70/C70/XC70 ECU 51 (COMBI) [but its in pulses/sec format, instead of mpg or L/100 km].
  • Ambient Temp -- from S70/V70/XC70 ECU 51, and/or possibly from ECU 7A (M44).
  • ECU 51 (COMBI) freeze frames -- both '96-97 850 and '97-'98 S/V/C70 formats.
    [As of 2021-12-03, data slot 0 (ie, DTC State) will no longer be interpreted for COMBI freeze frames.]
  • Reprogramming of SERVICE Light Reminder (SLR) limits.
  • SERVICE light (when engine is running) [assumes light is working].
  • Low Fuel light (when engine is running) [assumes light is working].
  • Miscellaneous COMBI parameters [a few of which are sheer guesses at present].
  • List of supported emission diagnostic PIDs for engine and transmission ECUs
    (if obtained via 0100, 0120, 0140, or 0160).
  • Emission diagnostic Check Engine Light (CEL) / Malfunction Indicator Lamp (MIL) status, # of emission diagnostic DTCs, and Readiness monitors status.
  • Emission diagnostic DTCs and Pending DTCs, both reading and clearing.  Only the code is listed, eg, P0172, P0133, etc.  The English explanation is not included.
  • Short Term Fuel Trim -- from OBDII or ECU 7A.
  • Long Term Fuel Trim -- from OBDII or ECU 7A.
  • Ignition Timing Advance -- from OBDII or ECU 7A.
  • Mass Air Flow (MAF) -- from OBDII or ECU 7A.
  • Fuel System Status (closed loop vs. open loop).
  • Calculated LOAD Value.
  • Throttle Position (% of full throttle) -- from OBDII, ECU 7A, and ECU 6E.
  • Location of Oxygen Sensors.
  • O2 Bank 1 Sensors 1 & 2 Output Voltage.
  • O2 Bank 1 Sensors 1 & 2 Short Term Fuel Trim.
  • Commanded Secondary Air Status [on some cars].
  • Intake Air Temp [on M44] -- from OBDII or ECU 7A.
  • OBD Requirements vehicle is designed for [on M44].
  • Power Take Off (PTO) Status [on M44].
  • Emission diagnostic freeze frame data (for PIDs 00, 02-07, 0C-0D).
  • All of the OBDII emission diagnostics values allowed either with or without headers and checksum.
  • ECU 7A (M44) live data: Engine RPM, Coolant Temp, Vehicle Speed, Ignition Timing Advance, Intake Air Temp (ie, "Ambient Temp to M44, instantaneous"), Ambient Temp (ie, "Ambient Temp to M44, damped or default"), MAF, Battery Voltage, Status in A50A (CEL/MIL, CEL/MIL request by TCM, Warmup Cycle Complete, Trip Cycle Complete, Driving Cycle Complete = Fuel Trim started, Fuel Pump Relay, Engine on/off, Active Fault, Open Loop / Closed Loop, Fuel Cut-off, Throttle Position), Status in A50B (EVAP Canister Shut-off Valve, SAS Pump, Engine Cooling Fan, Turbo/non-Turbo, Gear (P-N vs. others), TCM Requested Ignition Retard), Throttle Position, Front/Rear O2 Sensor Voltage, Short Term Fuel Trim, Long Term Fuel Trim (Partial Load), Internal Load Signal, Atmospheric Pressure, M44 ECM Temp (ie, computer's temperature), Eng On Coolant Temp (ie, ECT when engine was turned on), some A583 data.
  • ECU 7A (M44) specific ids: Bosch ECM Hardware Version (eg, 0261204610), Bosch ECM Software Version (eg, 1037357529).
  • ECU 01 (ABS) live data: Brakes Status (On/Off).
  • ECU 01 (ABS) freeze frames [not fully understood].
  • ECU 6E (AW50-42) live data: ATF Temp [updated calculation on 2020-06-13 to: change offset from -13 C to -7 C (thereby interpreting ATF Temp as +6 C higher than it has for years), and use 2 raw data bytes instead of 1 byte (thereby allowing a range of roughly -60 C to +180 C), plus include 3 other possible interpretations], Engine RPM (derived from ECM's load signal), Transmission Input RPM (after torque converter), Gear-Shift Position (and Position Sensors), Mode Selection (with either ECON/SPORT/WINTER buttons or E/S/W buttons), Brakes Status (On/Off), Arrow Warning Light Status (On/Off), Battery Voltage, and Throttle Position.
  • ECU 6E (AW50-42) freeze frames: presently include DTC #, DTC description, ATF Temp [on 2020-07-04, updated calculation and included 3 other possible interpretations], Engine RPM, and Vehicle Speed.
  • Battery voltage derived from: ELM327's ATRV command, OBDLink family's STVR command, ECU 6E (AW50-42) Battery Voltage live data, or ECU 7A (M44) Battery Voltage live data.
  • ECU dates for ECU 58 (SRS), ECU 51 (COMBI), ECU 11 (MSA15.7), ECU 29 (ECC), and ECU 2D (VGLA) [derived from B9F1].
  • Another date for ECU 11 [derived from B9F3].
  • ECU 11 B9F2 id that seems to identify MSA15.7 as being used with a MAN or AUT transmission, as well as identifying it for a VOLVO P80 Turbo Diesel.
  • Negative acks for any KWPD3B0 conversant ECU (with or without headers), ie, the "7F yy zz" and "7E yy zz" responses, where yy is the failed request's function and zz is the error subcode.
  • KeepAlive -- both requests sent to the Volvo and positive acks received from the Volvo.
  • Stopping of KWPD3B0 communication via A0 request.
  • ECU 51 (COMBI) AE02-requested DTC inactivity counters -- which give a clue as to whether the DTC is still active (ie, DTC inactivity counter = 0) or how long the DTC has been inactive (ie, how long DTC's underlying fault conditions have vanished):
    • When the DTC becomes active -- either originally or after a period of inactivity -- its inactivity counter is set to 0.
    • When the DTC is inactive, the counter is incremented up to once between engine starts, but only if there has been significant vehicle movement before the engine was turned off.
    These DTC inactivity counters can be used to:
    • sometimes help to estimate approximately how long ago a COMBI DTC's underlying fault conditions vanished,
    • sometimes help to estimate a minimum time into the past that a COMBI DTC was declared, and
    • estimate when a COMBI DTC will be cleared auto-magically (ie, when its counter reaches FF hex = 255 decimal, the DTC and its inactivity counter conveniently disappear).
    [Note: Prior to 2018-10-19, the interpreter had erroneously assumed these counters indicated the "age" of the DTC being active.]
  • ECU 01 (ABS) AE02-requested DTC data [probably is a counter].
  • ATMA recordings of KWPD3B0 communication when the response(s) are concatenated to the request and appear to the ELM327 device's ATMA parser as one single, long response with a "DATA ERROR" (due to an erroneously perceived checksum error), and when the request / response(s) involve:
    • B9F0 / F9F0.
    • AE01 / EE01.
    • A1 / E1.
    • A0 / E0.
    • ECU 51 B9xx / F9xx, for xx = 01, 03-0B, 0E.
    • ECU 51 A5xx01 / E5xx, for xx = 01-09.
    • ECU 51 ADxx00 / EDxx.
    • various others.
    These "response concatenated to request" situations can arise from ELM327 ATMA recordings of other ELM327 devices, or from ELM327 ATMA recordings of Vol-FCR or Brick-Diag communicating on a VAG/COM KKL cable, or from OBDwiz/TouchScan logs, or from OBDLink Android app OBDLink_debug.txt logs, or from XantheFIN / xiaotec "850 OBD-II" Android app logs (though the xiaotec "850 OBD-II" app's lines do not display the "DATA ERROR").
  • Some cases where response(s) are concatenated to another response and appear as one single, long response with a "DATA ERROR" (due to an erroneously perceived checksum error), and when the string of responses involve:
    • "7E yy 23" Request-in-progress nack(s) / any non-"7E yy 23" KWPD3B0 response that terminates the line with a "DATA ERROR" [eg, when clearing AW50-42 or SRS DTCs, or in a variety of '97-'98 S70/V70/XC70 situations].
    • EE01 / EE01 [eg, for ABS with > 12 errors].
  • Some data even in "DATA ERROR" situations which are for real and which do indeed fail the checksum test and involve data error(s) or checksum transmission error(s).  [For details, see the Concerning Checksums note near the end of this page.]
  • Any of the above responses in lowercase.
  • Any of the above responses generated when ATS0 has been issued (ie, when spaces do not separate the 2-digit hex values, but only if either whitespace or nothing else follows the last 2-digit hex value). This case also includes manually typed input that involves hex responses involving an even # of digits and no spaces. Furthermore, it involves recordings of ELM327 communication by Realterm using a VAG/COM KKL cable, as long as the continuous hex (with no spaces) is edited so the requests (and preferably the responses also) are left aligned on each line, where requests are on one line and responses are on the next line.
  • ECU 51 (COMBI) "Test Gauges" initiation -- both '96-'97 850 format and '97-'98 S/V/C70 format.
  • ECU 7A (M44) "Test" initiation for:
    • "A/C Relay" test,
    • "Engine Cooling Fan, High Speed" test,
    • "Engine Cooling Fan, 1/2 Speed" test,
    • "EVAP Canister Purge (CP) Valve" test,
    • "EVAP Canister Shut-off Valve" test,
    • "Fuel Pump Relay" test,
    • "Idle Air Control (IAC) Valve" test,
    • "Injector 1" test,
    • "Injector 2" test,
    • "Injector 3" test,
    • "Injector 4" test,
    • "Injector 5" test,
    • "Internal Load Signal" test,
    • "SAS/PAIR Pump" test,
    • "SAS/PAIR Valve" test,
    • "Turbo Control Valve (TCV)" test,
  • Detection of possibly non-existent (6-function) Trip Computer
    (via ECU 51 AD0E00 freeze frame request generating "7F AD 12" response).
  • Market -- Country, Model (850 vs. SVC70, turbo vs. non-turbo), possible ECM (Motronic 4.4, MSA 15.7, Fenix 5.2), etc -- inferences, derived by analyzing ECU 51 (COMBI) B901 codes seen by the online interpreter.
  • Warning if pseudo-ELM327 device is **NOT** capable of KWPD3B0 communication.
    This is determined by checking to see if an "ATIIA xx" command behaves (incorrectly) like an ATI command.  For example, if "ATIIA 51" erroneously responds with an ATI response string like "ELM327 v2.1", "ELM327 v1.5", etc, then the warning is issued.  The first such failure produces a detailed explanation. Subsequent ATIIA failures produce shorter warnings.
  • volvo850diag timestamps.
  • volvo850diag "*** CANCELLED ***" messages.
  • freediag "date" command timestamps.
  • CMD Prompt "date" and "time" command timestamps.
  • AT (or ST) command response identification of ELM327 (or OBDLink family) hardware and software versions.
  • ATDP protocol description.
  • OBDwiz / TouchScan Console Log lines.
  • Some OBDwiz / TouchScan Raw Data Log lines that combine the request and response into a single, newly formatted line which makes it easy to see the relationship of the request and its response(s), eg,
    01 00: [48 6B 17 41 00 BE 1D B0 00 96 ]
    01 07: [48 6B 17 41 07 84 96 ]
    010C: [48 6B 17 41 0C 00 00 17 ]
    03: [48 6B 17 43 13 10 03 04 03 03 3D
    48 6B 17 43 03 05 03 00 00 00 18 ]
    
    and:
    AE01: [BUS INIT: ...OK
    83 13 51 EE 01 D6 ]
    B903: [85 13 51 F9 03 A3 32 BA ]
    B906: [84 13 51 7E B9 23 42
    85 13 51 F9 06 D7 00 BF ]
    B908: [85 13 51 F9 08 2D 00 17 ]
    B9F0: [92 13 51 F9 F0 00 09 44 23 78 30 30 32 09 44 22 07 30 30 31 60 ]
    
    are interpreted. Some other OBDwiz / TouchScan Raw Data Log lines are passed straight through, without any interpretation, similar to how the volvo850diag timestamps are passed straight thru, since they are self-explanatory.
  • Some OBDLink Android app OBDLink_debug.txt log lines that combine the request and response into a single, newly formatted line which makes it easy to see the relationship of the request and its response(s), eg,
    0100: [486B1F41008000000093
    486B174100BE1FF81DFD]
    010C: [486B17410C000017]
    0105: [486B1741053E4E]
    0106: [486B1741067F90]
    0107: [486B1741076E80]
    0120: [486B174120000000002B]
    ATRV: [11.9V]
    
    are interpreted. Some other OBDLink Android app debug log lines are passed straight through, without any interpretation, similar to how the volvo850diag timestamps are passed straight thru, since they are self-explanatory.  This capability is known to work for the older OBDLink v3.6.0 Android app's OBDLink_debug.txt logs.  However, the more recent OBDLink v5.3.0 Android app's OBDLink_debug.edf log format is apparently encrypted and should *not* be sent to the KWPD3B0 interpreter.
  • Some "OBD Now Terminal" Android app log lines. Most of their line #s will be removed in the interpretation, but their timestamps will be retained.
      2 OBD Now Terminal - Version 1.0.9        	22:42.764
     11 Bluetooth Device: OBDLink LX            	22:45.507
     14 atz                                     	22:53.682
     15 ELM327 v1.3a                            	22:53.682
     61 b903                                    	26:43.473
     62 BUS INIT: ...OK                         	26:46.219
     63 85 13 51 F9 03 AF 4E E2                 	26:46.219
     77 0100                                    	27:52.547
     78 BUS INIT: ...OK                         	27:52.547
     79 41 00 80 00 00 00                       	27:52.547
     80 41 00 BE 1F F8 1D                       	27:52.548
     83 0101                                    	28:12.658
     84 41 01 00 04 00 00                       	28:12.658
     85 41 01 00 07 6D 6D                       	28:12.659
     88 03                                      	28:16.484
     89 NO DATA                                 	28:16.484
     92 07                                      	28:20.203
     93 NO DATA                                 	28:20.203
    End OBD Now Terminal log
    
    The first line you see begins the special "OBD Now Terminal" format processing that requires removing the line #s. That last line must be added manually to terminate the special "OBD Now Terminal" log processing that removes the line #s, *if* you then interpret any other non-"OBD Now Terminal" log formats during the same kwpd3b0_interpret.html "Interpret" request.
  • Some special formats used by XantheFIN's "Volvo 850 OBD-II" Android app *V0.5d*, and its Fall 2017 manifestation, the xiaotec "850 OBD-II" Android app *V0.9.8* (available on Google Play for $1.99), as well as most formats seen in the following Sep 2018 thru Jan 2019 releases of "850 OBD-II" -- *V1.0.7*, *V1.0.9*, *V1.1.0*, and *V1.1.6*.  Here's a snippet from 850log.txt of *V1.0.9*:
    AE01 >> 83 13 51 EE 01 D6
    AE02 >> 83 13 51 EE 02 D7
    AE05 >> 83 13 51 EE 05 DA
    B9F0 >> 84 13 51 7E B9 23 42 92 13 51 F9 F0 00 09 14 89 30 20 20 41 09 16 81 33 20 32 33 8E
    B9F1 >> 8A 13 51 F9 F1 19 96 06 03 08 00 00 98
    B901 >> 84 13 51 F9 01 B4 96
    B903 >> 85 13 51 F9 03 2B 4F 5F
    B904 >> 85 13 51 F9 04 1C 4F 51
    B905 >> 84 13 51 F9 05 0A F0
    B906 >> 85 13 51 F9 06 30 00 18
    B907 >> 85 13 51 F9 07 40 0B 34
    B908 >> 85 13 51 F9 08 04 00 EE
    B909 >> 85 13 51 F9 09 E8 03 D6
    
  • Special lines such as one of the following:
    • -- Model is: "850".
    • -- Model is: "97 850 T5".
    • -- Model is: "S70".
    • -- Model is: "98 S70 GLT".
    • -- Model is: 97 V70 TDI manual.
    that help the interpreter identify some nebulous items which are interpreted differently for the 850 vs. the SVC70.  Must prefix the phrase "Model is: ".
  • Older volvo850diag log formats -- v0.5 thru v0.8beta46 --
    may display a final Conclusion reminding to download the latest volvo850diag.zip.

Temporary Limitations:
At the present time, most of the DTCs are listed with their Volvo 3-digit DTC codes and corresponding explanations. The most glaring exceptions are that almost none of the '98 ECC and '98 VGLA 3-digit DTC codes and explanations are known. Also, only a few of the 3-digit DTC codes for AW50-42 DTCs < 35 (hex) are known. There is no guarantee that the listed 3-digit codes and explanations are correct. It's the best I could do with my very limited knowledge and experience. But at least the actual, raw, 2-digit hex DTC codes are reported 100% accurately for **any** keyword D3 B0 protocol ECU, regardless whether you even know yet what the ECU is used for.

As the need arises and as new info is discovered -- especially for the raw hex vs. 3-digit Volvo DTC codes -- this interpreter will be expanded so that the remainder of the DTCs, and, in fact, all the Volvo 850 keyword D3 B0 protocol can be interpreted fully, along with the more common OBDII emission diagnostics.

The OBDII emission diagnostic responses will be interpreted with either headers enabled (ATH1) or headers disabled (ATH0, the default), though the interpretation is more accurate when headers are enabled. The KWPD3B0 conversant ECUs' Negative Acks that involve the "7F xx yy" and "7E xx yy" responses will also be interpreted with either headers enabled or headers disabled. However, most responses from KWPD3B0 conversant ECUs will only be interpreted when headers are enabled (ATH1).

Hints:
For explanations of the Volvo 3-digit DTC codes as well as the OBDII emission diagnostic DTCs and Pending DTCs...

Follow this link to a series of links about the highly informative Original Technical Publications (OTP) Volvo 850 Service Manuals DVD.  Its Service Manuals' sections that are typically labeled "DTC Table" and "OBD-II Codes, Table" are especially useful for a high level view of the DTCs.  Then there's detailed sections for each DTC. When combined with its collection of wiring diagrams and its "Fault Symptoms" sections, its one potent DTC and diagnostic reference source.

Peruse the generic A2 Fuel System and A6 Ignition sections on page 1 of Volvo 850, S70, V70, C70, XC70 Trouble Codes 1996-1998, as well as the engine specific Motronic 4.3, Fenix 5.2, and Jetronic LH3.2 sections on page 2.

Also, (if you haven't yet bought the OTP Volvo 850 DVD, USB, or eBooks), remember the Entire 1995 Volvo 850 Service Manual, which is an extremely useful manual for 1995, 1996, and 1997 Volvo 850.  Even though that Volvo_850.zip's .pdf files are focused on the 1995 Volvo 850, much of the info is applicable to the 1996 and 1997 850, and some of the info is applicable to the 1997/1998 S70/V70/C70/XC70.

Permanent Limitations:
This page will not work if saved locally to your machine.
This page will only work from the web as:
https://jonesrh.info/volvo850/kwpd3b0_interpreter.html

Ideally, the text entered into the Paste Volvo 850/SVC70 communication here box should contain both the commands/requests sent to the ELM327 and the responses back from the ELM327 and 850/SVC70.  For example, when reading the Total Vehicle Mileage contained in the Volvo 850 COMBI, it should contain both the B903 (or B90300) request along with its responses (most especially the F903 response). And when reading the Total Vehicle Mileage contained in the Volvo S70 / V70 / C70 / XC70 COMBI, it should contain both the (non-00-padded) B903 request along with its responses (most especially the F903 response). Normally, that involves 2 lines -- one containing ">B903" and one containing "...F9 03...".

At present, the absolute bare minimum is to include the Volvo 850/SVC70 responses. They are the root of the interpretations. But keep in mind that some interpretations may be incomplete or partially inaccurate unless the request is also included on the previous line.  For example, the Reset SRI (ie, Reset SERVICE Light) exchange must be included in its entirety -- from the B030, through the B230, and also including the NO DATA which follows an 850's COMBI B230 [see last two examples below].

As the following example demonstrates, the pasted text can contain other info which is not interpreted:

ATZ
OKTL17 v1.5

 ------ What was issued is: ATZ<Enter>ATL1<Enter>.

 ------ My ELM327 clone ATZ response of "ELM327 v1.5" overwrites the ">ATZ".

 ------ The ATL1 command and response overwrite the previous ATZ output.

>ATE1
OK

 ------ Now the display should be settled down and readable.

>ATI
ELM327 v1.5

 ------ Expect this to be "ELM327 v1.5" for an ELM327 v1.4 (or v1.4b) 
        equivalent clone, or "ELM327 v1.3a" for a ScanTool.net OBDLink SX,
        OBDLink LX BT, OBDLink MX BT, or OBDLink MX+ BT device.

>ATSP 3A
OK
 
 ------ ATSP 3A, ATSP A3, or ATSP 3 only needed at 1st ELM327 use
        and after non-"ISO 9141-2" protocol use.

>ATDP
AUTO, ISO 9141-2

>ATH1
OK

>ATAL
OK

>ATKW0
OK

>ATSR 13
OK

 ------ The ATSR 13 is necessary for getting immediate responses to
        some ECUs when sending requests which have < 3 data bytes 
        after the KWPD3B0 header and before the checksum.

>ATIIA 51
OK

 ------ If your "ATIIA xx" commands respond with "OK", then continue with the
        next command (ATWM).

        However, if your "ATIIA xx" commands do not respond with "OK", but 
        instead respond exactly like the ATI command -- eg, as "ELM327 v1.5", 
        "ELM327 v2.1", or ELM327 whatever -- then you have an partial-ELM327
        device which can **NOT** perform **ANY** of the KWPD3B0 communication
        to the COMBI, SRS, ABS, AW50-42, etc 
        (like Vol-FCR, Brick-Diag Free v0.0.6.6, and Volvo Scan Tool can do).
        There's absolutely no point for you issuing any of the remaining
        commands on this page.  It's pointless.

        Your partial-ELM327 device may work well for standard legally-mandated
        OBDII emission diagnostics.  But it's impossible for it to connect to
        COMBI, SRS, ABS, AW50-42, etc for ISO 9141-2 keyword D3 B0 style 
        communication.

>ATWM 82 51 13 A1
OK

 ------ ********************************************************************
        *  The below is one way to read the 2 mileages on a 
        *  1996-1997 Volvo 850 (after the above prep work is done).
        ********************************************************************

>ATSH 84 51 13
OK

>B90300
85 13 51 F9 03 34 30 49 

>b90400
85 13 51 F9 04 24 19 23 

 ------ ********************************************************************
        *  However, on a 1998 Volvo S70 / V70 / C70 / XC70 that
        *  ATSH 84 51 13 / B90300 / B90400 mechanism doesn't work.
        *
        *  Instead, ATSH 83 51 13 / B903 / B904 must be used.
        *
        *  Requirement:
        *
        *     - The ATSH 83 51 13 / B903 / B904 mechanism requires the
        *       ATSR 13 command be issued beforehand.
        *
        *  Good News:
        *
        *     - The ATSH 83 51 13 / B903 / B904 mechanism also works for
        *       the 1996-1997 Volvo 850  (as long as ATSR 13 is issued
        *       beforehand).  So we can standardize on that approach.
        *
        ********************************************************************
        *
        *  Below is the new way to read the 2 mileages for both the 
        *  1996-1997 Volvo 850 and the 1997-1998 S70 / V70 / C70 / XC70.
        *
        ********************************************************************

>ATSH 83 51 13
OK

>B903
85 13 51 F9 03 34 30 49 

>B904
85 13 51 F9 04 24 19 23 

 ------ I got the mileages from the ELM327.  Now what?  Looks like mumbo-jumbo.

 ------ The use of ATSR 13 above eliminates the need to use the 00-padding of 
        ECU 51 / 58 / 2E / 2F AEnn00, B9nn00, AFnn00, and A00000 requests.

        By using ATSR 13, both the 1996-1997 Volvo 850 and the
        1997-1998 Volvo S70 / V70 / C70 / XC70 can communicate with the
        same ATSH commands and the same corresponding request formats.

        ********************************************************************
        ***
        ***  Here are more examples of retrieving the two mileages using
        ***  ECU 51 B903 as well as B904 command/request variants.
        ***
        ********************************************************************

>b903
NO DATA

>atbd
08 85 13 51 F9 03 5B 2E 6E 64 00 01 30 

 ------ In this case, the NO DATA response to B903, in combination with the 
        "F9 03" response to ATBD, implies the ATSR 13 had not been issued,
        since there was no immediate response displayed, but the response
        was actually received by the ELM327.  

        Also, the non-zero ATBD implies that a ScanTool.net OBDLink family
        device is *not* being used.  

        Furthermore, the ATBD buffer's F9 03 positive ack implies the ATBD 
        was probably issued quickly (ie, before the KeepAlive was sent by 
        the ELM327 compatible device several seconds after the B903 request).

>
 B903
85 13 51 F9 03 6C 2E 7F 

 ------ This is how a request and response appear when the Realterm "Send File"
        mechanism is used in volvo850diag.  There is oftentimes a linefeed 
        between the ELM327 prompt and the request.

>b904 
85 13 51 F9 04 24 19 23 

 ------ This shows lowercase requests are OK.

>atbd
08 85 13 51 F9 04 24 19 23 64 00 01 30 

 ------ This is how the same response appears in an ELM327 (clone) ATBD buffer.

>b904
85 13 51 f9 04 cd ab 5e 

 ------ That shows lowercase, typed responses are OK.  Notice that the lowercase 
        "f9 04 cd ab" is OK.

>ath0
OK

>b904
f9 04 10 27 

-- The above example is **NOT** interpreted because:
   * The headers (and checksum) are not included for one of the
     physically addressed ECUs: 01, 11, 29, 2D, 2E, 2F, 41, 51, 58, 6E, 7A.

-- To correct the problem with this particular response, either:
   * Issue ATH1 before issuing the B904.
   or:
   * Edit the ECU 51 response to prepend with a valid header that has the form 
     "85 xx 51 ", where xx are any 2 hex digits.
     ***************************************************************************
     *  NOTE: In general, for the physically addressed ECUs, the interpreter:
     *        - expects the 1st byte of the header to accurately
     *          reflect the length of the bytes that follow the 3-byte header
     *          (after first masking out the high bit),
     *        - does not usually check the 2nd byte, ie, the tester address
     *          that sent the request,
     *        - expects the 3rd byte to be the ECU address that sent the
     *          response.
     ***************************************************************************
   * Append the message with the (2 hex digits) checksum.
     If you do not want to calculate the correct checksum, that is usually OK,
     since any 2 hex digits will usually pass this interpreter's parsing for 
     the checksum.

-- For example, replace the above request/response with the following one...

>b904
85 13 51 f9 04 10 27 ff

-- The above example has a valid header, the same response -- "f9 04 10 27" --
   after the header and before the checksum, then an invalid checksum: "ff"
   (since we were lazy and didn't want to reconstruct the valid checksum
   before sending this manually reconstructed message to kwpd3b0_interpreter).

>b903
f9 03 8f 37

-- The above example of specifying the Vehicle Mileage without its headers
   (and checksum) -- presumably because ATH1 had not been issued, or maybe 
   because it was simply manually typed in without including the headers and
   checksum -- is a special exception to the rule that the KWPD3B0 headers
   and checksums are usually required.  

   This short form of entering the Vehicle Mileage response does work for now,
   since it can be differentiated from the ECU 2E, ECU 2F, and ECU 7A
   responses to B903, and since it is the most popular interpreted item.

f9039137

851351F9039137AD

851351f904cdab5e

-- Also, the above 3 special cases work where the line contains only 
   an even number of hex digits without any intervening blanks.

-- As can be seen below, certain interpretations, require multiple lines
   to be input...

>ATSH 83 51 13
OK

-- For the 850 Reset SRI to be interpreted, you must include from the B030 line...
>B030
83 13 51 F0 30 07 

>B230
NO DATA
-- ...thru the NO DATA line that follows the B230.

-- On S70/V70/C70/XC70, that Reset SRI sequence might look a bit different --
-- like the following sequence -- so you would need to include from
-- the B030 line...
>B030
84 13 51 7F B0 12 29 

>B230
83 13 51 F2 30 09 
-- ...thru the "F230" ack line that follows the B230.

To see how all this works, just paste all of the above (or any portion of it) into the Paste Volvo 850/SVC70 communication here box, then click Interpret.

Our above example data for the Paste Volvo 850/SVC70 communication here box would be interpreted into the following results in the Gleanings box:

>ATI
ELM327 v1.5

>ATDP
AUTO, ISO 9141-2

>B90300
85 13 51 F9 03 34 30 49 
 ------ Vehicle Mileage..........................123400 miles (198593 km)

>b90400
85 13 51 F9 04 24 19 23 
 ------ Mileage at Service Light Reset........... 64360 miles (103577 km)
 ------ Mileage since Service Light Reset........ 59040 miles ( 95016 km) [calculated from B903 - B904]

>B903
85 13 51 F9 03 34 30 49 
 ------ Vehicle Mileage..........................123400 miles (198593 km)

>B904
85 13 51 F9 04 24 19 23 
 ------ Mileage at Service Light Reset........... 64360 miles (103577 km)
 ------ Mileage since Service Light Reset........ 59040 miles ( 95016 km) [calculated from B903 - B904]

>atbd
08 85 13 51 F9 03 5B 2E 6E 64 00 01 30 
 ------ Vehicle Mileage..........................118670 miles (190981 km)

 B903
85 13 51 F9 03 6C 2E 7F 
 ------ Vehicle Mileage..........................118840 miles (191254 km)

>b904 
85 13 51 F9 04 24 19 23 
 ------ Mileage at Service Light Reset........... 64360 miles (103577 km)
 ------ Mileage since Service Light Reset........ 54480 miles ( 87677 km) [calculated from B903 - B904]

>atbd
08 85 13 51 F9 04 24 19 23 64 00 01 30 
 ------ Mileage at Service Light Reset........... 64360 miles (103577 km)
 ------ Mileage since Service Light Reset........ 54480 miles ( 87677 km) [calculated from B903 - B904]

>b904
85 13 51 f9 04 cd ab 5e 
 ------ Mileage at Service Light Reset...........439810 miles (707806 km)

>b904
85 13 51 f9 04 10 27 ff
 ------ Mileage at Service Light Reset...........100000 miles (160934 km)
 ------ Mileage since Service Light Reset........ 18840 miles ( 30320 km) [calculated from B903 - B904]

>b903
f9 03 8f 37
 ------ Vehicle Mileage..........................142230 miles (228897 km) [if really from ECU 51 (COMBI)]

f9039137
 ------ Vehicle Mileage..........................142250 miles (228929 km) [if really from ECU 51 (COMBI)]

851351F9039137AD
 ------ Vehicle Mileage..........................142250 miles (228929 km)

851351f904cdab5e
 ------ Mileage at Service Light Reset...........439810 miles (707806 km)

>B030
83 13 51 F0 30 07 

>B230
NO DATA
 ------ ECU 51 B030 / B230 shows Reset SRI attempted to turn off SERVICE light.

>B030
84 13 51 7F B0 12 29 

>B230
83 13 51 F2 30 09 
 ------ ECU 51 B030 / B230 shows Reset SRI attempted to turn off SERVICE light.

 ------ ** Overall Conclusions follow: **
 ------ 1. Response(s) to ECU 51 B903, B904, A507, A509, and/or ADxx request(s)
           included new (as of 2016-01-31) interpretation of Vehicle Mileage in:
           - miles, calculated as: (raw value * 10 miles), and
           - km,    calculated as: (raw value * 16.09344 km).

After you've experimented with the above example data, then generate your own log for your car by sending the commands listed at ELM327 commands to read ECU 51 DTCs and B9nn data to the ELM327 connected to your 1996-1998 Volvo 850 / S70/V70/C70/XC70 COMBI. The responses should look somewhat similar to those at ELM327 ECU 51 commands & responses example (with links).

Then copy and paste your car's responses from the Hyperterminal, Realterm, or whatever terminal emulator's display screen or captured log file into the Paste Volvo 850/SVC70 communication here box, and click Interpret.  The results will appear on a separate Volvo keyword D3 B0 protocol interpreter results page.

At present, the primary requirements are that the interpretable Volvo 850 / S70 / V70 / C70 / XC70 responses are inserted into the Paste Volvo 850/SVC70 communication here box, and that they are left-aligned on each response line. You shouldn't have any problem with the "left alignment" requirement if you copy/paste the command and its response(s) as a unit.

It is advisable to include both:

  • the command, possibly preceded by the ELM327's prompt (>) and optional whitespace, and
  • the Volvo response(s) [usually there's only 1 response line per request],
each on their own separate line, since this will solve the "response must be left aligned" requirement, and it simplifies understanding what Gleanings come from what responses.

If you paste contents of a log created by Realterm using its "Send File" mechanism, you may find that the ELM327 prompt (>) is missing from the command line (due to a line feed being sent by Realterm for some unknown reason after the ELM327 ">" prompt is received). That is usually OK, since the Volvo's response is usually the main thing which determines the interpretation.

If you use volvo850diag -- [see volvo850diag (online docs) and volvo850diag.zip (distribution)] -- to automatically create a log file, then you can open the log file in a text editor, Select All its contents, copy to the clipboard, then paste the entire log's contents in the Paste Volvo 850/SVC70 communication here box below. The box has enough capacity to generally handle a busy 60 minute logging session. After pasting the text into the box, add any personalized feedback or explanations, as follows:

Hints:
  1. If you want personalized feedback or explanations, then also include your e-mail address in the Paste Volvo 850/SVC70 communication here box, preferably along with a note describing your car and/or the conditions when the scan was performed. Useful info for helping to enhance the interpreter includes:

    • car year/model;
    • VIN;
    • known ECUs or systems;
    • if ABS has ever failed and, if so, for how long (ie, approximate engine hours);
    • if you've ever gotten any "speed warnings" from the instrument cluster and, if so, how many;
    • any info you know from alternative sources -- eg, other scanning hardware or software -- which might help in completing the interpreter, eg, in establishing more associations of the 2-digit raw DTC codes to the 3-digit Volvo DTC codes, etc;
    • description of anything that you had to do specially that wasn't described in volvo850diag.html;
    • description of what you've changed in the volvo850diag .html or .js files, especially if you explore unknown ECUs or explore all the possible requests that generate positive acks for a newly explored ECU;
    • answers to any questions jonesrh has previously asked.

    You might also want to include:

    • what you desire to scan, and
    • any questions you have.

    An alternative to including an e-mail address is to post on some forum then include the link to that post in the box below. That way all the info is immediately publicly available.

Then click Interpret and anything which is interpretable by this interpreter will appear in the Results page's Gleanings box.

The Gleanings themselves will have the ------ prefix.


Paste Volvo 850/SVC70 communication here (including KWPD3B0, OBDII, and/or comments):

      

Click the Interpret button after placing text in the Paste Volvo 850/SVC70 communication here box.

The Results page usually appears within 2-15 seconds.  It will contain 2 boxes:

  • an ELM327 said box, which is essentially a copy of the Paste Volvo 850/SVC70 communication here box above, and

  • either an Errors box or a Gleanings box. Anything which is interpretable by the KWPD3B0 interpreter appears in the Gleanings box.

At present, Interpret will allow up to 550055 characters.

The Paste Volvo 850/SVC70 communication here box can be resized if you like, for readability.

Hints (continued):
  1. On extremely rare occasions, the first click of the Interpret button will delay for longer than anything reasonable, then a message will appear in the Errors box which begins with: "Interpret button appears to not have been clicked".

    If you know for certain that you had pasted or typed something into the Paste Volvo 850/SVC70 communication here box, then you can oftentimes recover from this situation by submitting the information a second time.  Just use your browser's Page Back button to return from the kwpd3b0_interpreter_results.php page to this kwpd3b0_interpreter.html page.  The information you pasted / typed should still be visible on this .html page.  Change at least one character in the Paste Volvo 850/SVC70 communication here box (eg, add a blank at the end of a line, or add a blank line at the top of the box or the bottom of the box), then press the Interpret button.  Usually the interpretation works on the second attempt.

    The "1st Interpret click sometimes doesn't work" problem is thought to be related to either the internet connection hardware/software, the Internet Service Provider, and/or the server hosting jonesrh.info.

    The "need to change at least one character when reinterpreting the same information" inconvenience is thought to be related to the browser's or server's handling of caches.

The Results page's Gleanings box will only include:

  • the lines which trigger each interpretation, with usually 1 or 2 prior lines included to show some context, where the Gleanings themselves will have the ------ prefix, and

  • some additional lines that are passed straight through to the Gleanings box without any added interpretation, eg, ELM327 version #s, protocol names, volvo850diag timestamps, etc, since they are quite useful and they are self-interpreting.

  • some final Overall Conclusions.

Concerning Checksums...
Normally, the interpreter does not calculate checksums, since the calculation is very seldom ever needed.  If a line does not contain the "DATA ERROR" suffix, then the KWPD3B0 interpreter will not waste the time performing a checksum calculation.  But if a "DATA ERROR" suffix does appear, then a checksum calculation may occur in some situations...

For most people, the existence of the ELM327-generated "DATA ERROR" suffix is 99% of the time a "false negative". Usually what is happening with our '96-'98 Volvo 850/S70/V70/etc is the ELM327 device is not detecting the end of one request or response and the beginning of the following response.  The ELM327 device is viewing all the request and/or response messages that appear on the one line from the ELM327 as one long message which has a single checksum, so naturally the checksum calculation fails almost always in that "concatenated messages" scenario.

The interpreter detects many of the more important or more common "concatenated messages" patterns and interprets them as their separate messages -- ignoring any "DATA ERROR" suffix and bypassing any checksum calculation.

In other situations, the interpreter breaks apart some of the concatenated messages onto separate lines in order to simplify the interpretation (and the understanding of what got interpreted). They are then interpreted as if the ELM327 had sent them as totally separate lines. Note that the last of such separated lines which were broken apart from the original "concatenated messages" line will usually end with the "DATA ERROR" suffix.

If, on a "normal" line which is not thought to involve concatenated messages -- or on one of the "broken apart, separated out" messages just mentioned -- the interpreter encounters a "DATA ERROR" suffix after the last hexadecimal data (just like the ELM327 generates that suffix), the interpreter will attempt to perform a checksum calculation. If it can complete the checksum calculation and the checksum calculation fails to match the checksum sent in the message -- ie, (presumably) real checksum errors occurred -- then the interpretations (if any) will be sandwiched by header and footer lines which include the phrase:

INTERPRETATION MADE WITH DATA THAT HAD CHECKSUM (OR OTHER BAD DATA) ERROR.

and the checksum error will be counted.

The total count of checksum errors is now included in the Overall Conclusions.

These "real" checksum error situations are extremely rare, likely involve bad Bluetooth or cable connections, or bad media, or a bad pin 7 - K-line bus (eg, due to bad grounds or shorts or opens), or possibly involving interference from nearby, strong, electromagnetic fields. If these checksum errors randomly repeat fairly often, you should diagnose and eliminate them.  If they still persist, you should strongly consider replacing your scanning equipment.

The sandwiched "bad data" interpretations should be filtered through your common sense before being accepted as fact. When there is only a single error in a response, a comparison of the calculated checksum vs. the checksum sent in the message reveals a difference which can sometimes be used to determine which data is invalid and what that "bad" data's real value actually was.

Return to Paste Volvo 850/SVC70 communication here box.


This page is copyright © 2013-2022, Richard H. Jones. All rights reserved.

Page's last update was on 2022-09-05.