Skip to main content

How to Decode IO93 OBD DTC and MIL

This Knowledge article will help to understand how the IO 93 OBD DTC and MIL work and how it is possible to decode it.

Updated this week

Introduction

IO93 is a bitmap parameter which operates according to OBD-II PIDs Service 01 PID 01 — Monitor Status Since DTCs Cleared.

Note: IO93 does not show exact OBD error codes. Instead, it reports whether the MIL light is on, how many diagnostic codes are flagged, and the availability/completeness of on-board readiness tests.

Warning: If you need to know exact OBD DTC codes, this feature is available via integration of the Ruptela device protocol, Command 9/109 Diagnostic Trouble Code on the server.

1 Overview

1.1 Parameter Structure

IO93 is a 4-byte (32-bit) value. Each byte (A, B, C, D) encodes specific diagnostic information:

  • Byte A — MIL status and DTC count

  • Byte B — Monitoring support flags and engine type

  • Byte C — Monitoring availability (varies by engine type)

  • Byte D — Monitoring readiness (varies by engine type)

1.2 Engine Type Abbreviations

  • SI — Spark Ignition (e.g. petrol/Otto or Wankel engines)

  • CI — Compression Ignition (e.g. diesel engines)

2 Byte Decoding Reference

2.1 Byte A — MIL and DTC Count (SI/CI)

Bit

Values

Description

Engine

A0–A6

0–127

Number of DTCs stored in the ECU

SI/CI

A7

0 = MIL OFF, 1 = MIL ON

Malfunction Indicator Lamp (MIL) status

SI/CI

2.2 Byte B — Monitoring Support and Engine Type

Bit

Values

Description

Engine

B0

0 = NO, 1 = YES

Misfire monitoring supported

SI/CI

B1

0 = NO, 1 = YES

Fuel system monitoring supported

SI/CI

B2

0 = NO, 1 = YES

Comprehensive component monitoring supported

SI/CI

B3

0 = SI, 1 = CI

Engine type (0 = Spark ignition, 1 = Compression ignition)

SI/CI

B4

0 = YES, 1 = NO

Misfire monitoring ready

SI/CI

B5

0 = YES, 1 = NO

Fuel system monitoring ready

SI/CI

B6

0 = YES, 1 = NO

Comprehensive component monitoring ready

SI/CI

B7

0

ISO/SAE reserved

SI/CI

2.3 Byte C — Monitoring Availability

Bit

Values

SI Description

CI Description

C0

0 = NO, 1 = YES

Catalyst monitoring supported

NMHC catalyst monitoring supported

C1

0 = NO, 1 = YES

Heated catalyst monitoring supported

NOx after-treatment monitoring supported

C2

0 = NO, 1 = YES

Evaporative system monitoring supported

ISO/SAE reserved

C3

0 = NO, 1 = YES

Secondary air system monitoring supported

Boost pressure system monitoring supported

C4

0

ISO/SAE reserved

ISO/SAE reserved

C5

0 = NO, 1 = YES

Oxygen sensor monitoring supported

Exhaust gas sensor monitoring supported

C6

0 = NO, 1 = YES

Oxygen sensor heater monitoring supported

PM filter monitoring supported

C7

0 = NO, 1 = YES

EGR and/or VVT system monitoring supported

EGR and/or VVT system monitoring supported

2.4 Byte D — Monitoring Readiness

Bit

Values

SI Description

CI Description

D0

0 = NO, 1 = YES

Catalyst monitoring ready

NMHC catalyst monitoring ready

D1

0 = NO, 1 = YES

Heated catalyst monitoring ready

NOx after-treatment monitoring ready

D2

0 = NO, 1 = YES

Evaporative system monitoring ready

ISO/SAE reserved

D3

0 = NO, 1 = YES

Secondary air system monitoring ready

Boost pressure system monitoring ready

D4

0

ISO/SAE reserved

ISO/SAE reserved

D5

0 = NO, 1 = YES

Oxygen sensor monitoring ready

Exhaust gas sensor monitoring ready

D6

0 = NO, 1 = YES

Oxygen sensor heater monitoring ready

PM filter monitoring ready

D7

0 = NO, 1 = YES

EGR and/or VVT system monitoring ready

EGR and/or VVT system monitoring ready

3 How to Decode IO93

3.1 Decoding Method

The best way to decode IO93 is to parse the value bit by bit. The recommended tool is Windows Calculator in Programmer mode, which provides a bit-toggle keypad for easy binary inspection.

Note: Decoding runs from MSB (most significant byte) to LSB (least significant byte). Because the parameter is 4 bytes long, prepend "0" as needed to ensure the full 32-bit length (bit count runs from 0 to 31.).

Windows Calculator in Programmer mode showing IO93 bit layout

3.2 Decoding Steps

Your device provides IO93 as a hexadecimal value. Follow these steps to decode it:

  1. Take the hex value from the device.

  2. Prepend "0" if needed to reach the full 32-bit length.

  3. Convert to binary (use Calculator in Programmer mode).

  4. Parse each byte (A, B, C, D) starting from bit A7 down to D0.

  5. For each bit that is "1", refer to the reference tables above. For bits A0–A6, read the value as a number (a combination of bits give decimal number) — it indicates the DTC count.

4 Examples

4.1 Example 1 — 0x0D062040

Convert the value step by step:

HEX:     0x0D062040 
Decimal: 218,505,280
Binary: 0000 1101 0000 0110 0010 0000 0100 0000
[Byte A] [Byte B] [Byte C] [Byte D]
Binary representation of 0x0D062040 in Calculator Programmer mode

Parse each byte starting from A7 down to D0:

Bit-by-bit parsing of 0x0D062040

Byte (HEX)

Decoded Meaning

0D (Byte A)

A7 = 0 → MIL/CEL is OFF
A0–A6 = 13 → 13 DTCs currently stored

06 (Byte B)

B1 = 1 → Fuel system monitoring supported
B2 = 1 → Comprehensive component monitoring supported
B3 = -0 → Engine type: SI (Spark Ignition)

20 (Byte C)

C5 = 1 → Oxygen sensor monitoring supported (SI)

40 (Byte D)

D6 = 1 → Oxygen sensor heater monitoring ready (SI)

4.2 Example 2 — 0x00080000

Convert the value step by step:

HEX:     0x00080000 
Decimal: 524,288
Binary: 0000 0000 0000 1000 0000 0000 0000 0000
[Byte A] [Byte B] [Byte C] [Byte D]

Note: Prepend "0" in front to ensure full 32-bit length.

Binary representation of 0x00080000 in Calculator Programmer mode

Only one bit is set — B3 = 1. According to the Byte B table, this means:

Byte (HEX)

Decoded Meaning

08 (Byte B)

B3 = 1 → Engine type: CI (Compression Ignition / Diesel)

All other bits are "0", so no MIL, no DTCs, and no other monitoring flags are active.

Did this answer your question?