진단 테스터가 ECU의 진단 기능을 표준화된 방식으로 제어하려면, 요청·응답의 의미와 형식을 미리 정한 통신규약이 있어야 한다. UDS(Unified Diagnostic Service)는 이 통신을 client-server 구조로 규정한다 — 진단 테스터가 client로서 요청(Request)을 보내고, ECU가 server로서 응답(Response)을 돌려준다[1]. ISO 14229로 표준화되어 있다.

계층 구조

ISO 14229는 어떤 네트워크 위에서 동작하든 공통되는 상위 계층만 규정하고, 그 아래는 실제로 얹히는 네트워크에 맡긴다. Part 1(이 페이지가 다루는 Application layer 명세), Part 2(Session layer services — Part 1이 여러 전송 프로토콜 위에서 동일하게 동작하도록 세션 계층에서 독립성을 제공), Part 3~7(UDSonCAN·UDSonFR·UDSonIP·UDSonK-Line·UDSonLIN — 각 네트워크 위에서 Part 1을 구현하는 하위 표준)로 나뉜다[1]:

OSI 계층규정
Application(7)ISO 14229-1(공통 서비스) + 프로토콜별 구현(ISO 14229-3~7)
Presentation(6)차량 제조사 개별 규정
Session(5)ISO 14229-2 — 전송 계층과 무관하게 공통

Application~Session과 달리 Transport 계층부터는 아래에 얹히는 네트워크마다 규정이 갈린다[1]:

진단 통신 경로Transport/NetworkData LinkPhysical
CAN 위(DoCAN)ISO-TP(ISO 15765-2)ISO 11898-1ISO 11898 Part 2·3
FlexRayISO 10681-2ISO 17458-2ISO 17458-4
IP 위(DoIP)ISO 13400-2ISO 13400-3 + IEEE 802.3유선 이더넷 물리 계층
K-Line 위해당 없음ISO 14230-2ISO 14230-1
LINISO 17987-2ISO 17987-3ISO 17987-4

진단 서비스 분류

ISO 14229-1은 진단 서비스를 6개 functional unit으로 묶어 규정하고, 서비스마다 고유한 SID(Service Identifier)를 부여한다[1]:

Functional Unit서비스(SID)
Diagnostic and Communication ManagementDiagnosticSessionControl(0x10), ECUReset(0x11), SecurityAccess(0x27), CommunicationControl(0x28), TesterPresent(0x3E), ControlDTCSetting(0x85), ResponseOnEvent(0x86), LinkControl(0x87)
Data TransmissionReadDataByIdentifier(0x22), ReadMemoryByAddress(0x23), ReadScalingDataByIdentifier(0x24), ReadDataByPeriodicIdentifier(0x2A), DynamicallyDefineDataIdentifier(0x2C), WriteDataByIdentifier(0x2E), WriteMemoryByAddress(0x3D)
Stored Data TransmissionClearDiagnosticInformation(0x14), ReadDTCInformation(0x19)
InputOutput ControlInputOutputControlByIdentifier(0x2F)
RoutineRoutineControl(0x31)
Upload DownloadRequestDownload(0x34), RequestUpload(0x35), TransferData(0x36), RequestTransferExit(0x37), RequestFileTransfer(0x38)

이 가운데 세션 자체를 전환하는 DiagnosticSessionControl(0x10)은 sub-function 파라미터로 세션 종류를 지정한다 — Default Session(0x01), Programming Session(0x02), Extended Diagnostic Session(0x03), Safety System Diagnostic Session(0x04) 네 가지가 표준화되어 있다[2].

Tip

UDS의 모든 서비스는 긍정 응답(Positive Response)의 SID로 요청 SID에 0x40을 더한 값을 쓴다 — 예를 들어 DiagnosticSessionControl(0x10) 요청에는 0x50으로, ReadDataByPeriodicIdentifier(0x2A) 요청에는 0x6A로 응답한다[2].

이 요청·응답 메시지가 실제로 몇 바이트짜리 프레임에 실려 나가는지는 아래에 얹히는 네트워크가 정한다 — CAN 위에서 하나의 프레임(최대 8바이트)을 넘는 진단 메시지를 여러 프레임으로 나눠 보내는 절차는 ISO-TP에서 다룬다.

참고문헌

[1]
ISO, “ISO 14229-1:2020 — Road vehicles — Unified diagnostic services (UDS) — Part 1: Application layer”, 2020.
[2]
Softing Automotive Electronics GmbH, “UDS – Unified Diagnostic Services – ISO 14229”. 2016. [Online]. Available at: https://automotive.softing.com/fileadmin/sof-files/pdf/de/ae/poster/UDS_Faltposter_softing2016.pdf