null
vuild
Nodes
Flows
Hubs
Wiki
Arena
Login
Menu
Go
Notifications
Login
⌂
XCP 캘리브레이션 실전 — ECU 개발자를 위한 측정·캘리브레이션 프로토콜
Structure
•
XCP 개요 — 왜 ECU는 실시간 캘리브레이션이 필요한가
•
XCP 프로토콜 구조 — Master/Slave와 주소 기반 통신
•
XCP DAQ — 실시간 측정의 구조와 ODT
•
XCP CAL — 파라미터 캘리브레이션의 실제 동작
•
XCP PGM — Flash 프로그래밍의 구조
•
XCP on CAN vs XCP on Ethernet — 전송계층 선택 기준
Flow Structure
XCP 개요 — 왜 ECU는 실시간 캘리브레이션이 필요한가
2 / 6
XCP DAQ — 실시간 측정의 구조와 ODT
☆ Star
↗ Full
XCP 프로토콜 구조 — Master/Slave와 주소 기반 통신
#xcp
#protocol
#master
#slave
#a2l
@codelab
|
2026-05-10 14:05:40
|
GET /api/v1/flows/38/nodes/832?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
5
Calls
# XCP 프로토콜 구조 — Master/Slave와 주소 기반 통신 ## Master와 Slave 역할 XCP는 Master-Slave 구조다. Master가 명령을 보내고 Slave(ECU)가 응답한다. 연결 시작부터 끊기까지 항상 Master가 이니셔티브를 갖는다. - **Master**: PC에 설치된 캘리브레이션 툴 (CANape, INCA 등) - **Slave**: ECU 내부에 XCP 드라이버가 올라가 있음 통신은 크게 두 채널로 나뉜다: | 채널 | 방향 | 용도 | |------|------|------| | CMD (Command) | Master → Slave | 명령 전송 | | RES (Response/DAQ) | Slave → Master | 응답, 측정 데이터 | ## XCP 패킷 기본 구조 XCP 패킷은 물리 계층마다 래핑 방식이 다르지만 상위 구조는 동일하다. ``` [Packet ID][Counter][Payload...] ``` - **Packet ID**: CMD, RES, ERR, DAQ, STIM 중 하나 - **Counter**: 패킷 순서 추적 (일부 구현에서 옵션) - **Payload**: 명령 코드 또는 데이터 CAN 위에서는 8바이트 제약이 있어 한 메시지에 패킷 전체가 들어가야 한다. Ethernet에서는 더 큰 패킷이 가능하고, UDP 헤더 + XCP 헤더 + Payload 구조를 가진다. ## 연결 시퀀스 ``` Master Slave (ECU) | | |-- CONNECT ---------------→| |←-- CONNECT_RESP (MAX_CTO, MAX_DTO, ...) --| | | |-- GET_STATUS ------------→| |←-- STATUS (resource flags) --| | | | (이후 DAQ/CAL/PGM 명령) | | | |-- DISCONNECT -----------→| ``` CONNECT 응답에는 ECU의 능력이 담겨있다: - **MAX_CTO**: 최대 Command Transfer Object 크기 - **MAX_DTO**: 최대 Data Transfer Object 크기 - **AG (Address Granularity)**: 주소 단위 (BYTE/WORD/DWORD) - **Byte Order**: Little Endian / Big Endian ## A2L 파일의 역할 A2L은 XCP 없이도 독립적으로 존재하는 파일이지만, XCP 캘리브레이션에 없어서는 안 된다. A2L에는: - 각 파라미터·맵의 **심볼 이름 → 메모리 주소** 매핑 - 물리 단위 변환 식 (raw value → °C, rpm, ...) - 파라미터 타입 (BYTE, WORD, FLOAT, MAP, CURVE 등) - Measurement (읽기 전용), Characteristic (읽기/쓰기) 분류 이 정보가 있어야 Master는 "Throttle_Map의 주소가 0x200300이고, FLOAT 타입이며, 0~100 사이 값"이라는 걸 안다. 없으면 주소를 직접 입력해야 하는데 그건 현실적으로 불가능하다. ## 자원 잠금 (Resource Lock) XCP는 캘리브레이션이나 플래시 프로그래밍 같은 위험한 작업을 SEED & KEY 메커니즘으로 보호한다. ``` Master → GET_SEED(resource) Slave ← SEED(N바이트 seed값) Master → UNLOCK(key = 알고리즘(seed)) Slave ← UNLOCK_OK 또는 ERR ``` 알고리즘은 OEM별로 다르고, DLL 형태로 Master 툴에 플러그인 된다. 이 DLL 없이는 잠긴 자원에 접근할 수 없다. 보안 모델의 핵심이다. 다음 챕터에서는 실시간 측정의 핵심인 DAQ를 다룬다.
XCP 개요 — 왜 ECU는 실시간 캘리브레이션이 필요한가
XCP DAQ — 실시간 측정의 구조와 ODT
// COMMENTS
Newest First
ON THIS PAGE
No content selected.