XCP协议
文章目录
- 一、XCP的主从架构
- 二、XCP 的协议组成
- 三、XCP Packet Format
- 1. CTO的标识字段
- 2. DTO的标识字段
- 3. absolute ODT number的标识字段
- 4. Identification Field Type “relative ODT number and absolute DAQ list number”
- 5. Timestamp Field
- 6. Data Field
- 四、CTO(Command Transfer Object)Packets
- 1. 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)Packets
- 1. 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 Field
XCP包可以选择性地包含时间戳字段。
对于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 Field
XCP包最终包含一个数据字段。
对于CTO报文,Data Field包含了不同类型CTO报文的具体参数。
对于DTO包,数据字段包含同步采集和刺激的数据。
四、CTO(Command Transfer Object)Packets
CTO用于传输通用控制命令。
标识字段仅由 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)Packets
DTO数据包传输同步数据包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基础简介