본문 바로가기
DSP, MCU/펌웨어

UDS (차량용 진단 통신)

by eteo 2023. 6. 9.

UDS (차량용 진단 통신)

 

 

 

What is UDS?

 

UDS란 Unified Diagnostic Services의 약자로 차량의 전자제어장치(ECU, Electronic Control Units)들 간에 진단, 펌웨어 업데이트, 테스트 목적의 통신에 사용되는 프로토콜이다.

 

주로 CAN(Controller Area Network) 버스를 통해 CAN 메시지형식으로 통신하는것이 일반적이지만 UDSonLIN, UDSonIP(UDS) 등 여러 Variation이 있다.

 

UDS는 요청기반(Request based) 프로토콜로 클라이언트-서버 관계에서 수행되며 테스터 툴이 클라이언트가 되고, ECU가 서버가 된다. 실제로 차에 있는 OBD2 커넥터를 통해 CAN bus 인터페이스에 연결하고 UDS request를 송신하면, 타겟 ECU가 UDS service를 지원하는 경우 응답이 올것이다.

 

 

 

 

 

 

Message Struct

 

아래는 UDS request frame의 예시이다. 필드별로 살펴보자.

 

 

 

 

 

1. PCI (Protocol Control Information)

 

PCI 필드는 UDS 자체와는 관련이 없지만, 단일 CAN frame에 들어가지 않는 대용량 payload를 가진 UDS 메시지의 흐름제어와 관련된 정보를 포함하고 있다.

(참고글 : 2023.05.31 - [DSP, MCU/펌웨어공부] - CAN ISO-TP)

 

PCI 필드는 1~3 byte를 차지할 수 있다.

 

 

 

 

 

 

 

2. SID (Service ID)

 

UDS 서비스와 식별자(SID)는 ISO(국제 표준화 기구)에서 정의된 표준인 ISO 14229-1에 의해 정의되어있다. 그리고 UDS 메시지 payload에는 이런 SID와 SID와 관련된 파라미터들이 포함된다.

 

SID 필드에는 request SID 또는 Response SID가 올 수 있는데, Positive response SID는 request SID에 0x40을 더하고 Negative Response SID는 항상 0x7F이다.

 

 

 

UDS SID 목록 : https://en.wikipedia.org/wiki/Unified_Diagnostic_Services

 

 

 

 

 

 

 

 

3. Sub Function Byte

 

Sub function byte는 UDS request frame의 optional 필드로 일부 서비스에만 사용된다.

 

Sub function byte 중에서도 bit 7은 positive response를 suppress하기 위해 사용되는데, 테스터가 굳이 긍정응답을 들을 필요가 없는 경우 해당 bit을 set하면 ECU가 긍정응답을 하지 않는다. 단, ECU의 부정응답은 suppress할 수 없다.

 

그리고 0~127까지의 나머지 7 bits는 SID의 sub function 을 정의하기위한 용도로 사용된다.

 

 

 

Sub function byte 필드가 있는 서비스 목록

 

 

 

 

 

 

예를들어 SID 0x19(Read DTC(Diagnostic Trouble Codes) Information)를 요청하는 경우 Report type을 지정하기 위해 아래 sub function byte를 사용할 수 있다.

 

 

SID 0x19 의 sub function byte value와 type

 

 

 

 

 

Suppress Positive Response Message Indication Bit (SPRMIB) 추가설명 : 

https://www.linkedin.com/pulse/suppress-positive-response-message-indication-bit-sprmib-vivek-maurya

 

  • When bit 7 is ‘1’: ECU will not send the positive response to client (i.e., Suppression of positive response) 
  • When bit 7 is ‘0’: ECU will send the positive response to client (i.e., No suppression of positive response)

 

 

 

 

 

 

 

 

4. DID (Data Identifier) - Request Data Parameters

 

대부분의 UDS 서비스는 SID와 Sub function byte 이외에도 구체적인 요청을 하기위해 DID 필드가 존재하며 다양한 Request data parameters가 올 수 있다.

 

