CAN의 진단통신 (CAN Diagnostic Communication)
CAN(Controller Area Network)은 차량 및 산업용 기계에서 널리 사용되는 통신 프로토콜로, 진단통신(Diagnostic Communication)은 차량 내부의 전자제어장치(ECU, Electronic Control Unit)와 정비 도구(진단기) 간의 데이터를 송수신하는 데 활용된다.
진단통신을 위해 주로 사용되는 프로토콜은 ISO 14229 (Unified Diagnostic Services, UDS), ISO 15765-4 (CAN을 통한 OBD-II 통신) 및 KWP2000 (ISO 14230) 등이 있다.
1. CAN 기반 진단통신 개요
1.1 진단통신의 목적
- 차량의 ECU 상태 모니터링
- 오류 코드(DTC, Diagnostic Trouble Codes) 확인 및 삭제
- ECU 설정 및 매개변수 변경 (Coding, Flashing)
- 실시간 데이터 스트리밍 (Live Data)
- ECU 소프트웨어 업데이트 (Reprogramming)
2. CAN 진단 프로토콜
2.1 OBD-II (ISO 15765-4)
- 차량의 배기가스 및 엔진 상태 모니터링을 위한 온보드 진단(On-Board Diagnostics) 표준
- OBD-II 스캐너가 CAN 네트워크에 연결되어 특정 PID(Parameter IDs)를 요청하여 엔진 및 배기가스 데이터를 수집
OBD-II 메시지 구조
- 요청(Request)
- 예: 02 01 0C (엔진 RPM 요청)
- 응답(Response)
- 예: 04 41 0C 0B B8 (RPM 데이터 반환, 0x0BB8 = 3000 RPM)
2.2 UDS (ISO 14229)
UDS (Unified Diagnostic Services)는 ECU의 플래싱, 설정 변경, 진단 기능을 수행하는 CAN 기반 프로토콜이다.
UDS 서비스 (Diagnostic Services)
UDS 프로토콜은 특정한 서비스 ID(SID)를 사용하며, 주요 서비스는 아래와 같다:
서비스SID (요청)응답 SID설명
Diagnostic Session Control | 0x10 | 0x50 | 진단 세션 전환 |
ECU Reset | 0x11 | 0x51 | ECU 리셋 |
Read DTCs | 0x19 | 0x59 | 오류 코드(DTC) 읽기 |
Read Data By Identifier | 0x22 | 0x62 | 특정 데이터 읽기 (예: VIN) |
Security Access | 0x27 | 0x67 | ECU 보안 잠금 해제 |
Write Data By Identifier | 0x2E | 0x6E | 특정 데이터 쓰기 |
Routine Control | 0x31 | 0x71 | 특정 루틴 실행 (예: DPF 재생성) |
Request Download | 0x34 | 0x74 | ECU 소프트웨어 다운로드 요청 |
Transfer Data | 0x36 | 0x76 | ECU 데이터 전송 |
UDS 통신 예제
- ECU 소프트웨어 다운로드 세션 시작
- 요청: 10 03 (Programming Session 시작) 응답: 50 03
- 보안 잠금 해제
- 요청: 27 01 (Security Access Step 1) 응답: 67 01 XX XX XX XX (Seed 값 반환) 요청: 27 02 YY YY YY YY (Seed 값으로 Key 계산 후 전송) 응답: 67 02 (보안 잠금 해제 성공)
- ECU 소프트웨어 업데이트
- 요청: 34 00 00 10 00 (Request Download) 응답: 74 20
2.3 KWP2000 (ISO 14230)
- OBD-II보다 확장된 진단 프로토콜로, CAN뿐만 아니라 K-Line에서도 사용 가능
- 0x22(데이터 읽기), 0x2E(데이터 쓰기), 0x31(루틴 실행) 등의 서비스 존재
3. CAN 진단 메시지 프레임
CAN 진단 메시지는 일반적으로 **ISO-TP (ISO 15765-2: Transport Protocol)**을 사용하여 데이터 길이를 확장한다.
3.1 ISO-TP (ISO 15765-2) 메시지 구조
ISO-TP는 8바이트 이상의 데이터를 CAN을 통해 송수신할 수 있도록 한다.
- Single Frame (SF) : 1~7 바이트 데이터 전송 (0x0X)
- First Frame (FF) : 8바이트 이상의 데이터 전송 시작 (0x1X)
- Consecutive Frame (CF) : 다중 프레임 전송 (0x2X)
- Flow Control Frame (FC) : 수신 상태 응답 (0x3X)
예제: 10바이트 데이터 전송
- 송신 (ECU → 진단기)
- 10 0A 22 F1 90 11 22 33 44 (First Frame, 전체 길이 10바이트) 21 55 66 77 88 99 AA BB CC (Consecutive Frame)
- 수신 (진단기 → ECU)
- 30 00 00 (Flow Control Frame, 계속 전송하라는 응답)
4. CAN 진단통신의 활용
4.1 DTC (Diagnostic Trouble Code)
DTC는 차량의 오류 코드로, UDS의 0x19 명령으로 조회 가능하다.
예제: DTC 조회
- 요청: 19 02 (현재 저장된 DTC 요청)
- 응답: 59 02 02 07 E8 03 01 0F (DTC 코드 07E8, 0301, 0F 반환)
4.2 ECU Flashing
ECU 소프트웨어를 업데이트하려면 UDS의 Request Download (0x34) 및 Transfer Data (0x36) 명령을 사용한다.
- Programming Session 전환 (0x10 03)
- 보안 해제 (0x27 01 → 0x27 02)
- Request Download (0x34)
- Transfer Data (0x36)
- Request Transfer Exit (0x37)
- ECU Reset (0x11 01)
5. 결론
CAN 기반 진단통신은 차량의 유지보수, 성능 모니터링, 그리고 ECU 업데이트를 위해 필수적인 기능이다. OBD-II는 주로 일반적인 차량 진단에, UDS는 정밀한 ECU 제어 및 소프트웨어 업데이트에, ISO-TP는 긴 데이터 전송을 지원하는 역할을 한다.
🚗✨ UDS 기반 CAN 진단통신을 활용하면 차량의 문제를 정확히 진단하고, 필요한 설정을 변경하거나 ECU 소프트웨어를 업데이트할 수 있다!
'Programming > CANoe' 카테고리의 다른 글
UDS의 Extended CAN ID란? (0) | 2025.02.16 |
---|---|
UDS(Unified Diagnostic Services)란? (0) | 2025.02.16 |
CANoe CAN/CANFD 진단통신 전송 1: 환경 구성 (0) | 2025.02.08 |
CANoe의 ACK설정에 대해서 (0) | 2025.02.08 |
CAN 통신이란? (0) | 2025.02.08 |