XCP标定协议
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个字节。
表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数据结构如下所示。
RES:命令响应,PID=0xFF,从机接收到主机的CMD后,成功执行命令,并且向主机返回命令响应数据包,CTO数据结构如下所示。
ERR:错误响应,PID=0xFE,从机接收到主机的CMD后,执行命令时发生错误,从机向主机返回错误响应数据包,CTO数据结构如下所示。
EV:报告事件,PID=0xFD,当从机发现自身出现了异常的事件时,从机会主动向主机发送报告事件数据包,CTO数据结构如下所示。
SERV:请求主机执行服务,PID=0xFC,当从机需要主机执行某些服务是时,从机会主动向主机发送请求主机执行服务数据包,CTO结构如下所示。
数据传输对象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等。
本文为转载整理,版权归原作者所有;原文请点左上角【转载】查看。本篇在原文基础上做了少量二次创作,如需再转载请联系原作者授权。