CTO 는 XCP 마스터에서 슬레이브로 명령을 보내거나, 슬레이브에서 마스터로 응답을 보낼 때 사용한다.
이러한 명령 및 응답에 관한 XCP 구조는 다음과 같다.
명령어 (CMD)
위치 | 종류 | 설명 |
0 | BYTE | Command Packet Code CMD |
1 ... MAX_CTO-1 | BYTE | Command specific parameter |
각 명령어에는 고유번호가 할당된다.
명령어와 함꼐 다른 특정 파라미터를 보낼 수 있다.
파라미터의 최대 수는 MAX_CTO-1 로 정의된다. (MAX_CTE; CTO 패킷의 최대 길이)
긍정적 응답 (RES)
위치 | 종류 | 설명 |
0 | BYTE | Command Positive Response Packet Code = RES : 0xFF |
1 ... MAX_CTO-1 | BYTE | Command specific parameter |
부정적 응답 (ERR)
위치 | 종류 | 설명 |
0 | BYTE | Error Packet Code = 0xFE |
1 | BYTE | Error code |
2 ... MAX_CTO-1 | BYTE | Command specific parameter |
특정 파라미터를 긍정적 응답 뿐 아니라, 부정적 응답과 함께 보조 정보로 전송할 수 도 있다.
예로, 마스터와 슬레이브 간 Point to Point 접속을 만들기 위해서는 다음과 같이 통신한다.
마스터 → 슬레이브 : Connection CMD
마스터 ← 슬레이브 : RES
마스터 → 슬레이브 : Connection CMD 구조
위치 | 종류 | 설명 |
0 | BYTE | Command Code = 0xFF |
1 | BYTE | Mode 0x00 = Normal 0x01 = User Defined |
Mode 0x00 은 마스터가 슬레이브와 XCP 통신을 원한다는 요청을 의미하고
Mode 0x01 은 마스터가 슬레이브에 XCP 통신을 요청하고 사용자 정의 모드로 전환할 것을 통지하는 것을 의미한다.
마스터 ← 슬레이브 : RES
위치 | 종류 | 설명 |
0 | BYTE | Packet ID : 0xFF → RES |
1 | BYTE | RESOURCE |
2 | BYTE | COMM_MODE_BASIC |
3 | BYTE | MAX_CTO, Maximum CTO size <<BYTE>> |
4 | WORD | MAX_DTO, Maximum DTO size <<BYTE>> |
6 | BYTE | XCP Protocol Layer Version Number(가장 중요한 바이트만) |
7 | BYTE | XCP Transport Layer Version Number(가장 중요한 바이트만) |
슬레이브의 긍정적 응답에는 좀 더 광범위한 형태를 가정하고 있다.
슬레이브는 Connection을 맺을 때, 이미 마스터로 통신에 특정한 정보를 보냈다.
RESOURCE는 슬레이브가 페이지 스위칭과 같은 기능을 지원하는지, XCP를 통해 플래싱이 가능한지 등의 정보를 제공한다.
슬레이브는 MAX_DTO를 사용하여 측정값 전송시 지원이 가능한 최대 패킷 길이 등을 마스터에 보낸다.
마스터와 슬레이브 사이에 명령어(CMD)와 반응(RES)을 교환하는 세 가지 모드(표준, 블록, 인터리브)
Standard Mode : 슬레이브로 보내는 각각의 요청에 하나의 응답이 전달된다. (XCP on CAN을 제외하면, 마스터에서 보낸 하나의 명령에 여러 슬레이브가 RES 하는 것을 허용하지 않는다.)
Block Mode : 대규모 전송시(업로드나 다운로드) 시간을 절약할 수 있다. 하지만 슬레이브의 성능 문제를 고려해야 한다. ( 두 명령어 사이의 최소시간 MIN_ST, 총 명령어수 상한 MAX_BT ) 마스터는 GET_COMM_MODE_INFO를 통해 슬레이브에서 통신 설정값을 읽어올 수 있다. (마스터 성능은 고려하지 않는게, PC 성능이 마이크로 컨트롤러보다 높다.)
Interleaved Mode : Block Mode와 마찬가지로 성능상 이유로 제공된다. >> 실제 적용에는 적합하지 않다.
CMD
XCP 마스터는 CMD를 통해 슬레이브에 일반적인 요청사항을 보낸다.
TIMESTAMP FIELD는 사용하지 않는다.
IF_DATA라는 CMD를 통해 마스터는 A2L 파일의 정의와 슬레이브에서 명령어를 지원하는지에 대한 확인을 할 수 있다.
슬레이브에서 지원하지 않는 명령어인 경우, 슬레이브에서 ERR_CMD_UNKNOWN을 보낸다.
XCP 표준 Spec 에서는 CMD를 표준 명령어나, 캘리브레이션, 페이지, 프로그래밍, DAQ 측정 명령어 등 그룹으로 구성한다.
각 명령어 그룹에는 필수(Essential)와 선택(Optional)으로 구현되어야 하는 명령어 들이 존재한다.
예를 들면, 페이지 스위칭 명령어 그룹의 SET_CAL_PAGE 와 GET_CAL_PAGE 명령은 필수 명령어이다. → 페이지 스위칭을 지원하는 XCP 슬레이브에는 최소 SET_CAL_PAGE, GET_CAL_PAGE 명령이 필요하다는 것을 의미한다.
Optional 한 명령어의 경우 구현하지 않아도 되며, 슬레이브에서 명령어 그룹 자체가 필요하지 않는 기능이라면 구현하지 않아도 된다. (필수명령어들의 경우)
그룹 별 명령어들은 다음과 같다.
표준 명령어
명령어 | PID | 필수 여부 |
CONNECT | 0xFF | Y |
DISCONNECT | 0xFE | Y |
GET_STATUS | 0xFD | Y |
SYNCH | 0xFC | Y |
GET_COMM_MODE_INFO | 0xFB | N |
GET_ID | 0xFA | N |
SET_REQUEST | 0xF9 | N |
GET_SEED | 0xF8 | N |
UNLOCK | 0xF7 | N |
SET_MTA | 0xF6 | N |
UPLOAD | 0xF5 | N |
SHORT_UPLOAD | 0xF4 | N |
BUILD_CHECKSUM | 0xF3 | N |
TRANSPORT_LAYER_CMD | 0xF2 | N |
USER_CMD | 0xF1 | N |
캘리브레이션 명령어
명령어 | PID | 필수여부 |
DOWNLOAD | 0xF0 | Y |
DOWNLOAD_NEXT | 0xEF | N |
DOWNLOAD_MAX | 0xEE | N |
SHORT_DOWNLOAD | 0xED | N |
MODIFY_BITS | 0xEC | N |
페이지 스와핑
명령어 | PID | 필수여부 |
SET_CAL_PAGE | 0xEB | Y |
GET_CAL_PAGE | 0xEA | Y |
GET_PAG_PROCESSOR_INFO | 0xE9 | N |
GET_SEGMENT_INFO | 0xE8 | N |
GET_PAGE_INFO | 0xE7 | N |
SET_SEGMENT_MODE | 0xE6 | N |
GET_SEGMENT_MODE | 0xE5 | N |
COPY_CAL_PAGE | 0xE4 | N |
주기적 데이터 교환 - 기본 구성
명령어 | PID | 필수여부 |
SET_DAQ_PTR | 0xE2 | Y |
WRITE_DAQ | 0xE1 | Y |
SET_DAQ_LIST_MODE | 0xE0 | Y |
START_STOP_DAQ_LIST | 0xDE | Y |
START_STOP_SYNCH | 0xDD | Y |
WRITE_DAQ_MULTIPLE | 0xC7 | N |
READ_DAQ | 0xD8 | N |
GET_DAQ_CLOCK | 0xDC | N |
GET_DAQ_PROCESSOR_INFO | 0xDA | N |
GET_DAQ_RESOLUTION_INFO | 0xD9 | N |
GET_DAQ_LIST_INFO | 0xD8 | N |
GET_DAQ_EVENT_INFO | 0xD7 | N |
주기적 데이터 교환 - 정적 구성
명령어 | PID | 필수여부 |
CLEAR_DAQ_LIST | 0xE3 | Y |
GET_DAQ_LIST_INFO | 0xD8 | Y |
주기적 데이터 교환 - 동적 구성
명령어 | PID | 필수여부 |
FREE_DAQ | 0xD6 | Y |
ALLOC_DAQ | 0xD5 | Y |
ALLOC_ODT | 0xD4 | Y |
ALLOC_ODT_ENTRY | 0xD3 | Y |
플래시 프로그래밍
명령어 | PID | 필수여부 |
PROGRAM_START | 0xD2 | Y |
PROGRAM_CLEAR | 0xD1 | Y |
PROGRAM | 0xD0 | Y |
PROGRAM_RESET | 0xCF | Y |
GET_PGM_PROCESSOR_INFO | 0xCE | N |
GET_SECTOR_INFO | 0xCD | N |
PROGRAM_PREPARE | 0xCC | N |
PROGRAM_FORMAT | 0xCB | N |
PROGRAM_NEXT | 0xCA | N |
PROGRAM_MAX | 0xC9 | N |
PROGRAM_VERIFY | 0xC8 | N |
EV (비동기 이벤트)
슬레이브가 마스터로 비동기 이벤트에 대한 정보를 보내려고 할 때 EV를 보낼 수 있다. (해당 항목의 구현은 선택사항)
위치 | 종류 | 설명 |
0 | BYTE | Packet Identifier = EV = 0xFD |
1 | BYTE | Event Code |
2..MAX_CTO-1 | BYTE | Optional Event Information Data |
SERV (Servie Request)
슬레이브는 이 메커니즘을 이용해 마스터에게 특정 서비스를 실행하도록 요청할 수 있다.
위치 | 종류 | 설명 |
0 | BYTE | Packet Identifier = SERV 0xFC |
1 | BYTE | Service Request Code |
2..MAX-CTO-1 | BYTE | Optional service request data |
슬레이브의 캘리브레이션 파라미터
XCP 슬레이브의 파라미터를 변경하려면, XCP 마스터는 해당 파라미터의 위치(Address)와 해당 값(변경할 value)을 슬레이브로 보내야 한다.
XCP는 항상 5바이트로 주소를 정의한다. (4 Byte : 실제 주소, 1 Byte : 주소 확장용)
CAN 예시)
CAN 전송방식에서는 XCP 메시지에 7바이트만 사용할 수 있다.
캘리브레이션 담당자가 4 바이트 값을 설정(변경)하고 하나의 CAN 메시지로 전송하려 한다면 공간이 부족하다. (Address 5Byte, Value 4Byte = 9 Byte < 7 Byte (CAN Packet size for XCP))
따라서, CAN 방식으로 4 바이트 값을 캘리브레이션 요청하려면, CAN 메시지가 2번 필요하다. (마스터에서 슬레이브로 송신)
슬레이브는 반드시 받은 메시지에 대한 응답이 있어야 하므로, 총 4회 메시지 교환이 일어난다.
캘리브레이션의 경우, RAM의 특정 주소에 값을 변경하는 것으로, 변경된 값을 비휘발성 메모리에 저장하지 않는경우, ECU reset 시 값이 보존되지 않는 이슈가 존재한다.
해당 이슈 관련 해결방안은 다음과 같다.
- 파라미터를 ECU에 저장
- RAM에 있는 변경된 데이터는 ECU의 EEPROM에 저장할 수 있다.
- 이 작업은 ECU를 램프다운(ramping down)할 때 자동으로 또는 사용자에 의해 수동으로 저장할 수 있다.
- 수천개의 파라미터를 가진 ECU에서는 사용하지 않는 EEPROM 메모리 공간을 제공하기 힘들어, 이 방법은 거의 사용되지 않는다.
- 전제조건 > 데이터를 슬레이브의 비 휘발성 메모리(EEPROM, Flash)에 저장할 수 있어야 한다. - RAM에 있는 파라미터를 다시 ECU의 플레시 메모리에 쓰는 것
- Flash 메모리에 다시 쓰기 전에, 소거 작업이 필요하다.(블록단위로만 가능, 특정 바이트만 삭제할 수 없다.)
- RAM에 있는 변경된 데이터는 ECU의 EEPROM에 저장할 수 있다.
- 파라미터를 PC에 파일 형태로 저장
- Hex 파일에 파라미터 세트 파일 저장 및 플래싱
- ECU를 플래싱 하는 것도 플래시의 파라미터를 변경하는 한 가지 방법이다.
- ECU가 부팅할 때 파라미터들은 RAM에 새로운 파라미터로 기록된다.(초기화) - 소스코드에서 파라미터 세트 및 플래시 파일 생성
- 파라미터 세트 파일은 C나 H 파일로 전송하여 다른 컴파일러/ 링커 작업 시 새로운 플래시 파일로 생성할 수 있다.
- 코드의 파라미터에 따라 플래싱 할 수 있는 Hex 파일을 생성하는 프로세스는 상당한 시간이 걸릴 수 있다. 캘리브레이션 담당자가 소스코드를 보유하지 않은 경우 이 방법을 사용할 수 없다. - 파라미터 세트 파일을 이용한 플래시 파일 생성
- 플래시 파일에는 주소와 값이 들어있는 Hex 파일이 있다.
- CANape는 파라미터 세트 파일에서 해당 주소와 값을 추출하고 Hex 파일의 해당 위치에 이 파라미터 값들을 업데이트 한다. → 변경된 파라미터 Hex 파일 생성
- 생성된 Hex 파일이 플래싱이 가능한지 확인해야 한다. → 체크섬
- Hex 파일에 파라미터 세트 파일 저장 및 플래싱
Reference
Andreas Patzer, Rainer Zaiser, XCP-ECU 개발을 위한 표준 프로토콜 - 프로토콜 기초와 응용분야 (Vector, 2014)
'기타 > XCP (파라미터 측정 및 캘리브레이션)' 카테고리의 다른 글
06. XCP 전송 레이어 (0) | 2022.01.04 |
---|---|
05. DTO 교환 - 동기화 데이터 교환 (0) | 2022.01.04 |
03. XCP 프로토콜 레이어 (1) | 2022.01.02 |
02. XCP 프로토콜의 기초 (1) | 2022.01.02 |
01. XCP 개요 (0) | 2021.12.31 |