본문 바로가기
기타/XCP (파라미터 측정 및 캘리브레이션)

04. CTO 교환

by 멘토_ 2022. 1. 3.
반응형

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
BYTE Error code
2 ... MAX_CTO-1 BYTE Command specific parameter

특정 파라미터를 긍정적 응답 뿐 아니라, 부정적 응답과 함께 보조 정보로 전송할 수 도 있다.

 

예로, 마스터와 슬레이브 간 Point to Point 접속을 만들기 위해서는 다음과 같이 통신한다.

마스터 → 슬레이브 : Connection CMD

마스터 ← 슬레이브 : RES

 

마스터 → 슬레이브 : Connection CMD 구조

위치 종류 설명
0 BYTE Command Code = 0xFF
BYTE Mode
0x00 = Normal
0x01 = User Defined

Mode 0x00 은 마스터가 슬레이브와 XCP 통신을 원한다는 요청을 의미하고

Mode 0x01 은 마스터가 슬레이브에 XCP 통신을 요청하고 사용자 정의 모드로 전환할 것을 통지하는 것을 의미한다.

 

마스터 ← 슬레이브 : RES

위치 종류 설명
0 BYTE Packet ID : 0xFF → RES
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 시 값이 보존되지 않는 이슈가 존재한다.

해당 이슈 관련 해결방안은 다음과 같다. 

    1. 파라미터를 ECU에 저장
      1. RAM에 있는 변경된 데이터는 ECU의 EEPROM에 저장할 수 있다.
        - 이 작업은 ECU를 램프다운(ramping down)할 때 자동으로 또는 사용자에 의해 수동으로 저장할 수 있다.
        - 수천개의 파라미터를 가진 ECU에서는 사용하지 않는 EEPROM 메모리 공간을 제공하기 힘들어, 이 방법은 거의 사용되지 않는다.
        - 전제조건 > 데이터를 슬레이브의 비 휘발성 메모리(EEPROM, Flash)에 저장할 수 있어야 한다.
      2. RAM에 있는 파라미터를 다시 ECU의 플레시 메모리에 쓰는 것
        - Flash 메모리에 다시 쓰기 전에, 소거 작업이 필요하다.(블록단위로만 가능, 특정 바이트만 삭제할 수 없다.)
    2. 파라미터를 PC에 파일 형태로 저장
      1. Hex 파일에 파라미터 세트 파일 저장 및 플래싱
        - ECU를 플래싱 하는 것도 플래시의 파라미터를 변경하는 한 가지 방법이다.
        - ECU가 부팅할 때 파라미터들은 RAM에 새로운 파라미터로 기록된다.(초기화)
      2. 소스코드에서 파라미터 세트 및 플래시 파일 생성
        - 파라미터 세트 파일은 C나 H 파일로 전송하여 다른 컴파일러/ 링커 작업 시 새로운 플래시 파일로 생성할 수 있다.
        - 코드의 파라미터에 따라 플래싱 할 수 있는 Hex 파일을 생성하는 프로세스는 상당한 시간이 걸릴 수 있다. 캘리브레이션 담당자가 소스코드를 보유하지 않은 경우 이 방법을 사용할 수 없다.
      3. 파라미터 세트 파일을 이용한 플래시 파일 생성
        - 플래시 파일에는 주소와 값이 들어있는 Hex 파일이 있다.
        - CANape는 파라미터 세트 파일에서 해당 주소와 값을 추출하고 Hex 파일의 해당 위치에 이 파라미터 값들을 업데이트 한다. → 변경된 파라미터 Hex 파일 생성
        - 생성된 Hex 파일이 플래싱이 가능한지 확인해야 한다. → 체크섬

 

Reference

Andreas Patzer, Rainer Zaiser, XCP-ECU 개발을 위한 표준 프로토콜 - 프로토콜 기초와 응용분야 (Vector, 2014)
반응형