모빌리티 AI

자동차 SW - UDS 진단 통신

doorooeds 2025. 4. 22. 13:48

 

1. UDS란 무엇인가?

  • UDS(Unified Diagnostic Services)는 ISO 14229 표준에 정의된 진단 통신 프로토콜로, 자동차 ECU의 진단 기능을 표준화된 방식으로 수행할 수 있도록 설계되었습니다.
  • UDS는 CAN, CAN-FD, Ethernet(DoIP)와 같은 통신 프로토콜 위에서 동작하며, ECU의 상태를 모니터링하고 오류 코드를 관리하며, 펌웨어 업데이트와 같은 작업을 지원합니다.
  • UDS는 요청기반(Request based) 프로토콜로 클라이언트-서버 관계에서 수행되며 테스터 툴이 클라이언트가 되고, ECU가 서버가 됩니다.

2. UDS 진단 서비스를 활용한 테스트 케이스 설계

UDS 검증을 위해서는 ECU가 제공하는 진단 서비스가 올바르게 동작하는지 확인하는 테스트 케이스(Test Case, TC)를 설계해야 합니다.

2.1 TC 1 : 진단 세션 제어 (Diagnostic Session Control, SID 0x10)

1) 목적 : ECU가 기본 세션에서 확장 세션으로 전환하는 기능을 검증

2) 테스트 시나리오 :

  • ECU가 기본 세션(Default Session)에 있는 상태에서 시작
  • 테스터가 확장 세션(Extended Diagnostic Session)으로 전환 요청(SID 0x10, Sub-function 0x02)을 전송
  • ECU가 확장 세션으로 전환하고 긍정 응답(Positive Response)을 반환하는지 확인
  • 잘못된 서브펑션(예: 0xFF)을 전송했을 때 네거티브 응답(NRC, 예: 0x12 - SubFunctionNotSupported)이 반환되는지 확인

3) 기대 결과 :

  • 확장 세션 전환 성공 시: 응답 메시지 = 0x50 0x02
  • 잘못된 요청 시: NRC = 0x12

2.2 TC 2 : 데이터 읽기 (Read Data by Identifier, SID 0x22)

1) 목적 : ECU가 특정 데이터(예: 차량 속도)를 반환하는지 검증

2) 테스트 시나리오 :

  • 테스터가 차량 속도 DID(Data Identifier, 예: 0xF190) 읽기 요청(SID 0x22)을 전송
  • ECU가 현재 차량 속도(예: 60 km/h)를 반환하는지 확인
  • 잘못된 DID(예: 0xFFFF)를 요청했을 때 네거티브 응답(NRC, 예: 0x31 - RequestOutOfRange)이 반환되는지 확인

3) 기대 결과 :

  • 올바른 DID 요청 시: 응답 메시지에 속도 데이터 포함(예: 0x62 0xF190 0x003C)
  • 잘못된 DID 요청 시: NRC = 0x31

3. 테스트 케이스 작성 예시

테스트 ID
테스트 유형
설명
요구사항 ID
사전 조건
입력값
실행 절차
기대 결과
TC_UDS_001
기능 테스트
ECU에서 DTC 읽기 검증
REQ_001
1. ECU가 Default Session(0x01) 상태
2. CAN 버스 연결(500 kbps)
3. 전원 공급 정상
1. [0x02, 0x19, 0x02, 0xFF]
1. CANoe에서 ECU로 요청 전송
2. 응답 메시지 수신
3. DTC 값 확인
4. 로그 저장
1. [0x06, 0x59, 0x02, 0x01, 0xP0, 0x10] (DTC P0100 반환)
2. 응답 시간 < 100ms
TC_UDS_002
상태 전이 테스트
Extended Session 전환 검증
REQ_002
1. ECU가 Default Session(0x01) 상태2. CAN 버스 연결(500 kbps)
3. ECU 응답 가능 상태
1. [0x02, 0x10, 0x03]
1. CANoe에서 요청 전송
2. 응답 수신
3. 세션 상태 확인(SID 0x10으로 재확인 가능)
4. 로그 기록
1. [0x02, 0x50, 0x03] (Extended Session 전환 성공)
2. 응답 시간 < 50ms
TC_UDS_003
오류 처리 테스트
잘못된 SID 요청 시 부정 응답
REQ_003
1. ECU가 Default Session(0x01) 상태2. CAN 버스 연결(500 kbps)
3. ECU 정상 동작
1. [0x02, 0xFF, 0x01]
1. 잘못된 SID 요청 전송
2. 응답 메시지 수신
3. 오류 코드 확인
4. 로그 저장
1. [0x03, 0x7F, 0xFF, 0x11] (서비스 미지원 에러)
2. 응답 시간 < 100ms
TC_UDS_004
데이터 읽기 테스트
실시간 데이터(PID) 읽기 검증
REQ_004
1. ECU가 Default Session(0x01) 상태2. CAN 버스 연결(500 kbps)
3. 엔진 RPM 데이터 사용 가능
1. [0x03, 0x22, 0xF4, 0x0C]
1. CANoe에서 요청 전송
2. 응답 메시지 수신
3. RPM 값 확인
4. 로그 저장
1. [0x05, 0x62, 0xF4, 0x0C, 0x07, 0xD0] (RPM 2000 반환, 16진수 0x07D0)
2. 응답 시간 < 50ms
TC_UDS_005
보안 테스트
보안 접근(Security Access) 검증
REQ_005
1. ECU가 Extended Session(0x03) 상태
2. CAN 버스 연결(500 kbps)
3. Seed 요청 가능
1. [0x02, 0x27, 0x01]
1. Seed 요청 전송
2. Seed 응답 수신
3. Key 계산 후 전송
4. 응답 확인
1. [0x04, 0x67, 0x01, 0x12, 0x34] (Seed 반환 예시)
2. Key 요청 후 [0x02, 0x67, 0x02] (성공)

