진단 테스터가 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/Network | Data Link | Physical |
|---|---|---|---|
| CAN 위(DoCAN) | ISO-TP(ISO 15765-2) | ISO 11898-1 | ISO 11898 Part 2·3 |
| FlexRay 위 | ISO 10681-2 | ISO 17458-2 | ISO 17458-4 |
| IP 위(DoIP) | ISO 13400-2 | ISO 13400-3 + IEEE 802.3 | 유선 이더넷 물리 계층 |
| K-Line 위 | 해당 없음 | ISO 14230-2 | ISO 14230-1 |
| LIN 위 | ISO 17987-2 | ISO 17987-3 | ISO 17987-4 |
진단 서비스 분류
ISO 14229-1은 진단 서비스를 6개 functional unit으로 묶어 규정하고, 서비스마다 고유한 SID(Service Identifier)를 부여한다[1]:
| Functional Unit | 서비스(SID) |
|---|---|
| Diagnostic and Communication Management | DiagnosticSessionControl(0x10), ECUReset(0x11), SecurityAccess(0x27), CommunicationControl(0x28), TesterPresent(0x3E), ControlDTCSetting(0x85), ResponseOnEvent(0x86), LinkControl(0x87) |
| Data Transmission | ReadDataByIdentifier(0x22), ReadMemoryByAddress(0x23), ReadScalingDataByIdentifier(0x24), ReadDataByPeriodicIdentifier(0x2A), DynamicallyDefineDataIdentifier(0x2C), WriteDataByIdentifier(0x2E), WriteMemoryByAddress(0x3D) |
| Stored Data Transmission | ClearDiagnosticInformation(0x14), ReadDTCInformation(0x19) |
| InputOutput Control | InputOutputControlByIdentifier(0x2F) |
| Routine | RoutineControl(0x31) |
| Upload Download | RequestDownload(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에서 다룬다.