예를들어 SID가 0x19(Read DTC(Diagnostic Trouble Codes) Information)이고 Sub function byte가 0x02(DTC by Status Mask)인 경우 뒤이어 1 byte의 Status Mask가 따라온다.

 

다른 예로 SID가 0x22(Read Data by Identifier)인 경우 뒤이어서 0~65535 사이의 2 byte DID가 따른다. 이런 DID는 WWH-OBD(World Wide Harmonization On-Board Diagnostics)로 일부 표준화되어있고 일부는 제조사에서 전용으로 사용해 알려지지 않은 것들도 있다. 또한 여러 DID를 붙여 보내서 여러 데이터를 요청하는 것도 가능하다.

 

예를들어 ECU의 Vehicle Identification Number(VIN)를 읽기 위해서는 0x22 다음에 0xF190이 온다. 

 

 

 

표준화된 서비스 0x22의 DID 목록

 

 

 

 

 

 

 

 

 

 

 

Positive vs Negative responses

 

UDS 요청에 ECU가 긍정적으로 응답하는 경우 Response frame은 서비스에 따라 그 구조가 다양할 수 있다.

예를들어 SID 0x22에 대한 Positive response frame은 먼저 SID는 0x62 (0x22 + 0x40)이고 이어서 2 byte의 요청 DID가 오고 그 뒤로는 요청된 DID에 대한 실제 data payload가 이어질 것이다.

 

반면, 해당 서비스가 ECU에 의해 지원되지 않거나 오류가 있어 부정적으로 응답하는 경우의 Response frame은 그 구조가 아래와 같이 정형화되어 있다.

 

 

Negative Response frame의 예시

 

먼저 Single Frame(SF)에 뒤따르는 데이터가 3byte임을 의미하는 PCI 0x03,

Negative Response SID를 뜻하는 0x7F,

그 다음에는 Rejected SID인 0x22,

 

그리고 Cause of Rejection 정보를 제공하는 1 byte NRC(Negative Response Code)가 온다.

 

나머지 바이트는 0xAA로 패딩된다.

 

 

 

SID 0x7F의 NRC(Negative Response Code) 목록

 

 

 

 

 

 

 

 

Communication Example

 

 

 

위 communication flow는 테스터가 차량속도 정보를 요청하고 ECU가 차량속도는 50km/h 라고 응답한 메시지이다. 내용을 breakdown하면 다음과 같다.

 

 

Request frame

  • The 1st byte : PCI field, 0x03
    • Initial 4 bits of PCI : Frame type, 0x0, Single frame
    • The next 4 bits of PCI : Data size, 0x3, 3 bytes
  • The 2nd byte : SID, 0x22, Read data by identifier
  • The 3rd-4th byte : DID : 0xF40D, Vehicle speed
  • The remaining bytes :padded with 0xAA

 

Response frame

  • The 1st byte : PCI field, 0x04
    • Initial 4 bits of PCI : Frame type, 0x0, Single frame
    • The next 4 bits of PCI : Data size, 0x4, 4 bytes
  • The 2nd byte : SID, 0x62, Positive Response to 0x22
  • The 3rd-4th byte : DID : 0xF40D, Vehicle speed
  • The 5th byte : 0x32, Vehicle speed data
  • The remaining bytes :padded with 0xAA

 

 

 

 

 

Reference :

https://www.csselectronics.com/pages/uds-protocol-tutorial-unified-diagnostic-services#uds-message-structure

https://www.linkedin.com/pulse/suppress-positive-response-message-indication-bit-sprmib-vivek-maurya

'DSP, MCU > 펌웨어' 카테고리의 다른 글

JTAG, SWD  (0) 2023.06.25
PXI  (0) 2023.06.25
CAN ISO-TP  (2) 2023.05.31
ARINC-429 Word Format  (0) 2023.05.31
ARINC-429 Protocol  (0) 2023.05.31