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(储编程命令)
相关推荐
计算机魔术师2 小时前
一键沉浸式体验:清华开源OpenMAIC,重塑多智能体学习新范式
学习·typescript·开源·多智能体·openmaic
左左右右左右摇晃2 小时前
JVM 整理(三) 方法区+虚拟机栈
jvm·笔记
专家大圣2 小时前
告别付费 OCR!PaddleOCR-VL + cpolar,打造专属便携识别工具✨
网络·ocr·内网穿透·cpolar
He BianGu2 小时前
【笔记】在WPF中CommandManager的功能和应用场景详细介绍
笔记·wpf
qq1180096172 小时前
机器人仿真课01,安装环境和habitat_lab以及habitat_sim的基本要素
学习
穿过锁扣的风2 小时前
【完整带注释版】图像直方图绘制教程(OpenCV+Matplotlib)
笔记·python·opencv
AI成长日志2 小时前
【datawhale】hello agents开源课程第3章学习记录:大语言模型基础学习心得博客
学习·语言模型·开源
超级璐璐2 小时前
fast-livo2修改笔记
笔记
IT19952 小时前
计算机理论文档阅读笔记-MQTT vs WebSocket
笔记·websocket·网络协议