1 XCP协议概述

XCP(Universal Measurement and Calibration Protocol),即通用测试和标定协议,X代表不同的传输层上传输,例如CAN/CAN FD、Ethernet、FlexRay、SCI、SPI、USB。可以通过不同类型的总线测量和标定ECU内部参数。

XCP的前身叫做CCP(CAN Calibration Protocol),是一种仅针对CAN接口的测量标定协议。随着整车网络需求的不断发展,现如今,CAN总线已经无法完全满足整车需求,智能化和网联化需要以太网等的加入。ASAM在CCP协议的基础上,又提出了XCP协议标准,能够适配多种网络传输协议和总线类型。

2 XCP协议框架

为了确保传输网络的独立性,XCP分为协议层和传输层。

协议层供了一种通用通信标准,为不同的总线移植通信代码时,协议层的内容不需要修改,可以节省大量时间。

传输层提供了各类通信总线的接口标准,根据实际的物理连接选择对应的标准,如图2-1:

  • 基于CAN的XCP

  • 基于LIN的XCP

  • 基于SxI(SPI、SCI)的XCP

  • 基于以太网(TCP/UDP)的XCP

  • 基于USB的XCP

  • 基于FlexRay的XCP

图2-1 XCP框架

相较于CCP协议,XCP在功能上做了许多改进,包括:

  • 支持多种物理层协议,不仅限于CAN

  • 优化了控制单元资源的利用率

  • 同步数据激励

  • 支持启动测量

  • 通过块传输命令优化通信

  • 即插即用配置

  • 通过测量控件内的时间戳精确测量数据采集

3 XCP协议数据结构

XCP协议中分为主机Master 和从机Salve,通过XCP Packet 进行交互,XCP Packet如图3-1所示。

图3-1 XCP消息帧格式

XCP Header与XCP Tail属于传输层的内容,在TCP/UDP协议中为控制字节,在CAN传输时直接忽略。

XCP Packet属于协议层内容,其中分为认证域(Identification Field)、采样时间域(Timestamp Field)和数据域(Data Field)。

认证域:PID必须存在,作为每一帧XCP消息的编号。用作CAN通信时,PID长度为1个字节,其定义的各类功能,如表3-1所示。FILL用于描述报文对齐信息,DAQ表示DAQ列表的标识符,在CAN通信中可以直接忽略。

采样时间域:传输时间戳信息,Timestamp数据长度为1~4个字节,在CAN通信中可以直接忽略。

数据域:存放上位机与ECU传递的有效数据,用作CAN通信时,长度为0~7个字节。

基础标准指令STD

CODE

备注

CONNECT

0xFF

必选指令,用于建立与ECU的连接,指令包含ECU的地址等信息,在建立连接后,外部设备可以向ECU发送其它指令。

DISCONNECT

0xFE

必选指令,用于断开与ECU的连接,在断开连接后,外部设备不能再向ECU发送指令。

GET_STATUS

0xFD

必选指令,用于获取ECU的状态信息,可以返回ECU的运行状态、错误码等信息。

SYNCH

0xFC

必选指令,用于同步ECU和外部设备的信息,可以确保ECU和外部设备在同一时间点上进行通信。

GET_COMM_MODE_INFO

0xFB

可选命令

GET_ID

0xFA

可选命令

SET_REQUEST

0xA9

可选命令

GET_SEED

0xF8

可选命令

UNLOCK

0xF7

可选命令

SET_MTA

0xF6

可选命令

UPLOAD

0xF5

可选命令

SHORT_UPLOAD

0xF4

可选命令

BUILD_CHECKSUM

0xF3

可选命令

TRANSPORT_LAYER_CMD

0xF2

可选命令

USER_CMD

0xF1

可选命令

标定功能指令CAL

CODE

备注

DOWNLOAD

0xF0

必选指令,用于向ECU写入数据,可以包含写入的地址、长度、数据等信息。

DOWNLOAD_NEXT

0xEF

可选命令

DOWNLOAD_MAX

0xEE

可选命令

SHORT_DOWNLOAD

0xED

可选命令

MODIFY_BITS

0xEC

可选命令

标定页面切换指令PAG

CODE

备注

SET_CAL_PAGE

0xEB

可选命令

GET_CAL_PAGE

0xEA

可选命令

GET_PAG_PROCESSOR_INFO

0xE9

可选命令

GET_SEGEMENT_INFO

0xE8

可选命令

GET_PAGE_INFO

0xE7

可选命令

SET_SEGEMENT_MODE

0xE6

可选命令

GET_SEGEMENT_MODE

0xE5

可选命令

COPY_CAL_PAGE

0xE4

可选命令

DAQ传输指令DAQ

CODE

备注

CLEAR_DAQ_LIST

0xE3

SET_DAQ_PTR

0xE2

