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(储编程命令)
相关推荐
RainCity2 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng9 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆13 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8613 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e13 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
网络研究院13 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智13 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest13 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全