XCP是什么?
XCP表示"通用测量和校准协议"。"X"代表任意的传输层(如CAN、CANFD、FlexRay、Ethernet...)。由ASAM工作委员会(自动化和测量系统标准化协会)标准化。ASAM是汽车OEM,供应商和工具生产商的组织。
XCP是继CCP(CAN校准协议)之后的协议升级版,基于CAN的部分基本没有改变。XCP的开发旨在通过不同的传输媒介来实现此功能。
"用校准协议(XCP:Universal Calibration Protocol)"

网络和传输方式
一主多从的通信示例

XCP的传输模式

XCP命令简介
命令类型



如将命令按传递方向,可划分如下:

CMD:指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态等一些和下位机交互的命令;
STIM:你可以理解为一种上位机向下位机大量发数据的一种方式,相当于反向的DAQ;用于数据标定时,上位机向下位机修改参数。
Response:肯定应答,指的下位机答复上位机的命令;
Error:否定应答上位机的命令;
Event:事件,指下位机发生某事件时通知上位机;
Service:指下位机在某些情况下,需要上位机执行一些动作,可理解为请求上位机服务。
DAQ:下位机上传数据给上位机。
XCP消息帧结构说明
所有XCP通信都作为称为XCP数据包的数据对象传输。 有2种基本的数据包类型:
- 用于传输通用控制命令的数据包:CTO
- 用于传输同步数据的数据包:DTO
CTO(命令传输对象)用于传输通用控制命令
- 用于执行协议命令(CMD)
- 传输命令响应(RES)
- 错误(ERR)数据包
- 事件(EV)数据包
- 服务请求数据包(SERV)
DTO(数据传输对象)用于传输同步数据采集数据(DAQ)和传输同步数据刺激数据(STIM)。

XCP协议的帧格式
主、从设备之间每次传输的数据都采用XCP帧的格式,包含一个XCP报头、XCP数据包和XCP报尾。XCP帧支持的传输层可将这三个帧元素映射到相应的传输帧格式。


- XCP帧格式由头部、数据包、尾部组成,头部尾部根据协议在不同通信方式上有所区别。
- XCP数据包包含协议的通用部分,独立于使用的传输层。
- XCP数据包由标识字段、可选时间戳字段、数据字段组成。
标识字段
XCP数据包基本上总是以标识字段开头,该字段作为第一个字节包含数据包标识符(PID)。
主设备到从设备的标识字段

从设备到主设备的标识字段

数据段
- 对于CTO数据包,数据字段包含不同类型的CTO数据包的特定参数。
- 对于DTO数据包,数据字段包含用于同步获取和激励的数据。
CTO
CTO(Command Transfer Object)用于传输通用控制命令。

- 识别字段仅由PID组成,其中包含CTO数据包代码。时间戳字段不可用。
- 数据字段包含不同类型的CTO数据包的特定参数。
CMD
CMD(Command Packet)的PID包含0xC0 <= CMD <= 0xFF范围内的代码。所有可能的命令代码都在命令代码(CMD)定义。

RES
RES(Command Response packet)PID包含命令正响应包代码RES = 0xFF。如果命令成功执行,RES将作为CMD的回复发送。

ERR
ERR(Error packet)的PID包含数据包代码ERR = 0xFE。如果命令未成功执行,ERR将作为CMD的响应发送。第二个字节包含错误代码。后续定义了错误代码。

EV
EV(Event packet)的PID包含数据包代码EV = 0xFD。如果从设备想要报告异步事件包,则发送EV。第二个字节包含事件代码。后续定义了事件代码。实现是可选的。从设备发送到主设备的事件数据包无被确认回复,因此不能保证传输。

SERV
SERV(Service Request packet)的PID包含请求包代码SERV = 0xFC。SERV要求主设备执行一些操作。第二个字节包含服务请求代码。可能的服务请求代码在后续定义。

DTO

DTO用于传输同步数据采集数据(DAQ)和传输同步数据刺激数据(STIM)。 识别字段的内容因识别字段类型而异。 时间戳字段的内容因时间戳字段类型而异。 识别字段类型和时间戳字段类型的任何组合都是可能的。 数据字段包含用于同步获取和刺激的数据。
DAQ
PID包含0x00 <= DAQ <= 0xFB范围内的(绝对或相对)ODT数。ODT编号是指对象描述符表(ODT),该表描述了剩余数据字节中包含哪些数据采集元素。

STIM
PID包含0x00 <= STIM <= 0xBF范围内的(绝对或相对)ODT编号。ODT编号是指相应的对象描述符表(ODT),该表描述了剩余数据字节中包含哪些数据刺激元素。

相关代码
错误代码

事件代码
下表中的事件数据包代码可以作为PID = 0xFD的异步数据包发送。实现是可选的。从设备发送到主设备的事件数据包不被确认,因此不能保证传输。

服务代码
下表中的服务请求数据包代码可以作为PID = 0xFC的异步数据包发送。对于从设备来说,实现是可选的,但对于主设备来说是强制性的。从设备发送到主设备的服务请求包不被确认,因此不能保证传输。

命令代码
CMD-STD(标准命令)

CMD-CAL(标定命令)

CMD-PAG(页切换命令)

CMD-DAQ(数据采集命令)

CMD-PGM(储编程命令)