WRITE_DAQ

0xE1

SET_DAQ_LIST_MODE

0xE0

GET_DAQ_LIST_MODE

0xDF

可选命令

START_STOP_DAQ_LIST

0xDE

START_STOP_SYNCH

0xDD

GET_DAQ_CLOCK

0xDC

可选命令

READ_DAQ

0xDB

可选命令

GET_DAQ_PROCESSOR_INFO

0xDA

可选命令

GET_DAQ_RESOLUTION_INFO

0xD9

可选命令

GET_DAQ_LIST_INFO

0xD8

可选命令

GET_DAQ_EVENT_INFO

0xD7

可选命令

FREE_DAQ

0xD6

ALLOC_DAQ

0xD5

ALLOC_ODT

0xD4

ALLOC_ODT_ENTRY

0xD3

WRITE_DAQ_MULTIPLE

0xC7

可选命令

数据刷写指令PGM

CODE

备注

PROGRAM_START

0xD2

PROGRAM_CLEAR

0xD1

PROGRAM

0xD0

PROGRAM_RESET

0xCF

GET_PGM_PROCESSOR_INFO

0xCE

可选命令

GET_SECTOR_INFO

0xCD

可选命令

PROGRAM_PREPARE

0xCC

可选命令

PROGRAM_FORMAT

0xCB

可选命令

PROGRAM_NEXT

0xCA

可选命令

PROGRAM_MAX

0xC9

可选命令

PROGRAM_VERIFY

0xC8

可选命令

表3-1 XCP Packet PID与任务的对应关系

CAN协议与XCP Packet的对应关系如图3-2所示。

图3-2 CAN协议与XCP Packet的对应关系

4 XCP通信模式

XCP采用一主多从的通信模式,单个主机可以同时与多个从机通信。主机通过下发命令与从机建立连接,解锁,读取数据,修改参数等操作,以"XCP数据包”的数据对象形式传输。XCP数据包有两种类型:命令传输对象(CTO:Command Transfer Object)和数据传输对象(DTO:Data Transfer Object)。

  • 命令传输对象CTO,包含5种形式:

    • CMD:控制命令,PID范围为0xC0~0xFF,主机向从机发送的命令请求,从机按照该编号执行相应命令,CTO数据结构如下所示。

    位置

    定义

    字节0

    PID:0xC0~0xFF

    字节1~(CTO数据域字节长度-1)

    命令数据

    • RES:命令响应,PID=0xFF,从机接收到主机的CMD后,成功执行命令,并且向主机返回命令响应数据包,CTO数据结构如下所示。

    位置

    定义

    字节0

    PID=0xFF

    字节1~(CTO数据域字节长度-1)

    命令响应数据

    • ERR:错误响应,PID=0xFE,从机接收到主机的CMD后,执行命令时发生错误,从机向主机返回错误响应数据包,CTO数据结构如下所示。

    位置

    定义

    字节0

    PID=0xFE

    字节1

    错误代码

    字节2~(CTO数据域字节长度-1)

    错误响应数据(可选)

    • EV:报告事件,PID=0xFD,当从机发现自身出现了异常的事件时,从机会主动向主机发送报告事件数据包,CTO数据结构如下所示。

    位置

    定义

    字节0

    PID=0xFD

    字节1

    事件代码

    字节2~(CTO数据域字节长度-1)

    事件报告数据(可选)

    • SERV:请求主机执行服务,PID=0xFC,当从机需要主机执行某些服务是时,从机会主动向主机发送请求主机执行服务数据包,CTO结构如下所示。

    位置

    定义

    字节0

    PID=0xFC

    字节1

    事件代码

    字节2~(CTO数据域字节长度-1)

    事件报告数据(可选)

  • 数据传输对象DTO,包含2种形式:

    • DAQ:传输同步数据包,在DAQ模式下,从机周期性上传数据。

    • STIM:同步激励数据,在DAQ模式下,主机周期性的向从机下载数据。

    PID为ODT列表的绝对编号,在DAQ模式下,XCP Packet中的FILL可以用来描述报文对齐信息,DAQ可以表示DAQ列表的标识符,TIMSTAMP可以表示事件戳,DATA用来存放数据,建议采用PID+DATA的模式进行通信,则XCP on CAN与CCP协议一致,方便两者在必要的场合下相互移植。

XCP数据对象传输形式如图4-1所示。

图4-1 XCP数据对象传输形式

5 XCP的应用

XCP标定协议是CCP的升级版本,XCP对CCP进行了扩展与补充。XCP相比CCP最大的升级是XCP能够适配多种网络传输协议和总线类型而不再仅限于CAN总线。在实际应用中,对于支持CAN总线的ECU,通常使用CCP标定协议。对于不支持CAN总线的ECU,则需要使用XCP on Ethernet,XCP on LIN等。