본문 바로가기

IT/자동차

DTC와 Status Byte 완전 정리

다음은 실제 예제를 포함해 정리한 블로그 형태 설명이다.


차량 진단 핵심 개념: DTC와 Status Byte 완전 정리

차량 진단을 하다 보면 가장 많이 접하는 개념이 바로 DTC(Diagnostic Trouble Code)이다.
하지만 실제로 디버깅을 하거나 CAN 로그를 분석할 때는 DTC 자체보다 Status Byte 해석이 훨씬 중요하다.

이 글에서는 DTC 개념부터 실제 UDS 응답 예제까지 연결해서 설명한다.


1. DTC란 무엇인가

DTC는 차량의 ECU(Electronic Control Unit)가 문제를 감지했을 때 생성하는 오류 코드다.

예:

  • P0300 → Random Misfire
  • C1234 → ABS 센서 오류

이 코드는 단순히 "무슨 문제가 있다"를 알려주는 역할이고,
"지금 상태가 어떤지"는 Status Byte가 담당한다.


2. DTC Status Byte란

UDS 서비스에서 DTC를 읽으면 다음과 같은 형태로 응답이 온다.

[0x59] [SubFunction] [DTC High] [DTC Mid] [DTC Low] [Status Byte]

여기서 마지막 1바이트가 Status Byte이다.

이 값은 단순 숫자가 아니라 8개의 상태 비트 집합이다.


3. Status Byte 구조

Bit Hex 의미
0 0x01 testFailed (현재 실패)
1 0x02 현재 사이클 실패
2 0x04 pending
3 0x08 confirmed
4 0x10 클리어 이후 테스트 안됨
5 0x20 클리어 이후 실패 있음
6 0x40 이번 사이클 테스트 안됨
7 0x80 경고등 요청

4. 실제 CAN 로그 예제

예제 1: 단일 DTC

TX: 19 02 AF
RX: 59 02 12 34 56 09

해석

  • DTC: 0x123456
  • Status Byte: 0x09

→ 0x09 = 0000 1001

Bit 상태
bit0 testFailed 1
bit3 confirmedDTC 1

의미

  • 현재도 오류 발생 중
  • 이미 확정된 DTC

👉 정비가 필요한 실제 고장 상태


예제 2: Pending 상태

RX: 59 02 22 33 44 04
  • Status Byte: 0x040000 0100

의미

  • pendingDTC = 1

👉 아직 확정되지 않은 초기 이상
👉 간헐적 문제 가능성 높음


예제 3: 과거 오류 (히스토리)

RX: 59 02 33 44 55 20
  • Status Byte: 0x200010 0000

의미

  • 과거에 한 번 이상 실패
  • 현재는 정상

👉 재현 안 되는 이슈 / 히스토리 코드


예제 4: 경고등 점등 상태

RX: 59 02 AA BB CC 88
  • Status Byte: 0x881000 1000

의미

  • confirmedDTC
  • warningIndicatorRequested

👉 계기판 MIL(체크엔진 등) 점등 상태


예제 5: 복합 상태 (현실적인 케이스)

RX: 59 02 45 67 89 2F
  • 0x2F0010 1111

포함된 상태

  • testFailed
  • testFailedThisOperationCycle
  • pendingDTC
  • confirmedDTC
  • testFailedSinceLastClear

의미

  • 현재도 실패 중
  • 이번 주행에서도 실패
  • 과거에도 실패
  • 확정된 DTC

👉 지속적이고 확실한 고장 상태


5. 실무에서 중요한 해석 포인트

1) confirmedDTC (0x08)

→ 실제 정비 대상 판단 기준

2) pendingDTC (0x04)

→ 초기 이상 감지 (노이즈/간헐 오류 가능)

3) testFailed (0x01)

→ "지금도 문제 발생 중"

4) warningIndicatorRequested (0x80)

→ 사용자에게 보이는 문제 (MIL)


6. 자주 하는 실수

❌ Status Byte를 하나의 값으로 해석

→ 잘못된 접근

⭕ 반드시 비트 단위로 해석

예:

0x09 != "상태 9"
0x09 = bit0 + bit3

7. 요약

  • DTC = "무슨 문제인지"
  • Status Byte = "지금 상태가 어떤지"

그리고 핵심은 이것이다:

👉 Status Byte는 조합이다. 하나의 값이 아니다.


8. 추가 팁 (실무 기준)

  • 테스트 중:

    • pending → confirmed로 올라가는 흐름을 체크
  • 양산 디버깅:

    • testFailedSinceLastClear 중요
  • 고객 클레임 분석:

    • history vs current 구분 필수

필요하면 다음도 이어서 설명 가능하다:

  • UDS 0x19 Sub-function별 차이
  • DTC Aging / Healing 로직
  • OEM별 Status Bit 사용 차이

'IT > 자동차' 카테고리의 다른 글

FEE - Flash EEPROM Emulation 왜 쓸까?  (0) 2026.02.04
프로비저닝 - 왜 이런 용어를 쓰는 걸까?  (0) 2026.01.15