Table of contents

     

     

    네트워크 통신을 통해, 데이터를 주고 받기 위해서는 패킷의 구조가 정해져 있어야 합니다.

     

     

    XCP 역시, 다른 프로토콜들과 마찬가지로 패킷이 아래와 같이 분류되어 있습니다.

     

     

    상위 분류 내용 하위 분류
    CTO(Command Transfer Object) 명령어 교환 CMD(Command Packet)
    RES(Command Response Packet)
    ERR(Error)
    EV(Event Packet)
    SERV(Service Request Packet)
    DTO(Data Transfer Object) 데이터 교환 DAQ(Data AcQuisition)
    STIM(Stimulation)

     

     

    하위 분류 내용 상위 분류
    CMD(Command Packet) 명령어 전송         CTO(Command Transfer Object)
    RES(Command Response Packet) 긍정적 응답 CTO(Command Transfer Object)
    ERR(Error) 부정적 응답 CTO(Command Transfer Object)
    EV(Event Packet) 비동기 이벤트 CTO(Command Transfer Object)
    SERV(Service Request Packet) 서비스 요청 CTO(Command Transfer Object)
    DAQ(Data AcQuisition) 주기적인 측정값 전송 DTO(Data Transfer Object)
    STIM(Stimulation) 슬레이브의 주기적인 신호 인가 DTO(Data Transfer Object)

     

     

    하위 분류 이후에도, 세부 내용이 데이터의 성격에 따라 조금씩 다른 부분이 있습니다.

     

    # 내용은 Vector사의 Referencebook이나 ASAM XCP 문서를 참조하는 것이 좋습니다.

     

     

     

     

     

     

     

     

     

    XCP Packet 기본 구조

     

    XCP Packet 기본 구조를 다음과 같이 정의하고 있습니다.

     

     

     

     

     

    TCP 및 UDP 관점에서 보면, XCP 패킷의 구조는 아래와 유사합니다.

     

    보시는 것처럼 XCP on Ethernet에서는 Tail 활용하지 않는 것을 원칙으로 하죠.

     

     

     

     

    결국, XCP on Ethernet만의 패킷의 기본 구조 보면 아래와 같습니다.

     

    하지만, 구조는 설정에 따라 다르고, CTO 패킷보다는 DTO 패킷의 설명이라고 보는 것이 이해하기에 좋습니다.

     

     

     

     

     

    , 영역에 대한 설명은 다음과 같습니다.

     

     

    분류 바이트 내용
    LEN 2 XCP 패킷의 길이를 의미
    Byte Order : Intel / Little Endian
    )
    - 0x0200 = 2Byte
    - CTR 영역 이후로 2Byte
    CTR(Counter) 2 패킷을 보낼때마다 증가하는 카운터
    패킷 손실을 감지하기 위해 활용
    PID(Packet Identifier) 1 패킷의 식별자
    하기의 그림 참조
    FILL 0, 1 alignement 위해 활용
    Padding 동일한 역할
    DAQ 0, 1, 2 절대 DAQ List
    TIME STAMP 0, 1, 2, 4 측정된 시간
    DATA N 측정된 데이터

     

    # PID 활용 범위

     

     

     

     

     

    CTO 패킷 구조와 DTO 패킷 구조

    CTO 패킷 구조

     

     

     

     

     

    위의 좌측 그림은 XCP Master XCP Slave에게 보내는 CTO 패킷입니다.

     

    CTO 내에서도 CMD라는 패킷이고, PID 0xFF이므로 CONNECT 의미합니다.

     

    우측 그림은 XCP Slave Master에게 보내는 CTO 패킷이고, 중에서도 RES 의미합니다.

     

     

     

    여기서 주의해야할 점은 송신자가 Master인지, Slave인지 먼저 구분되고

    PID에 따라 패킷의 의미가 달라지는 점입니다.

     

    위의 두 패킷을 구분하기 위해서는 'PID' 영역의 값을 보고 판단해야하는데 둘다 모두 0xFF입니다.

     

    하지만, 송신자가 Master Slave냐에 따라, CMD 패킷이 되기도 하고 RES 패킷으로 구분되죠.

     

    # 자세한 내용은 Vector사의 Reference ASAM 문서를 통해 확인할 있습니다.

     

     

     

    DTO 패킷 구조

     

     

     

    DTO 패킷의 구조를 살펴보겠습니다.

     

    FILL, DAQ, TIME STAMP 영역을 활용할 수도 있지만, DTO 패킷 구조의 종류 하나인 것이고 위와 같이 간단하게 구성할 수도 있습니다.

     

    DTO 패킷 구조의 종류는 아래에서 다시 정리하고, 일단 가볍게 정리해보겠습니다.

     

     

     

     

    먼저, LEN CTR XCP 헤더로 분류됩니다.

     

    LEN CTR 각각 2바이트이며, 패킷의 길이와 카운터를 의미하죠.

     

    LEN XCP 전체 길이를 의미하는 것이 아니고, XCP 패킷의 길이를 의미합니다.

     

    XCP 패킷은 CTR 이후부터를 지칭하고, 아래 그림 기준으로 PID DATA 영역이 되겠네요.

     

     

     

     

     

     

    DTO 패킷 구조의 종류

     

    위에서 DTO 패킷 가장 기본적인 구조를 정리했습니다.

     

    그리고 이번에는 기본적인 외의 DTO 패킷을 살펴보겠습니다.

     

     

     

     

     

    DTO패킷은 대표적으로 4가지로 구분되는데, ID(Identification Field), TS(Timestamp Field) 영역에서 차이가 있습니다.

     

     

     

     

     

     

     

     

    영역이 의미하는 바가 있는데, PID 경우 조금 특이하게 종류에 따라 의미하는 내용이 달라집니다.

     

    PID 영역은 뒤에 DAQ 영역의 유무에 따라, 절대적인 ODT 번호를 의미하거나 상대적인 ODT 번호를 의미합니다.

     

    DAQ 절대적인 DAQ 리스트 번호를 의미합니다.

     

    TS Time stamp 약어이며, 그대로 시간을 의미합니다.