진단 통신: UDS로 고장 코드 읽고 업데이트하기
정비소 진단기가 ECU와 대화하는 표준 UDS. 서비스 ID, 고장 코드(DTC), 세션과 보안 접근, 펌웨어 플래싱.
UDS (ISO 14229)
진단기가 요청을 보내고 ECU가 응답합니다. 요청의 첫 바이트가 서비스 ID입니다.
| SID | 서비스 | 용도 |
|---|---|---|
| 0x10 | 진단 세션 제어 | 기본 / 확장 / 프로그래밍 세션 전환 |
| 0x11 | ECU 리셋 | |
| 0x14 | DTC 지우기 | |
| 0x19 | DTC 읽기 | 고장 코드와 발생 조건 |
| 0x22 / 0x2E | 데이터 읽기 / 쓰기 (DID) | 버전, VIN, 보정값 |
| 0x27 | 보안 접근 | 시드-키 인증 |
| 0x31 | 루틴 제어 | 자가 진단, 메모리 지우기 |
| 0x34 / 0x36 / 0x37 | 다운로드 요청 / 전송 / 종료 | 펌웨어 플래싱 |
긍정 응답은 SID + 0x40(예: 0x22 → 0x62), 부정 응답은 0x7F + SID + 이유 코드입니다.
전송 계층
UDS 메시지는 CAN 8바이트보다 길 수 있어서 ISO-TP(ISO 15765-2)가 여러 프레임으로 나누고 흐름을 제어합니다. 이더넷에서는 DoIP를 씁니다.
DTC
ECU가 고장을 감지하면 고장 코드(P0xxx 등)와 함께 발생 당시 조건(프리즈 프레임)을 비휘발성 메모리에 저장합니다. 고장 감지 조건, 확정 조건, 해제 조건을 정의하는 것이 진단 기능 개발의 핵심입니다.
플래싱 순서
프로그래밍 세션 진입 → 보안 접근 → 메모리 지우기 루틴 → 다운로드 → 검증 루틴 → 리셋. 부트로더가 이 시퀀스를 처리합니다.