XCP协议
- 其他
- 2025-08-28 12:36:01

文章目录 一、XCP的主从架构二、XCP 的协议组成三、XCP Packet Format1. CTO的标识字段2. DTO的标识字段3. absolute ODT number的标识字段4. Identification Field Type “relative ODT number and absolute DAQ list number”5. Timestamp Field6. Data Field 四、CTO(Command Transfer Object)Packets1. Command Packet (CMD)1.1 Standard commands (STD)1.2 Calibration commands (CAL)1.3 Page switching commands (PAG)1.4 Data Acquisition and Stimulation commands (DAQ)1.5 Non-volatile memory programming commands (PGM) 2. Command Response packet (RES)3. Error packet (ERR)4. Event packet (EV)5. Service Request packet (SERV) 五、DTO(Data Transfer Object)Packets1. Data Acquisition Packet (DAQ)2. Synchronous Data Stimulation Packet (STIM) 参考 一、XCP的主从架构
XCP(Universal Measurement and Calibration Protocol,通用测量与校准协议)采用主从架构,这种架构明确了参与通信的设备角色和功能,使得系统的通信和管理更加有序。
主设备通常是测量与校准工具,例如 PC 上运行的校准软件。它在整个通信过程中起到发起者和控制者的作用。从设备一般是被测量和校准的对象,常见的如汽车电子控制单元(ECU)、工业自动化中的控制器等。它主要负责响应主设备的命令。主设备发送命令连接并开始,从设备在接收到后,再向主设备发送应答,可以采用一主多从的通信形式。
二、XCP 的协议组成所有XCP通信都以XCP包的数据对象方式进行传输。 有两种基本的数据包类型:
传输通用控制命令的数据包:CTO(Command Transfer Object)传输同步数据的数据包:DTO(Data Transfer Object)三、XCP Packet Format
XCP报文由标识字段(Identification Field)、时间戳字段(Timestamp Field)和数据字段(Data Field)组成。
当交换XCP包时,主从双方都必须能够明确地识别任何传输的XCP包,包括其类型和数据字段的内容。 为此目的,XCP包基本上总是以标识字段开始,标识字段作为第一个字节包含包标识符(PID)。
1. CTO的标识字段对于CTO报文,标识字段应该能够根据报文的类型识别报文,区分协议命令(CMD)、命令响应(RES)、错误报文(ERR)、事件报文(EV)和服务请求报文(SERV)。 对于CTO数据包,标识字段仅由PID组成,其中包含CTO数据包代码。
2. DTO的标识字段对于DTO包,标识字段应该能够明确地标识DAQ列表和该DAQ列表中的ODT,它们描述了数据字段的内容。 对于每个DAQ列表,通过ODT_NUMBER的ODT编号从0重新开始: 因此,ODT_NUMBER的作用域对于DAQ列表是本地的,并且ODT号码在同一个从设备中不是唯一的。
3. absolute ODT number的标识字段将相对而非唯一的ODT号映射到明确可识别的DTO包的一种方式是,通过“此DAQ列表的FIRST_PID”将相对ODT号映射到绝对ODT号,然后在DTO包内传输绝对ODT号。
absolute_ODT_NUMBER(ODT i in DAQ list j) = FIRST_PID(DAQ list j) + relative_ODT_NUMBER(ODT i)
FIRST_PID是该DAQ列表传输的第一个ODT的DTO包中的PID。 FIRST_PID由从设备决定,并在START_STOP_DAQ_LIST(DAQ列表j)上发送给主设备。
在分配FIRST_PID时,从服务器必须确保每个ODT都有一个唯一的绝对ODT号。 所有的PID也必须在PID(DAQ)和PID(STIM)的可用范围内。
对于标识字段类型为“绝对ODT号”的DTO报文,标识字段仅由PID组成,其中包含绝对ODT号。
4. Identification Field Type “relative ODT number and absolute DAQ list number”将相对而非唯一的ODT号映射到明确可识别的DTO包的另一种方式是,将绝对DAQ列表号与DTO包中的相对ODT号一起传输。 对于标识字段类型为“相对ODT号和绝对DAQ列表号”的DTO报文,标识字段由PID(包含相对ODT号)、DAQ位(包含绝对DAQ列表号)和一个可选的FILL字节组成。
将DAQ列表号传输为BYTE,这减少了理论上可能的数据包数量,因为DAQ_LIST_NUMBER参数被编码为WORD。 如果必须满足XCP包的某些对齐条件,则有可能传输额外的FILL字节。 在GET_DAQ_PROCESSOR_INFO处的DAQ_KEY_BYTE,从机通知主机在将DAQ数据包传输到主机时将使用的标识字段的类型。主服务器在向从服务器传输STIM包时必须使用相同类型的标识字段。
5. Timestamp FieldXCP包可以选择性地包含时间戳字段。
对于CTO报文,时间戳字段不可用。 直接在标识字段之后的DTO数据包可能有一个包含时间戳(TS)的时间戳字段。
GET_DAQ_PROCESSOR_INFO的TIMESTAMP_SUPPORTED标志表示从机是否支持时间戳数据采集和激励。
使用SET_DAQ_LIST_MODE的TIMESTAMP标志,主机可以将DAQ列表设置为时间戳模式。
GET_DAQ_RESOLUTION_INFO TIMESTAMP_MODE中的TIMESTAMP_FIXED标志表示Slave总是以时间戳模式发送DTO报文。主服务器不能使用SET_DAQ_LIST_MODE关闭时间戳。
TIMESTAMP标志也可以用于DIRECTION = DAQ和DIRECTION = STIM。 对于DIRECTION = DAQ,时间戳模式意味着从设备在一个DAQ周期的第一个ODT的DTO包中传输其时钟的当前值。 对于DIRECTION = STIM,时间戳模式意味着主设备首先从从设备接收带有时间戳的DTO(DAQ),然后在DTO包中为DAQ周期的第一个ODT回显从设备时钟的当前值。 通过这种方式,“时间戳”可以用作计数器,使从机有可能检查DTO(DAQ)和CTO(STIM)在功能上是否属于一起。
时间戳字段总是由TS组成,包含同步数据传输时钟的当前值。 同步数据传输时钟是从机中一个自由运行的计数器,它永远不会被重置或修改。 根据时间戳字段类型的不同,TS以BYTE、WORD或DWORD的形式传输。 在 GET_DAQ_RESOLUTION_INFO 服务中,通过 TIMESTAMP_MODE(时间戳模式)和 TIMESTAMP_TICKS(时间戳刻度),从设备会告知主设备在向主设备传输数据采集(DAQ)数据包时所使用的时间戳字段类型。主设备在向从设备传输刺激(STIM)数据包时,必须使用相同类型的时间戳字段。TIMESTAMP_MODE 和 TIMESTAMP_TICKS 包含了数据传输时钟分辨率的相关信息。
6. Data FieldXCP包最终包含一个数据字段。 对于CTO报文,Data Field包含了不同类型CTO报文的具体参数。 对于DTO包,数据字段包含同步采集和刺激的数据。
四、CTO(Command Transfer Object)PacketsCTO用于传输通用控制命令。 标识字段仅由 PID(Packet Identifier,数据包标识符)组成,其中包含 CTO(Command Transmission Object,命令传输对象)数据包代码。 时间戳字段不可用。 数据字段包含不同类型 CTO 数据包的特定参数。
1. Command Packet (CMD)CMD(Protocol Command),PID范围为 0xC0 ≤ CMD ≤ 0xFF,主机向从机发送的命令请求,从机据此识别命令。
1.1 Standard commands (STD) 1.2 Calibration commands (CAL) 1.3 Page switching commands (PAG) 1.4 Data Acquisition and Stimulation commands (DAQ) 1.5 Non-volatile memory programming commands (PGM) 2. Command Response packet (RES)RES(Transferring Command Responses),PID值为0FF,从机在接收到主机的CMD后,当命令被执行成功时,从机向主机发送肯定响应数据包。
3. Error packet (ERR)ERR(Error Packets),PID值为0XFE,当命令执行发生错误时,从机反馈错误数据包。
4. Event packet (EV)EV(Event),PID值为0xFD,当从机向主机报告一个异步的事件时,发送次数据包。
5. Service Request packet (SERV)SERV(Service Request Packets),PID值为0xFC,当从机需要主机做出某些动作时,从机向主机发送此数据包。
五、DTO(Data Transfer Object)PacketsDTO数据包传输同步数据包DAQ(Data Acquisition)和同步激励数据STIM(Data Stimulation packet)。
FILL用于描述报文对齐信息DAQ表示DAQ列表的标识符TIMSTAMP为可选项Data存放数据 1. Data Acquisition Packet (DAQ)PID(数据包标识符)包含范围在 0x00 <= DAQ <= 0xFB 之间的(绝对或相对)ODT(Object Descriptor Table,对象描述表)编号。 ODT 编号指向一个对象描述表,该表描述了剩余数据字节中包含哪些数据采集元素。
在DAQ模式下,从机周期性上传数据。
2. Synchronous Data Stimulation Packet (STIM)PID(数据包标识符)包含范围在 0x00 <= STIM <= 0xBF 之间的(绝对或相对)ODT(对象描述表)编号,此处该编号用于刺激数据相关,记为 STIM。 该 ODT 编号指向一个对应的对象描述表(ODT),此表描述了剩余数据字节中包含哪些数据刺激元素。
在STIM模式下,主机周期性的向从机下载数据。
参考 5分钟看懂XCP协议小猫爪:嵌入式小知识15-XCP基础简介