그라운드 임베디드 유튜브 구독

노트 / 자동차 소프트웨어

진단 통신: UDS로 고장 코드 읽고 업데이트하기

정비소 진단기가 ECU와 대화하는 표준 UDS. 서비스 ID, 고장 코드(DTC), 세션과 보안 접근, 펌웨어 플래싱.

GROUND EMBEDDED · 정리 노트자동차 SW 04진단 통신SID서비스용도0x10진단 세션 제어기본 / 확장 / 프로그…0x11ECU 리셋

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 등)와 함께 발생 당시 조건(프리즈 프레임)을 비휘발성 메모리에 저장합니다. 고장 감지 조건, 확정 조건, 해제 조건을 정의하는 것이 진단 기능 개발의 핵심입니다.

플래싱 순서

프로그래밍 세션 진입 → 보안 접근 → 메모리 지우기 루틴 → 다운로드 → 검증 루틴 → 리셋. 부트로더가 이 시퀀스를 처리합니다.