4. UDS 환경 설정

4.1 CANoe 하드웨어 준비

  • CAN 인터페이스 : Vector VN 시리즈(예: VN1640, VN5610)와 같은 CAN 인터페이스를 PC에 연결
  • ECU 연결 : 테스트 대상 ECU를 CAN 버스에 연결(예: CAN High - 핀 6, CAN Low - 핀 14, OBD-II 포트 기준)
  • 배선 : CAN 버스 속도(예: 500 kbps)와 터미네이션 저항(120Ω)이 올바르게 설정되었는지 확인
  • 전원 : ECU와 인터페이스에 안정적인 전원 공급(12V 또는 24V, 차량 배터리 또는 전원 공급 장치)

4.2 CANoe 소프트웨어 설정

1) 프로젝트 생성 :

  • CANoe 실행 후 "File > New Configuration" 선택
  • 네트워크 유형으로 CAN 선택(예: CAN 1)

2) 네트워크 구성 :

  • Configuration 창에서 "Network Hardware"로 이동
  • 사용 중인 CAN 채널(예: Channel 1)을 VN 인터페이스에 매핑
  • Baud Rate 설정(예: 500 kbps)

3) 진단 설정 :

  • "Diagnostics/ISO TP" 노드 추가: Simulation Setup에서 우클릭 > "Insert Network Node" > "Diagnostics/ISO TP" 선택
  • ECU의 물리적 주소(예: 0x7E0)와 응답 주소(예: 0x7E8)를 입력
  • .CDD 파일 임포트 : "Diagnostics Configuration"에서 ECU의 진단 사양이 담긴 CANdela 파일을 로드

4) 시뮬레이션 설정 저장 :

  • "File > Save As"로 설정 저장(예: UDS_Test.cfg)

5. UDS 검증 수행 방법

CANoe의 CAPL(CAN Access Programming Language)을 사용하여 테스트 케이스를 자동화합니다.

5.1 CAPL 스크립트 작성(예시)

5.2 테스트 실행 및 결과 분석

1) 테스트 실행 :

  • CANoe에서 CAPL 스크립트를 실행하고, ECU와의 통신을 시작합니다.
  • 각 테스트 케이스에 대해 UDS 요청을 전송하고 응답을 수신합니다.

2) 결과 분석 :

  • CANoe의 Trace 창에서 요청과 응답 메시지를 확인합니다.
  • 예: TC 1에서 응답이 0x50 0x02인지 확인
  • 응답 시간(P2Server_max)과 네거티브 응답(NRC)이 요구사항에 맞는지 검증합니다.

3) 로그 저장 :

  • 테스트 결과를 로그 파일로 저장하여 추후 분석에 활용합니다.

6. 결론

UDS 검증은 자동차 제어기 개발에서 ECU의 진단 기능이 신뢰성 있게 동작하는지 확인하는 필수적인 과정입니다. 이번 글에서는 UDS의 기본 개념을 시작으로, 진단 서비스를 활용한 테스트 케이스를 설계하고, Vector CANoe를 사용하여 실제 검증하는 방법을 살펴보았습니다.