XCP协议学习笔记

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种基本的数据包类型:

  1. 用于传输通用控制命令的数据包:CTO
  2. 用于传输同步数据的数据包:DTO

CTO(命令传输对象)用于传输通用控制命令

  1. 用于执行协议命令(CMD)
  2. 传输命令响应(RES)
  3. 错误(ERR)数据包
  4. 事件(EV)数据包
  5. 服务请求数据包(SERV)

DTO(数据传输对象)用于传输同步数据采集数据(DAQ)和传输同步数据刺激数据(STIM)。

XCP协议的帧格式

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

  1. XCP帧格式由头部、数据包、尾部组成,头部尾部根据协议在不同通信方式上有所区别。
  2. XCP数据包包含协议的通用部分,独立于使用的传输层。
  3. XCP数据包由标识字段、可选时间戳字段、数据字段组成。

标识字段

XCP数据包基本上总是以标识字段开头,该字段作为第一个字节包含数据包标识符(PID)。

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

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

数据段

  1. 对于CTO数据包,数据字段包含不同类型的CTO数据包的特定参数。
  2. 对于DTO数据包,数据字段包含用于同步获取和激励的数据。

CTO

CTO(Command Transfer Object)用于传输通用控制命令。

  1. 识别字段仅由PID组成,其中包含CTO数据包代码。时间戳字段不可用。
  2. 数据字段包含不同类型的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(储编程命令)
相关推荐
世人万千丶1 天前
Flutter 框架跨平台鸿蒙开发 - 恐惧清单应用
学习·flutter·华为·开源·harmonyos·鸿蒙
yuzhuanhei1 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
为何创造硅基生物1 天前
ESP32S3的RGB屏幕漂移问题
网络
好运的阿财1 天前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
憧憬从前1 天前
算法学习记录DAY2
学习
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
周杰伦fans1 天前
C# required 关键字详解
开发语言·网络·c#
babe小鑫1 天前
会计岗位学习数据分析的价值分析
学习·数据挖掘·数据分析